Lambda ローテーション関数の概要 - AWS Secrets Manager

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

Lambda ローテーション関数の概要

Secrets Manager は、Lambda 関数を使用してシークレットを回転させます。ローテーション関数とシークレットは、同じ AWS リージョン 。

AWS Secrets Manager は AWS Lambda 関数を使用してシークレットの実際のローテーションを実行します。いずれかのシークレットを使用する場合サポートされている Amazon RDS データベースの場合、Secrets Manager は Lambda 関数を提供します。また、Secrets Manager は、指定したデータベースの要件を満たすため、自動的に関数をカスタマイズします。別のサービス用のシークレットを使用する場合は、Lambda 関数のコードを自分で提供しなければなりません。

設定されたローテーションスケジュールまたは手動プロセスがローテーションをトリガーすると、Secrets Manager は毎回異なるパラメータを使用して Lambda 関数を数回呼び出します。Lambda 関数は、シークレットをローテーションさせるプロセス全体でいくつかのタスクを実行します。各リクエストに対して実行されるタスクは、リクエストの Step パラメータで指定されます。

Secrets Manager は、次の JSON リクエスト構造のパラメータを使用して Lambda 関数を呼び出します。

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

次に、リクエストのパラメータについて説明します。

  • ステップ— ローテーション関数の動作のどの部分を呼び出すかを指定します。それぞれの異なる値が、ローテーションプロセスのステップを識別します。各ステップの詳細は、以下のセクション「回転のステップ」で説明します。個々で起動されるステップに区別することで、AWS Secrets Manager チームは、ステップ間で発生する可能性のある追加機能を追加することができます。

  • secretId— 更新するシークレットの ID または Amazon リソースネーム (ARN)。Secrets Manager は、シークレットを最初に作成した際に、各シークレットに ARN を割り当てます。自動で、ローテーションするバージョンはデフォルトラベルの付いたバージョンAWSCURRENT

  • clientRequestToken— Secrets Manager が Lambda 関数に提供する文字列。Lambda 関数内から呼び出すSecrets Manager API には、文字列を渡す必要があります。Secrets Manager は、このトークンを使用して、個々の呼び出しの失敗に起因する、要求された再試行中の要求の冪等性を保証します。この値は UUID-type 値で、指定されたシークレット内の一意性を保証します。この値は、新しいバージョンのシークレットの SecretVersionId になります。

同じ secretId および clientTokenRequest が各ステップを呼び出します。各呼び出しで Step パラメータのみが変更されます。これにより、ステップ間のステータスを保存しなくなります。これらのパラメータは、必要な情報をすべて提供します。または、AWSPENDINGまたはAWSCURRENTラベル

さまざまなローテーション戦略のために各ステップで実行すべき特定のタスクの説明については、次のトピックを参照してください。

回転のステップ

Lambda ローテーション関数に組み込まれている機能は、個別のステップに分かれています。Step パラメータは、パラメータ値の 1 つを使用して関数を呼び出すことによって、各ステップを呼び出します。

この Secrets Manager では、シークレットマネージャーが順番に自動で、ステップを呼び出します。1 つのステップが終了すると、Secrets Manager は直ちに Lambda 関数を呼び出して次のステップを呼び出します。

サポートされている Amazon RDS データベースの 1 つにシークレットを指定すると、Secret Secrets Manager は標準 Lambda 関数を使用してシークレットをローテーションします。Secret マネージャーは Lambda 関数を提供しますが、Lambda 関数を変更すると、組織固有のローテーション要件を満たすことができます。

cCreateSecret ステップ

このステップでは、Lambda 関数がシークレットの新しいバージョンを生成します。 シナリオに応じて、これは新しいパスワードを生成するだけで簡単です。また、保護されたリソースに適したユーザー名とパスワードなど、完全に新しい認証情報の値を生成することもできます。Secrets Manager は、シークレットの新しいバージョンとして、これらの値を保存します。Secret マネージャは、シークレット内の他の値 (接続の詳細など) を既存のバージョンのシークレットから作成します。Secrets Manager は、ステージングラベルAWSPENDINGとしてマークするには、インプロセスバージョンのシークレットです。

setSecret ステップ

このステップでは、ローテーション関数はAWSPENDINGSecrets Manager から、前のステップで作成したばかりです。次に、ローテーション関数は、データベースまたはサービスのアイデンティティサービスを呼び出し、既存のパスワードを変更するか、シークレットの新しい認証情報と一致する新しい認証情報を作成します。新しいユーザーが作成された場合、この関数は以前のユーザーからアクセス許可をクローンする必要があります。これにより、必要に応じて新しいユーザーがカスタムアプリケーション内で引き続き、実行することができます。

パスワードを変更したり、データベースまたはサービス認証システムで新しい認証情報を作成したりするには、Lambda 関数でこれらのタスクを実行できるようにする必要があります。管理タスクを考慮すると、タスクには通常、ユーザーに与えないアクセス許可が必要です。ローテーション戦略に従い、アクセス許可がある 2 つ目の認証情報一式を使用し、パスワードを変更したり、メインシークレット用の新規ユーザーを作成することをお勧めします。このような認証情報は、マスター・シークレットまた、Secrets Manager は、メインのシークレットとは別のシークレットとして保存します。ローテーション関数により、ローテーション関数で使用できるようにメインシークレットにこのマスターシークレットの ARN が保存されます。エンドユーザーのカスタムアプリケーションは、マスターシークレットにアクセスするべきではありません。Lambda ローテーション関数のみがメインシークレットにアクセスでき、ローテーションが発生したときにデータベースに新しい認証情報を更新または作成します。

testSecret ステップ

Lambda 関数のこのステップは、AWSPENDINGカスタムアプリケーションがセキュリティで保護されたリソースにアクセスするのと同じ方法で、セキュリティで保護されたリソースにアクセスするために、シークレットのバージョンを使用します。アプリケーションがデータベースへの読み取り専用アクセスを必要とする場合、関数はテスト読み込みが成功したことを検証する必要があります。アプリケーションがデータベースに書き込むことができる必要がある場合、関数はアクセスのレベルを確認するために何らかのテスト書き込みを実行する必要があります。

finishSecret ステップ

このステップでは、シークレットのこのバージョンでリソース固有のファイナライズを実行します。完了すると、最後のステップでは、Lambda 関数でラベルを移動する必要がありますAWSCURRENT現在のバージョンからこの新しいバージョンのシークレットに現在のバージョンから変更すると、クライアントが使用開始されます。AWSPENDING ラベルを削除することもできますが、技術的には必要ありません。この時点で、基本的なローテーションが完了します。すべてのクライアントは、新しいバージョンのシークレットを使用します。古いバージョンは、AWSPREVIOUS ステージングラベルを取得し、必要であれば復元用に、最後の正常なシークレットのバージョンとして使用することができます。古いバージョンではAWSPREVIOUSステージングラベルは、ステージングラベルを保持しなくなるため、Secrets Manager は、古いバージョンを非推奨そして削除対象とみなします。