を使用して自動ローテーションを設定する AWS CLI - AWS Secrets Manager

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

を使用して自動ローテーションを設定する AWS CLI

このチュートリアルでは、 Lambda 関数によるローテーションを使用して を設定する方法について説明します。 AWS CLI。 シークレットをローテーションするときは、シークレットと、シークレットの対象となるデータベースまたはサービスの両方の認証情報を更新します。

コンソールを使用してローテーションを設定することもできます。データベースシークレットについては、「データベースシークレットの自動ローテーション (コンソール)」を参照してください。他のすべてのタイプのシークレットについては、「データベース以外のシークレットの自動ローテーション (コンソール)」を参照してください。

を使用してローテーションを設定するには AWS CLI、データベースシークレットをローテーションする場合は、まずローテーション戦略を選択する必要があります。交代ユーザー戦略を選択する場合は、データベースのスーパーユーザーの認証情報を含むシークレットを別途保存する必要があります。次に、ローテーション関数コードを記述します。Secrets Manager には、関数のベースとなるテンプレートが用意されています。コードを使用して Lambda 関数を作成し、Lambda 関数と Lambda 実行ロールの両方にアクセス許可を設定します。次のステップでは、Lambda 関数がネットワーク経由で Secrets Manager とデータベースまたはサービスの両方にアクセスできることを確認します。最後に、ローテーションのシークレットを設定します。

データベースシークレットの前提条件: ローテーション戦略を選択する

Secrets Manager が提供する戦略については、「」を参照してくださいLambda 関数のローテーション戦略

オプション 1: 単一ユーザー戦略

単一ユーザー戦略 を選択した場合は、ステップ 1 に進むことができます。

オプション 2: 代替ユーザー戦略

交代ユーザー戦略 を選択した場合は、次のことを行う必要があります。

  • シークレットを作成し、データベースのスーパーユーザー認証情報をそのシークレットに保存します。交代ユーザーのローテーションでは最初のユーザーのクローンが作成され、ほとんどのユーザーにはそのアクセス許可がないため、スーパーユーザー認証情報を含むシークレットが必要です。

  • スーパーユーザーシークレットARNの を元のシークレットに追加します。詳細については、「JSON の構造 AWS Secrets Manager シークレット 」を参照してください。

Amazon RDS Proxy は交代ユーザー戦略をサポートしていないことに注意してください。

ステップ 1: ローテーション関数コードを記述する

シークレットをローテーションするには、ローテーション関数が必要です。ローテーション関数は、Secrets Manager がシークレットをローテーションさせるために呼び出す Lambda 関数です。詳細については、「Lambda 関数によるローテーション」を参照してください。このステップでは、シークレットを更新するコードと、シークレットの対象となるサービスまたはデータベースを記述します。

Secrets Manager は、 の Amazon RDS、Amazon Aurora、Amazon Redshift、および Amazon DocumentDB データベースシークレット用のテンプレートを提供しますローテーション関数のテンプレート

ローテーション関数コードを記述するには
  1. 次のいずれかを行います。

    • ローテーション関数テンプレート のリストを確認します。サービスとローテーション戦略に一致するものがある場合は、コードをコピーします。

    • 他のタイプのシークレットについては、独自のローテーション関数を記述します。手順については、Lambda ローテーション関数 を参照してください。

  2. ファイルをZIPファイルに保存 my-function.zip および必要な依存関係。

ステップ 2 : Lambda 関数を作成する

このステップでは、ステップ 1 で作成した ZIP ファイルを使用して Lambda 関数を作成します。また、Lambda 実行ロール を設定します。これは、関数が呼び出されたときに Lambda が引き受けるロールです。

Lambda ローテーション関数と実行ロールを作成するには
  1. Lambda 実行ロールの信頼ポリシーを作成し、JSONファイルとして保存します。例と詳細については、「」を参照してくださいの Lambda ローテーション関数の実行ロールのアクセス許可 AWS Secrets Manager。ポリシーは次の条件を満たす必要があります。

    • ロールがシークレットの Secrets Manager オペレーションを呼び出すことを許可します。

    • 新しいパスワードの作成など、シークレットが対象とする サービスを呼び出すことをロールに許可します。

  2. Lambda 実行ロールを作成し、 を呼び出して前のステップで作成した信頼ポリシーを適用しますiam create-role

    aws iam create-role \ --role-name rotation-lambda-role \ --assume-role-policy-document file://trust-policy.json
  3. を呼び出して、 ZIP ファイルから Lambda 関数を作成しますlambda create-function

    aws lambda create-function \ --function-name my-rotation-function \ --runtime python3.7 \ --zip-file fileb://my-function.zip \ --handler .handler \ --role arn:aws:iam::123456789012:role/service-role/rotation-lambda-role
  4. Lambda 関数にリソースポリシーを設定し、lambda add-permission を呼び出すことで Secrets Manager がそれを呼び出せるようにします。

    aws lambda add-permission \ --function-name my-rotation-function \ --action lambda:InvokeFunction \ --statement-id SecretsManager \ --principal secretsmanager.amazonaws.com \ --source-account 123456789012

ステップ 3: ネットワークアクセスを設定する

詳細については、「Lambda ローテーション関数のネットワークアクセス」を参照してください。

ステップ 4: シークレットのローテーションを設定する

シークレットの自動ローテーションをオンにするには、rotate-secret を呼び出します。ローテーションスケジュールは cron() または rate() のスケジュール式で設定でき、ローテーション期間を設定できます。詳細については、「ローテーションスケジュール」を参照してください。

aws secretsmanager rotate-secret \ --secret-id MySecret \ --rotation-lambda-arn arn:aws:lambda:Region:123456789012:function:my-rotation-function \ --rotation-rules "{\"ScheduleExpression\": \"cron(0 16 1,15 * ? *)\", \"Duration\": \"2h\"}"

次のステップ

AWS Secrets Manager ローテーションのトラブルシューティング」を参照してください。