サポートされていないデータベースに使用する、Secrets Manager のシークレット用のローテーション関数を作成する方法を教えてください。

所要時間2分
0

AWS Secrets Manager のシークレット用の AWS Lambda 関数を作成したいです。使用しているデータベースまたはサービスでは、自動ローテーション関数をサポートしていません。

解決策

前提条件 AWS コマンドラインインターフェイス (AWS CLI) をインストールし、設定してください。

注: AWS CLI のコマンドの実行時にエラーが発生する場合は、「AWS CLI でのエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

Lambda ローテーション関数用のコードを作成する

手順については、「データベース以外の AWS Secrets Manager シークレットに自動ローテーションを設定する」を参照してください。

汎用ローテーション関数のテンプレートに基づいて AWS CloudFormation 変更セットを作成する

  1. AWS CLI コマンド create-cloud-formation-change-set を実行します。
  2. **--stack-name ** を実際の CloudFormation スタック名に置き換えます。
  3. --parameter-overrides を AWS リージョンにおける Secrets Manager の リージョナルエンドポイント および、テンプレートが作成するローテーション関数の名前に置き換えます。

AWS CLI コマンド create-cloud-formation-change-set の例

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 の ARN は、表示されたものをそのまま使用します。

CloudFormation 変更セットを使用してスタックを更新する

create-cloud-formation-change-set コマンドは、ApplicationIdChangeSetIdSemanticVersionStackId 値を返します。

次の手順を実行します。

  1. execute-change-set コマンドの実行時には、change-set-nameChangeSetId 値に置き換えます。
  2. 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

CloudFormation スタックにより、Lambda 関数と AWS Identity and Access Management (IAM) ロールが作成されます。IAM ロールには Lambda 関数に必要なアクセス許可が含まれます。

Lambda 関数の作成を検証する

AWS CLI コマンド list-functions を実行します。

aws lambda list-functions

Output
{
    ...
    "FunctionName": "MySecretsManagerRotationFunction",
    ...
    "FunctionArn": "arn:aws:lambda:region:123456789012:function:MySecretsManagerRotationFunction",
    ...
}

注: FunctionName の値は、--parameter-overrides オプションで指定した関数名と一致します。

Lambda 関数の Amazon 仮想プライベートクラウドへのアクセスを設定する

データベースまたはサービスが Amazon Virtual Private Cloud (Amazon VPC) 内ある場合は、update-function-configuration コマンドを実行し、Lambda ローテーション関数を Amazon VPC 内で実行するように設定します。VPC のサブネット ID とセキュリティグループ ID を必ず指定してください。詳細については、「Lambda 関数に Amazon VPC 内のリソースへのアクセスを許可する」を参照してください。

注: データベースまたはサービスを Amazon VPC 内に配置していない場合は、このステップをスキップしてください。

AWS CLI コマンド update-function-configuration の例:

$ aws lambda update-function-configuration --function-name your-lambda-function \
--vpc-config SubnetIds=subnet-076c28105d486f3bd,subnet-0af00c796ccdc725f,SecurityGroupIds=sg-0aed64f81acc4c037

Secrets Manager 用の Amazon VPC エンドポイントを作成する

データベースまたはサービスを含む Amazon VPC や Lambda ローテーション関数がインターネットにアクセスできない場合は、Amazon VPC エンドポイントを作成します。Amazon VPC でプライベートサービスエンドポイントを設定し、Secrets Manager にアクセスして VPC 内のエンドポイントでローテーション関数を有効にします。AWS CLI コマンド 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 内に配置していない場合は、このステップをスキップしてください。

ユースケースに合わせてローテーション関数をカスタマイズする

ローテーションテンプレートには、createSecretfinishSecret ステップが実装されています。ユースケースとデータベースに応じて setSecret および testSecret ステップを実装するには、Lambda 関数を変更する必要があります。詳細については、「ローテーション関数における 4 ステップ」を参照してください。

シークレットでローテーションを有効にする

--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 のローテーション関数テンプレート

仮想プライベートクラウド内の AWS Secrets Manager サービスに接続する方法

AWS Secrets Manager のシークレットを使用する AWS サービス

コメントはありません

関連するコンテンツ