지원되지 않는 데이터베이스에 대한 AWS Secrets Manager 보안 암호의 교체 함수를 생성하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 10월 19일

다른 데이터베이스 또는 타사 서비스에 대한 AWS Secrets Manager 보안 암호를 교체하는 AWS Lambda 함수를 생성하려면 어떻게 해야 합니까?

간략한 설명

Amazon RDS(Amazon Relational Database Service) 지원 데이터베이스 및 기타 AWS 지원 서비스로 생성된 Secrets Manager 보안 암호는 Lambda 교체를 자동으로 생성합니다. 지원되지 않는 AWS 데이터베이스 및 서비스의 경우 Lambda 함수를 수동으로 생성할 수 있습니다.

해결 방법

일반 교체 함수 템플릿을 사용하여 보안 암호를 교체합니다. 다른 데이터베이스 또는 서비스에 대한 보안 암호 교체를 활성화하기 전에 Lambda 교체 함수에 대한 코드를 생성해야 합니다.

중요:

일반 교체 함수 템플릿을 기반으로 AWS CloudFormation 변경 세트 만들기

다음 값에 대한 AWS CLI 명령 create-cloud-formation-change-set를 실행합니다.

--stack-name: 사용자가 변경 세트를 생성한 AWS CloudFormation 스택의 이름.

--parameter-override: 해당 리전에 대한 AWS Secrets Manager 리전 엔드포인트 및 템플릿이 생성한 Lambda 교체 함수의 이름.

aws serverlessrepo create-cloud-formation-change-set --application-id arn:aws:serverlessrepo:us-east-1:297356227824:applications/SecretsManagerRotationTemplate --stack-name MyLambdaCreationStack --parameter-overrides Name=endpoint,Value=https://secretsmanager.REGION.amazonaws.com Name=functionName,Value=MySecretsManagerRotationFunction --capabilities CAPABILITY_IAM CAPABILITY_RESOURCE_POLICY

참고: Amazon 리소스 이름(ARN) arn:aws:serverlessrepo:us-east-1:297356227824:applications/SecretsManagerRotationTemplate을 정확하게 표시된 대로 사용해야 합니다.

템플릿에 대한 AWS CloudFormation 변경 세트가 생성됩니다. AWS CloudFormation 스택 이름은 aws-serverless-repository-로 시작하며 스택 상태 코드REVIEW_IN_PROGRESS로 설정됩니다.

변경 세트를 사용하여 스택 업데이트

create-cloud-formation-change-set 명령은 ApplicationId, ChangeSetId, SemanticVersionStackId를 반환합니다. 스택 상태를 업데이트하려면 ChangeSetIdchange-set-name에 제공해야 합니다. change-set-name은 출력을 생성하지 않으며 스택 상태 코드를 CREATE_COMPLETE로 변경합니다. AWS CloudFormation 스택은 Lambda 함수와 필요한 권한을 사용하여 Lambda 함수에 연결된 IAM 역할을 생성합니다.

다음 AWS CLI 명령을 실행합니다.

aws cloudformation execute-change-set --change-set-name arn:aws:cloudformation:region:123456789012:changeSet/EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE/EXAMPLE2-90ab-cdef-fedc-ba987EXAMPLE

Lambda 함수가 생성되었는지 확인

다음 AWS CLI 명령을 실행합니다.

aws lambda list-functions

Output
{
    ...
    "FunctionName": "MySecretsManagerRotationFunction",
    ...
    "FunctionArn": "arn:aws:lambda:region:123456789012:function:MySecretsManagerRotationFunction",
    ... 
}

참고: Lambda 함수의 이름은 --parameter-overrides에 지정한 함수 이름의 값입니다.

Amazon Virtual Private Cloud(Amazon VPC)를 액세스하도록 Lambda 함수 구성

데이터베이스 또는 서비스가 Amazon VPC에 상주하는 경우 다음과 비슷한 update-function-configuration 명령을 실행합니다. update-function-configuration 명령은 Lambda 교체 함수가 VPC에서 실행되도록 구성합니다. VPC 서브넷 ID 및 보안 그룹 ID를 제공했는지 확인합니다. 자세한 내용은 Amazon VPC에서 리소스에 액세스하도록 Lambda 함수 구성을 참조하십시오.

참고: 데이터베이스 또는 서비스가 Amazon VPC에 상주하지 않는 경우 이 단계를 건너뛰십시오.

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

Secrets Manager 서비스에 대한 VPC 엔드포인트 생성

데이터베이스 또는 서비스와 Lambda 교체 함수가 있는 VPC에 인터넷 액세스가 없는 경우에는 VPC를 Secrets Manager용 프라이빗 서비스 엔드포인트와 함께 구성합니다. 이렇게 하면 교체 함수가 VPC 내의 엔드포인트에서 Secrets Manager에 액세스할 수 있습니다. 다음과 비슷한 create-vpc-endpoint 명령을 실행하십시오.

참고: 데이터베이스 또는 서비스가 Amazon VPC에 상주하지 않는 경우 이 단계를 건너뛰십시오.

$ 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

Lambda 함수와 데이터베이스 또는 서비스 간의 네트워크 연결 설정

Lambda 함수가 필요한 네트워크 포트를 통해 데이터베이스 또는 서비스로 라우팅할 수 있는지 확인하십시오. 이는 데이터베이스 또는 서비스 및 관련 VPC 구성에 따라 다릅니다.

참고: 데이터베이스 또는 서비스가 Amazon VPC에 상주하지 않는 경우 이 단계를 건너뛰십시오.

사용 사례에 맞게 교체 함수 사용자 정의

교체 템플릿은 createSecret 및 finishSecret 단계를 구현합니다. setSecret 및 testSecret 단계에서는 사용 사례 및 데이터베이스에 대한 수동 구현이 필요합니다. 자세한 내용은 Lambda 교체 함수의 단계를 참조하십시오.

보안 암호 교체 활성화

파라미터 --rotation-rulesAutomaticallyAfterDays를 사용하여 교체 주기의 일 수를 지정합니다.

aws secretsmanager rotate-secret --secret-id production/MyAwesomeAppSecret --rotation-lambda-arn arn:aws:lambda:region:123456789012:function:MySecretsManagerRotationFunction --rotation-rules AutomaticallyAfterDays=7