サポートされていないデータベースのために AWS Secrets Manager シークレットのローテーション関数を作成するにはどうすればよいですか?
他のデータベースまたはサードパーティーサービスの AWS Secrets Manager シークレットをローテーションする AWS Lambda 関数を作成するにはどうすればよいですか?
簡単な説明
Amazon Relational Database Service (Amazon RDS) でサポートされるデータベースと他の AWS サポートサービスで作成された Secrets Manager のシークレットは、Lambda ローテーションを自動的に作成します。サポートされていない AWS データベースとサービスの場合は、Lambda 関数を手動で作成できます。
解決方法
汎用ローテーション関数テンプレートを使用してシークレットをローテーションします。別のデータベースまたはサービスのシークレットのローテーションをオンにする前に、Lambda ローテーション関数用のコードを作成する必要があります。
重要:
- ここでの作業を始める前に、AWS Command Line Interface (AWS CLI)の、インストールと設定を完了する必要があります。
- AWS CLI コマンドの実行時にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください。
汎用ローテーション関数テンプレートに基づいて 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
注: arn:aws:serverlessrepo:us-east-1:297356227824:applications/SecretsManagerRotationTemplate の Amazon リソースネーム (ARN) を表示のとおり正確に使用してください。
テンプレート用に AWS CloudFormation 変更セットが作成されます。AWS CloudFormation スタックの名前は Aws-serverless-repository- で始まり、スタックステータスコードは REVIEW_IN_PROGRESS に設定されます。
変更セットを使用してスタックを更新する
create-cloud-formation-change-set コマンドは、ApplicationId、ChangeSetId、SemanticVersion、および StackId を返します。スタックのステータスを更新するには、ChangeSetId を change-set-name に提供する必要があります。change-set-name は出力を生成せず、スタックのステータスコードを CREATE_COMPLETE に変更します。AWS CloudFormation スタックは、Lambda 関数と、必要な許可を持つ Lambda 関数にアタッチされた IAM ロールを作成します。
次のような AWS CLI コマンド execute-change-set を実行します。
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 コマンドは、VPC 内で実行する Lambda ローテーション関数を設定します。VPC サブネット ID とセキュリティグループ ID を必ず指定してください。詳細については、「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 にプライベートサービスエンドポイントを設定し、VPC 内のエンドポイントでローテーション関数をオンにします。次のような 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 ステップでは、ユースケースとデータベースに合わせて手動で実装する必要があります。詳細については、「ローテーションの仕組み」を参照してください。
シークレットのローテーションをオンにする
--rotation-rules および AutomaticallyAfterDays の各パラメータを使って、ローテーションの間隔の日数を指定します。
aws secretsmanager rotate-secret --secret-id production/MyAwesomeAppSecret --rotation-lambda-arn arn:aws:lambda:region:123456789012:function:MySecretsManagerRotationFunction --rotation-rules AutomaticallyAfterDays=7
詳細については、「AWS Secrets Manager シークレットのローテーション」を参照してください。
関連情報
AWS Secrets Manager ローテーション関数のテンプレート
How to connect to AWS Secrets Manager service within a Virtual Private Cloud (仮想プライベートクラウド内で AWS Secrets Manager サービスに接続する方法)
関連するコンテンツ
- 質問済み 4年前lg...
- 承認された回答質問済み 7ヶ月前lg...
- AWS公式更新しました 3年前