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

Amazon Relational Database Service(Amazon RDS)가 지원하는 데이터베이스로 작성한 보안 암호는 자동으로 Lambda 교체 기능을 생성하지만 지원되지 않은 데이터베이스의 경우 이러한 기능이 생성되지 않습니다. 

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

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

1.    AWS 명령줄 인터페이스(AWS CLI)를 사용하여 일반 교체 함수 템플릿에 대한 Amazon 리소스 이름(ARN)을 입력합니다.

참고: AWS CLI를 아직 설치하지 않은 경우에는 AWS CLI 설치를 참조하십시오.

arn:aws:serverlessrepo:us-east-1:297356227824:applications/SecretsManagerRotationTemplate

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

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

--parameter-override 해당 리전에 대한 AWS Secrets Manager 엔드포인트 URL 및 템플릿이 생성한 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"}]'

Output
{
  "StackId": "arn:aws:cloudformation:region:123456789012:stack/aws-serverless-repository-MyLambdaCreationStack/520940b0-cc9d-11e8-9642-500c20fafe62",
  "ApplicationId": "arn:aws:serverlessrepo:us-east-1:297356227824:applications/SecretsManagerRotationTemplate",
  "ChangeSetId": "arn:aws:cloudformation:region:123456789012:changeSet/a391f1108-8be2-48be-b85d-055b85323a73/9eff19cb-d412-4a66-a96f-ea7de2cb3c49"
}

템플릿에 대한 AWS CloudFormation 변경 세트가 생성됩니다. AWS CloudFormation 스택 이름은 aws-serverless-repository-로 시작하며 [stack status code]는 [REVIEW_IN_PROGRESS]로 설정됩니다.

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

[change-set-name] 파라미터는 ChangeSetId에서 기원합니다. [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]에 지정한 함수 이름의 값입니다.

Secrets Manager에 사용자를 대신해 함수를 호출할 수 있는 권한 부여

1.    add-permission 명령을 사용하여 Lambda 함수와 연관된 리소스 정책에 권한을 추가합니다.

aws lambda add-permission --function-name MySecretsManagerRotationFunction --principal secretsmanager.amazonaws.com --action lambda:InvokeFunction --statement-id SecretsManagerAccess

Output
{
"Statement": "{\"Sid\":\"SecretsManagerAccess\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"secretsmanager.amazonaws.com\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":\"arn:aws:lambda:region:123456789012:function:MySecretsManagerRotationFunction\"}"
}

2.    get-policy 명령을 사용하여 권한이 리소스 정책에 추가되었는지 확인합니다.

aws lambda get-policy --function-name MySecretsManagerRotationFunction
{
    "Policy": "{\"Version\":\"2012-10-17\",\"Id\":\"default\",\"Statement\":[{\"Sid\":\"SecretsManagerAccess\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"secretsmanager.amazonaws.com\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":\"arn:aws:lambda:region:123456789012:function:MySecretsManagerRotationFunction\"}]}",
    "RevisionId": "f6a3125c-f2d2-4f8e-bd51-64e98bce77f4"
}

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

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

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

aws lambda update-function-configuration --function-name MySecretsManagerRotationFunction --vpc-config SubnetIds=COMMA SEPARATED LIST OF VPC SUBNET IDS,SecurityGroupIds=COMMA SEPARATED LIST OF SECURITY GROUP IDs

Secrets Manager 서비스를 위한 VPC 엔드포인트 만들기

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

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

aws ec2 create-vpc-endpoint --vpc-id VPC ID --vpc-endpoint-type Interface --service-name com.amazonaws.REGION.secretsmanager --subnet-ids COMMA SEPARATED LIST OF VPC SUBNET IDS --security-group-ids COMMA SEPARATED LIST OF SECURITY GROUP IDs --private-dns-enabled

교체 시나리오 사용자 지정

교체 시나리오를 사용자 지정합니다. 자세한 내용은 Lambda 교체 함수 이해 및 사용자 지정을 참조하십시오.

보안 암호 교체 활성화

1.    보안 암호의 교체를 활성화합니다. 자세한 내용은 다른 데이터베이스 또는 서비스의 보안 암호에 대한 교체 활성화를 참조하십시오.

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

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

페이지 내용이 도움이 되었습니까? | 아니요

AWS 지원 지식 센터로 돌아가기

도움이 필요하십니까? AWS 지원 센터를 방문하십시오

게시 날짜: 2019년 2월 7일