프라이빗 VPC에서 AWS Secrets Manager 보안 암호를 교체하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 4월 2일

Amazon Virtual Private Cloud(Amazon VPC)에서 AWS 서비스에 대한 AWS Secrets Manager 보안 암호를 교체하려고 했습니다. 하지만 작업이 실패했고 Amazon CloudWatch Logs에는 AWS Lambda 작업 시간이 초과되었다고 표시됩니다.

간략한 설명

Secrets Manager는 Amazon VPC 프라이빗 서브넷에서 실행되는 AWS 서비스에 대한 보안 암호를 교체할 수 없습니다. 서브넷에 인터넷 액세스 권한이 없기 때문입니다.

​해결 방법

다음 지침에 따라 Secrets Manager Lambda 함수 및 프라이빗 Amazon RDS 인스턴스에 액세스하도록 Amazon VPC 인터페이스 엔드포인트를 구성합니다. 다음 예제에서는 Amazon VPC에서 vpc-0abb11f5a28a8abe7이라는 프라이빗 Aurora RDS 인스턴스가 사용됩니다.

중요: 시작하기 전에 AWS Command Line Interface(AWS CLI)를 설치구성해야 합니다.

Secrets Manager VPC 엔드포인트, Amazon RDS 인스턴스 및 Lambda 교체 함수에 대한 보안 그룹 생성

다음 지침에 따라 AWS CLI를 사용하여 보안 그룹을 생성하십시오. 수행할 단계는 다음의 명령과 비슷합니다.

1.    Secrets Manager Amazon VPC 엔드포인트의 보안 그룹:

참고: vpc-id vpc-0abb11f5a28a8abe7을 해당 VPC ID로 바꿉니다.

$ aws ec2 create-security-group --vpc-id vpc-0abb11f5a28a8abe7 --group-name SMVPCEndpointSG --description "secretsmanager VPCEndpoint SG"
{
    "GroupId": "sg-0bacf4bbed67e4df5"
}

2.    Lambda 교체 함수에 대한 보안 그룹:  

$ aws ec2 create-security-group --vpc-id vpc-0abb11f5a28a8abe7 --group-name LambdaFunctionSG --description "Lambda Rotation Function SG"
{
    "GroupId": "sg-0aed64f81acc4c037"
}

3.    (선택 사항) Amazon RDS 인스턴스에 대한 보안 그룹을 생성합니다.

참고: RDS 인스턴스가 기본 보안 그룹만 사용하는 경우 이 단계가 필요합니다.  

$ aws ec2 create-security-group --vpc-id vpc-0abb11f5a28a8abe7 --group-name RDSInstanceSG --description "RDS Instance SG"
{
    "GroupId": "sg-0d06795dffa052563"
}

Secrets Manager 서비스에 대한 Amazon VPC 인터페이스 엔드포인트를 생성하여 보안 그룹과 연결

다음과 유사한 인터페이스 엔드포인트를 생성하기 위한 지침을 따릅니다.

참고: your-region을 자신의 AWS 리전과 RDS 인스턴스에 사용한 서브넷 ID로 바꿉니다.

$ aws ec2 create-vpc-endpoint --vpc-id  vpc-0abb11f5a28a8abe7 --vpc-endpoint-type Interface \
--service-name com.amazonaws.your-region.secretsmanager  --subnet-ids subnet-076c28105d486f3bd subnet-0af00c796ccdc725f \
--security-group-ids sg-0bacf4bbed67e4df5

중요: Amazon VPC에 DNS 호스트 이름과 DNS 확인 속성이 활성화되어 있어야 합니다. 자세한 내용은 VPC에 대한 DNS 지원 보기 및 업데이트를 참조하십시오.

Amazon VPC 엔드포인트 및 Amazon RDS 인스턴스 보안 그룹에 규칙 추가

1.    포트 443에서 Lambda 함수의 보안 그룹으로부터의 인바운드 트래픽을 허용하도록 Amazon VPC 엔드포인트의 보안 그룹 규칙을 구성합니다.

$ aws ec2 authorize-security-group-ingress --group-id sg-0bacf4bbed67e4df5 --protocol tcp --port 443 --source-group sg-0aed64f81acc4c037

2.    Amazon RDS 인스턴스의 보안 그룹은 포트 3306에서 Lambda 함수의 보안 그룹으로부터의 인바운드 연결을 허용합니다.

참고: your-rds-security-group을 보안 그룹(기존 보안 그룹 또는 선택적 RDS 인스턴스 SG)으로 바꿉니다.

$ aws ec2 authorize-security-group-ingress --group-id your-rds-security-group --protocol tcp --port 3306 --source-group sg-0aed64f81acc4c037

AWS 리소스에 보안 그룹 연결

1.    선택 사항인 RDS 인스턴스 SG를 생성한 경우 다음과 같이 RDS 인스턴스 구성을 수정합니다.

참고: your-existing-rds-security-groups를 RDS 인스턴스에 연결된 그룹으로 바꿉니다.

$ aws rds modify-db-instance --db-instance-identifier your-rds-instance --vpc-security-group-ids sg-0d06795dffa052563 your-existing-rds-security-groups

2.    지침에 따라 다음과 유사한 Lambda 함수 구성을 업데이트합니다.

$ aws lambda update-function-configuration --function-name your-lambda-function \
--vpc-config SubnetIds=subnet-076c28105d486f3bd,subnet-0af00c796ccdc725f,SecurityGroupIds=sg-0aed64f81acc4c037

Secrets Manager가 보안 암호를 교체할 수 있는지 확인

1.    다음과 유사한 Secrets Manager 보안 암호 교체 지침을 따릅니다.

참고: your-secrets를 Secrets Manager 보안 암호로 바꿉니다.

$ aws secretsmanager rotate-secret --secret-id your-secret

Secrets Manager는 이전의 교체를 재시도합니다.

참고: 이전에 암호 교체 시도가 실패했기 때문에 다음과 비슷한 출력이 표시됩니다.

An error occurred (InvalidRequestException) when calling the RotateSecret operation: A previous rotation isn't complete. That rotation will be reattempted.

2.    AWS Lambda 콘솔에서 함수를 모니터링합니다. 교체가 성공하면 Amazon CloudWatch 로그 스트림에 다음과 유사한 항목이 포함됩니다.

[INFO] 2019-10-22T07:59:32.627Z 96179023-5b67-4e98-a057-885f68bc69f2 finishSecret: Successfully set AWSCURRENT stage to version 175b5e38-341f-4cd0-8c58-2b1e49769642 for secret arn:aws:secretsmanager:your-region:your-account:secret:your-secret

3.    Secrets Manager 보안 암호를 검색하여 다음과 유사하게 성공적으로 교체되었는지 확인합니다.

참고: your-secret-arn을 Secrets Manager 보안 암호 ARN으로 바꿉니다.

aws secretsmanager get-secret-value --secret-id your-secret-arn

참고: Secrets Manager 교체 함수는 백그라운드에서 비동기식으로 실행되며 완료하는 데 몇 분 정도 걸릴 수 있습니다.


이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?