プライベート VPC 内で Secrets Manager シークレットをローテーションするにはどうすればよいですか?

所要時間3分
0

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 インスタンスを使用します。

重要:

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 シークレットをするローテーションするにはどうすればよいですか?

AWS公式
AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ