サポートされていないデータベースのために AWS Secrets Manager シークレットのローテーション関数を作成するにはどうすればよいですか?

所要時間2分
0

他のデータベースまたはサードパーティーサービスの AWS Secrets Manager シークレットをローテーションする AWS Lambda 関数を作成するにはどうすればよいですか?

簡単な説明

Amazon Relational Database Service (Amazon RDS) でサポートされるデータベースと他の 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

注: 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 コマンドは、ApplicationIdChangeSetIdSemanticVersion、および StackId を返します。スタックのステータスを更新するには、ChangeSetIdchange-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 サービスに接続する方法)

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

関連するコンテンツ