AWS Secrets Managerシークレットのローテーション - AWS Secrets Manager

AWS Secrets Managerシークレットのローテーション

ローテーションとは、シークレットを定期的に更新するためのプロセスのことです。シークレットのローテーションを行うと、シークレット、ならびに、データベースまたはサービスの認証情報が更新されます。Secrets Manager では、シークレットの自動ローテーションを設定できます。

ローテーションの仕組み

ヒント

他のサービスによって管理されるシークレット の場合、マネージドローテーションを使用します。マネージドローテーション を使用するには、最初に管理サービスを通じてシークレットを作成します。

Secrets Manager のローテーションでは、シークレットとデータベースの更新に AWS Lambda 関数が使用されます。Lambda 関数を使用する場合のコストについては、「料金」を参照してください。

シークレットをローテーションするために、Secrets Manager は、設定したスケジュールに従って Lambda 関数を呼び出します。例えば 30 日ごとなど、一定期間が経過した後にローテーションするようにスケジュールを設定したり、cron 式を作成したりできます。「スケジュール式」を参照してください。自動ローテーションの設定中にシークレット値も手動で更新した場合、Secrets Manager は次のローテーション日を計算するときにそれを有効なローテーションと見なします。

ローテーション中、Secrets Manager はステージングラベルを使用して、シークレットのバージョンにラベル付けを行います。ローテーション中、Secrets Manager は毎回異なるパラメータを使用して、同じ関数を複数回呼び出します。Secrets Manager は、次の JSON リクエスト構造のパラメータを使用して 関数を呼び出します。

{ "Step" : "request.type", "SecretId" : "string", "ClientRequestToken" : "string" }

ローテーション関数は、シークレットのローテーション処理を実行します。シークレットのローテーションには 4 つのステップがあり、それぞれが Lambda ローテーション関数の 4 つのステップに対応しています。

  1. シークレットの新しいバージョンを作成する (createSecret)

    ローテーションの最初のステップでは、シークレットの新しいバージョンが作成されます。新しいバージョンには新しいパスワード、ユーザー名、パスワード、またはそれ以上の秘密情報を含めることができます。Secrets Manager は、この新しいバージョンに対し、ステージングラベル AWSPENDING をラベル付けします。

  2. データベースまたはサービスの認証情報を変更する (setSecret)

    次に、AWSPENDING バージョンのシークレットと一致するよう、データベースまたはサービス内の認証情報が、ローテーションにより変更されます。このステップでは、ローテーション戦略に応じて、既存のユーザーと同じアクセス許可を付与しながら、新しいユーザーを作成できます。

    Amazon RDS (Oracle を除く) および Amazon DocumentDB のローテーション関数では、使用可能な場合、データベースへの接続に Secure Sockets Layer (SSL) または Transport Layer Security (TLS) が使用されます。使用できない場合は、暗号化されていない接続が使用されます。

    注記

    2021 年 12 月 20 日より前に自動シークレットローテーションを設定した場合は、ローテーション関数が SSL/TLS をサポートしていない古いテンプレートに基づいている可能性があります。「Determine when your rotation function was created」(ローテーション関数がいつ作成されたかを特定する) を参照してください。2021 年 12 月 20 日より前に作成されていた場合は、SSL/TLS を使用する接続をサポートするには、ローテーション関数を再作成する必要があります。

  3. 新しいシークレットバージョンをテストする (testSecret)

    次に、ローテーションは、データベースまたはサービスにアクセスすることで、シークレットの AWSPENDING バージョンをテストします。ローテーション関数のテンプレート に基づくローテーション関数では、読み取りアクセスを使用して、新しいシークレットをテストします。アプリケーションが必要とするアクセスのタイプに応じて関数を変更し、書き込みアクセスなどの他のアクセスを含めます。

  4. ローテーションを終える (finishSecret)

    最後にローテーションは、以前のシークレットバージョンからこのバージョンに対し、ラベル AWSCURRENT の移行を行います。Secrets Manager は、以前のバージョンに対しステージングラベル AWSPREVIOUS を付加します。これにより、シークレットの最後の有効なバージョンが保持されます。

ローテーション中、Secrets Manager はローテーションの状態を示すイベントをログに記録します。(詳しくは、「AWS Secrets Manager を使用して AWS CloudTrail イベントをログ記録する」を参照してください。)

ローテーションステップが失敗すると、Secrets Manager はローテーションプロセス全体を複数回再試行します。

ローテーションが成功すると、AWSPENDING ステージングラベルは AWSCURRENT バージョンと同じバージョンにアタッチされるか、どのバージョンにもアタッチされない可能性があります。AWSPENDING ステージングラベルは存在するが、AWSCURRENT と同じバージョンにアタッチされていない場合、それ以降に呼び出されたローテーションでは、以前のローテーションリクエストがまだ進行中であるとみなされ、エラーが返されます。ローテーションに失敗すると、AWSPENDING ステージングラベルはバージョンが空のシークレットにアタッチされる可能性があります。詳細については、「ローテーションのトラブルシューティング」を参照してください。

ローテーションの正常な終了後、Secrets Manager から AWS Secrets Manager からのシークレットの取得 しているアプリケーションは、更新された認証情報を自動的に取得します。ローテーションの各ステップの動作の詳細については、「AWS Secrets Manager ローテーション関数のテンプレート」を参照してください。