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 では、Lambda ローテーション関数が直接シークレットをローテーションすることのみを許可しています。ローテーション関数では、2 つ目の Lambda 関数を呼び出してシークレットをローテーションすることはできません。

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

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

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

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

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

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

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

    Amazon RDS (Oracle と Db2 を除く) および 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)

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

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

    最後に、Lambda ローテーション関数はラベル AWSCURRENT を以前のシークレットバージョンからこのバージョンに移動します。これにより、同じ API コール内の AWSPENDING ラベルも削除されます。この時点より前に AWSPENDING を削除したり、別の API コールを使用して削除したりしないでください。これは、Secrets Manager にとっては、ローテーションが正常に完了しなかったことを意味する可能性があるからです。Secrets Manager は、以前のバージョンに対しステージングラベル AWSPREVIOUS を付加します。これにより、シークレットの最後の有効なバージョンが保持されます。

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

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

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

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