の主な用語と概念AWS Secrets Manager - AWS Secrets Manager

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

の主な用語と概念AWS Secrets Manager

以下の用語と概念は、AWS Secrets Manager とその仕組みを理解する上で重要です。

Secret

Secrets Manager では、シークレットは認証情報、ユーザー名、パスワードそしてセキュリティで保護されたサービス.にアクセスするために使用する接続の詳細一式で構成されています。これらを安全に保存し、許可されたユーザーだけがアクセスできるようにします。Secrets Manager は、シークレットテキストを常に暗号化された形式で格納し、転送中のシークレットを暗号化します。

Secrets Manager は、IAM アクセス許可ポリシーを使用して、許可されたユーザーのみがシークレットにアクセスまたは変更できるようにします。これらのポリシーをユーザーまたはロールに添付し、それらのユーザーがアクセスできるシークレットを指定できます. シークレットへのアクセスの制御方法については、「」を参照してください。AWS Secrets Manager の認証とアクセスコントロール.

認証情報を保存する場合、保護された異なるサービスでは異なる情報が必要になることがあります。Secrets Manager は、このシークレットをテキスト文字列のキーと値のペアとして保存することにより、この柔軟性を提供します。でサポートされているデータベースを選択すると、Secrets Manager は選択したデータベースのローテーション関数の要件に応じてキーと値のペアを定義します。Secrets Manager は、Secrets ManagerJSON テキストとしてペアをフォーマットします。その他サービスまたはデータベースを選択した場合、Secrets Manager は、Lambda 関数を提供しないので、ユーザーが定義した JSON のキーと値の組み合わせとしてシークレットを指定することができます。

結果として保存される暗号化されたシークレットテキストは、次の例のようになります。

{ "host" : "ProdServer-01.databases.example.com", "port" : "8888", "username" : "administrator", "password" : "My-P@ssw0rd!F0r+Th3_Acc0unt", "dbname" : "MyDatabase", "engine" : "mysql" }

コマンドラインツールまたは API を使用する場合、バイナリデータをシークレットに保存することもできます。Secrets Manager コンソールは、バイナリデータをサポートしていません。

Secrets Manager は、指定したスケジュールでシークレットを自動的にローテーションします。パスワードの代わりにユーザーまたはアカウントの完全な認証情報セットを保存する場合、サービスを中断せずに認証情報をローテーションすることができます。パスワードのみを変更または更新すると、古いパスワードは直ちに使用できなくなり、クライアントは直ちに新しいパスワードの使用を開始しなければなりません。そうしないと失敗します。新しいパスワードを使用して新しいユーザーを作成するか、少なくとも 2 人のユーザーを交互に変更することができれば、古いユーザーとパスワードは、古いユーザーとパスワードを非推奨にするまで、新しいユーザーとパスワードを並行して操作できます。これにより、新しい認証情報をテストして検証する間に、すべてのクライアントが引き続き作業できる時間を確保できます。新しい認証情報がテストに合格したら、すべてのクライアントが新しい認証情報を使用することを確実にし、古い認証情報を削除します。

サポートされているデータベース

コンソールを使用し、Secrets Manager がネイティブにサポートするデータベースのいずれかのシークレットを指定すると、Secrets Manager はすべての構造と構文解析を管理します。Secrets Managerコンソールは、特定のタイプのデータベースの詳細を入力するように求めます。その後、Secrets Manager は、必要な構成を構築し、情報を保存し、情報を取得する際に、解析を行い、簡単に理解しやすいテキスト情報に戻します。

その他のデータベースまたはサービス

その代わりに、「カスタム」データベースまたはサービスのシークレットを指定する場合は、シークレットテキストを取得した後で行う操作とその解釈を管理します。Secrets Manager コンソールは、シークレットをキーと値の文字列として受け入れ、自動的にそれらを保存用の JSON 構造に変換します。コンソールでシークレットを取得すると、Secrets Manager はシークレットを自動的に解析して、キーと値のテキスト文字列に戻して表示します。シークレットをプログラムで取得する場合は、適切な JSON 解析ライブラリを使用することができます。これは、ほぼすべてのプログラミング言語で利用可能で、効果的な方法で、シークレットを解析できます。シークレットあたりの制限 65,536 バイトを超える必要がある場合は、キーと値のペアを 2 つのシークレットに分割し、取り出すときに連結できます。

Secrets Manager シークレットの基本構造

Secrets Manager では、シークレットには暗号化されたシークレットテキストだけでなく、シークレットを記述するいくつかのメタデータ要素が含まれており、シークレットをどのように Secrets Manager が処理するべきかが定義されています。

  • メタデータ – シークレットの詳細

    • シークレットの名前、説明、および一意の識別子として機能する Amazon リソースネーム (ARN) を含む基本情報。

    • AWS Key Management Service がシークレットの保護テキストを暗号化および復号するために使用する AWS KMS (Secrets Manager) キーの ARN。この情報を指定しない場合、Secrets Manager はアカウントのデフォルト AWS KMS キーを使用します。

    • キーをローテーションする頻度およびローテーションを実行するために使用する Lambda 関数に関する情報。

    • ユーザーが提供した一連のタグ. タグは、整理、論理グループ、およびAWSコスト配分用にキーと値のペアとして リソースにアタッチできます。

  • バージョン – 暗号化されたシークレットテキストの 1 つまたは複数のバージョン

    • 通常は一度に 1 つのバージョンのシークレットしか使用できませんが、データベースまたはサービス上のシークレットをローテーションしている間は、複数のバージョンが存在する可能性があります。シークレットを変更するたびに、Secrets Manager は、新規バージョンを作成します。

    • 各バージョンには、暗号化されたシークレット値のコピーが保持されています。

    • 各バージョンは、シークレットローテーションサイクルのステージを識別するために添付された 1 つ以上のステージングラベルを保持することができます。

保護されたサービス

Secrets Manager は、セキュリティで保護されたサービスをデータベースまたはシークレットで保存されている認証情報で管理されているアクセスがあるネットワークサーバーで実行中のその他サービスとして定義します。セキュリティで保護されたサービスは、単一のサーバー、または同じアクセス方法を共有する大規模なサーバーグループを参照できます。保護されたサービスに正常にアクセスするには、シークレットが必要です。シークレットには、クライアントが保護されたサービスにアクセスするために必要なすべての情報が含まれています。このガイドでは、シークレットを で保護できるさまざまなタイプのデータベースまたはサービスをすべて表す一般的な用語として、「保護されたサービス」という用語を使用しています。AWS Secrets Manager.

Rotation

Secrets Manager はローテーションを、定期的にシークレットを変更して、攻撃者がセキュリティで保護されたサービスにアクセスするのをより困難にするプロセスとして定義します。Secrets Manager を使用すると、手動でシークレットを変更してすべてのクライアントで更新する必要がなくなります。 代わりに、Secrets Manager は AWS Lambda 関数を使用して、すべてのローテーションステップを定期的なスケジュールで実行します。

たとえば、データベースやセキュリティで保護されたサービス.にアクセスするアプリケーションをすべて実行している大規模のクライアントがあるとします。認証情報をアプリケーションにハードコーディングする代わりに、アプリケーションは必要に応じて、Secrets Manager にリクエストを送信し、シークレットの詳細を受信します。シークレットをローテーションさせる際、Lambda ローテーション関数は自動的に以下のステップを実行します。

  1. ローテーション関数は、セキュリティで保護されたサービスの認証システムに接続し、データベースにアクセスするための新しい認証情報の一式を作成します。認証情報は、通常ユーザー名、パスワード、および接続の詳細で構成されますが、システムによって異なる場合があります。Secrets Manager は、 ステージングラベルがアタッチされたシークレットの新しいバージョンAWSPENDINGに、シークレットテキストとしてこれらの新しい認証情報を保存します。

  2. その後、ローテーション関数は、シークレットの AWSPENDING バージョンをテストして、認証情報が機能し、保護されたサービスに必要なレベルのアクセスを許可していることを確認します。

  3. テストが成功した場合、ローテーション関数はラベル AWSCURRENT を新しいバージョンに移動し、それをデフォルトバージョンとしてマークします。これにより、すべてのクライアントが古いバージョンではなく、このバージョンのシークレットの使用を開始します。また、この関数は、古いバージョンに AWSPREVIOUS というラベルを割り当て、それを「最後の既知の正常な」バージョンとしてマークします。これで、AWSPREVIOUS ステージングラベルを持つバージョンに、ラベルがなくなるため、非推奨になります。

コンソールで [LambdaRotate secret(シークレットをローテーションする)] を選択すると、手動で ローテーション関数を起動することも、ローテーションスケジュールを指定して n 日ごとに自動的にトリガーすることもできます。がネイティブでサポートする データベースのいずれかAWSを使用すると、Secrets Manager はデータベースの認証情報をローテーションする 関数を提供します。Secrets ManagerLambdaこの関数は、基本的なローテーションを自動的に実行します。または高度なカスタムローテーションポリシーをサポートするように、この機能をカスタマイズすることができます。

カスタムサービスのシークレットを作成する場合は、Lambda 関数を自分で作成しなければなりません。この関数のコードでは、JSON 構造の作成方法を決定し、その関数内で解析します。

シークレットが使用するいずれのサービスまたはデータベースでも、シークレット用の Lambda ローテーション関数は、データベースまたはサービスの両方、そして Secrets Manager サービスエンドポイントにアクセスできなければなりません。ローテーション関数およびデータベースまたはサービスが Lambda から提供される VPC に存在する場合、Amazon VPC 用の VPC サービスエンドポイント、またはSecrets ManagerNAT ゲートウェイを使用した直接的なインターネット接続のいずれかを使用して、VPC がパブリック サービスエンドポイントへのアクセスを許可するように設定します。Secrets Manager

ローテーションについて詳しくは、「」を参照してください。AWS Secrets Manager シークレットの更新.

ステージングラベル

Secrets Manager は、簡単なテキスト文字列のステージングラベルを使用して、ローテーション中に異なるバージョンのシークレットを識別できるようにします。暗号化されたシークレット値をクエリするたびに、取得するシークレットのバージョンを指定することができます。バージョン ID またはステージングラベルでバージョンを指定しない場合、Secrets Manager は ステージングラベル AWSCURRENT が添付されたバージョンを規定値とします。Secrets Manager は、常にステージングラベル AWSCURRENT を 1 つのバージョンのシークレットに添付します。これがどのように機能するかの例については、ローテーションの簡単な紹介を参照してください。

シークレットのバージョンは、0 〜 20 のステージングラベルがアタッチされています。 たとえば、SecretAVersion1 に 20 個のステージングラベルがあり、ステージングラベルを SecretBVersion1 に追加する場合は、SecretAVersion1 からステージングラベルを削除してから、SecretBVersion1 にステージングラベルを追加する必要があります。

ステージングラベルは、一度にシークレットの 1 つのバージョンにのみアタッチできます。ステージングシークレットの 2 つのバージョンは同じラベルを持つことはできません。ステージングラベルをバージョンに添付する際に、同じラベルがある別のバージョンが存在する場合は、ラベルを削除するバージョンも指定する必要があります。指定しないと、Secrets Manager はエラーを返します。

シークレットの 1 つのバージョンは、常にステージングラベル AWSCURRENT を持つ必要があり、API オペレーションはこの動作を適用します。Lambda によって提供される Secrets Manager ローテーション関数は、適切なバージョンの AWSPENDINGAWSCURRENT、および AWSPREVIOUS ラベルを自動的に保持します。

Versioning

シークレットのローテーションをサポートするため、シークレットには複数のバージョンが存在します。Secrets Manager は、ステージングラベル.を使用して、異なるバージョンを区別します。ほとんどのシナリオでは、シークレットのバージョンについて心配する必要はありません。Secrets Manager および提供される Lambda ローテーション関数が、これらの詳細を管理します。ただし、独自の Lambda ローテーション関数を作成する場合は、コードで複数のバージョンのシークレットをご自身で管理し、バージョン間でステージングラベルを適切に移動する必要があります。バージョン間で移動できるステージングラベルとは異なり、バージョンには同じバージョンで常に保持される一意の識別子 (通常は UUID 値) もあります。UUID は、ClientRequestToken、および PutSecretValue CreateSecret で渡される UpdateSecret に対応しています。APIs

AWSCURRENT ラベルがアタッチされたシークレットのデフォルトバージョンを常に要求するようにクライアントを設定します。他のバージョンも存在できますが、特定のバージョン ID またはステージングラベルを要求することによってのみ他のバージョンにアクセスできます。シークレット値を要求すると、バージョン ID またはステージングラベルを指定しない場合、デフォルトでは、 というステージングラベルのバージョンが取得されます。AWSCURRENT.

ローテーション中、Secrets Manager はシークレットの新しいバージョンを作成し、ステージングラベル AWSPENDING. をアタッチします。ローテーション関数は、AWSPENDING バージョンを使用し、バージョンがテストに合格するまで、そのバージョンを識別します。ローテーション関数が新しい認証情報が機能することを確認したら、Secrets Manager は、ラベル AWSPREVIOUSAWSCURRENT のある古いバージョンに移動し、ラベル AWSCURRENT を新しい AWSPENDING ラベルに移動し、最後に、AWSPENDING. を削除します。

ステージングラベルがローテーションをサポートする方法の詳細については、「」を参照してください。AWS Secrets Manager シークレットの更新.

シークレット用に維持される各バージョンは、次の要素が含まれます。

  • バージョンの一意の ID。

  • バージョンを識別するために使用するステージングラベルのコレクション、シークレット内では固有。Secrets Manager は、ステージングラベルが存在しないバージョンを非推奨と認識し、これらバージョンは、削除対象となる場合があります。

  • 暗号化され、保存されたシークレットテキスト。

暗号化されたシークレット値をクエリするたびに、シークレットのバージョンを指定することができます。バージョン ID またはステージングラベルのいずれかでバージョンを指定しない場合、Secrets Manager は、ステージングラベル AWSCURRENT が添付されたバージョンを規定値とします。Secrets Manager は常にステージングラベル AWSCURRENT を 1 つのバージョンのシークレットに添付します。