プライベート VPC 内で Secrets Manager シークレットをローテーションするにはどうすればよいですか?
Amazon Virtual Private Cloud (Amazon VPC) 内の AWS サービスの AWS Secrets Manager シークレットをローテーションしようとしました。しかし、操作が失敗し、Amazon CloudWatch Logs には AWS Lambda タスクがタイムアウトしたことが表示されています。
簡単な説明
AWS Secrets Manager は、Amazon VPC プライベートサブネットで実行されている AWS サービスのシークレットをローテーションできません。これは、これらのサブネットがインターネットアクセスを持っていないためです。
解決策
以下の手順に従って、Amazon VPC インターフェースエンドポイントを構成し、Secrets Manager Lambda 関数とプライベートな Amazon Relational Database Service (Amazon RDS) インスタンスにアクセスします。以下の例では、vpc-0abb11f5a28a8abe7 という名前の Amazon VPC 内のプライベート Aurora RDS インスタンスを使用します。
重要:
- 始める前に、AWS CLI をインストールし、設定していることを確認してください。
- AWS CLI コマンドを実行する際にエラーが発生した場合は、AWS CLI の最新バージョンを使用しているかどうかを確認してください。
Secrets Manager VPC エンドポイント、RDS インスタンス、および Lambda ローテーション関数用の SG を作成する
AWS CLI を使用して、セキュリティグループ (SG) を作成するための手順に従ってください。
1. Secrets Manager Amazon VPCエンドポイント用の SG。
注:****vpc-id vpc-0abb11f5a28a8abe7を使用して、VPC の ID を置き換えてください。
$ aws ec2 create-security-group --vpc-id vpc-0abb11f5a28a8abe7 --group-name SMVPCEndpointSG --description "secretsmanager VPCEndpoint SG" { "GroupId": "sg-vpc-endpoint" }
2. Lambda ローテーション関数のためのセキュリティグループ。
$ aws ec2 create-security-group --vpc-id vpc-0abb11f5a28a8abe7 --group-name LambdaFunctionSG --description "Lambda Rotation Function SG" { "GroupId": "sg-lambda-function" }
3. (オプション) RDS インスタンスのために SG を作成する。
注: RDS インスタンスがデフォルトのセキュリティグループのみを使用する場合、この手順が必要です。
$ aws ec2 create-security-group --vpc-id vpc-0abb11f5a28a8abe7 --group-name RDSInstanceSG --description "RDS Instance SG" { "GroupId": "sg-rds-instance" }
Amazon VPC エンドポイントと RDS インスタンスの SG にルールを追加する
1. VPC の CIDR 範囲を取得する。
$ aws ec2 describe-vpcs --vpc-ids vpc-0a05c93c7ef7a8a1c --query 'Vpcs[].CidrBlock' --output text 10.0.0.0/16
2. Amazon VPC エンドポイントのセキュリティグループルールを構成して、VPC からのポート 443 へのインバウンドトラフィックを許可する。
$ aws ec2 authorize-security-group-ingress --group-id sg-vpc-endpoint --protocol tcp --port 443 --cidr 10.0.0.0/16
3. Lambda 関数のセキュリティグループからのインバウンド接続を許可するために、RDS インスタンスの SG を構成する。
注:
- your-rds-security-groupを、SG (既存の SG またはオプションの RDS インスタンス SG のいずれか) で置き換えてください。
- your-db-port を、データベースが構成されているポートに置き換えてください。
$ aws ec2 authorize-security-group-ingress --group-id your-rds-security-group --protocol tcp --port your-db-port --source-group sg-lambda-function
AWS リソースに SG をアタッチする
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-rds-instance 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-lambda-function
Secrets Manager サービス用の Amazon VPC インターフェイスエンドポイントを作成し、SG と関連付ける
「インターフェイスエンドポイントの作成」の手順に従ってください。
注: 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-vpc-endpoint
重要: Amazon VPC には、DNS ホスト名と DNS 解決属性が有効になっている必要があります。詳細については、「VPC の DNS サポートの表示と更新」を参照してください。
Secrets Manager がシークレットをローテーションできるか確認する
1. 「Secrets Manager のシークレットをローテーションする」手順に従ってください。
**注:**your-secret を、ご自身の 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 のローテーション関数は非同期でバックグラウンドで実行されます。ローテーション関数の完了には数分かかる場合があります。
関連情報
SSL 接続を必要とする DB 接続の AWS Secrets Manager シークレットをするローテーションするにはどうすればよいですか?
関連するコンテンツ
- 質問済み 7日前lg...
- 質問済み 6年前lg...
- 質問済み 2年前lg...
- 質問済み 1年前lg...
- 質問済み 1年前lg...
- AWS公式更新しました 1年前