でのシークレット暗号化と復号化 AWS Secrets Manager - AWS Secrets Manager

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

でのシークレット暗号化と復号化 AWS Secrets Manager

Secrets Manager は、AWS KMSキーとデータキーによるエンベロープ暗号化を使用して各シークレット値を保護します。シークレットのシークレット値が変更されるたびに、Secrets Manager AWS KMS はそれを保護するための新しいデータキーを要求します。データキーは、KMS キーの下で暗号化され、シークレットのメタデータに保存されます。シークレットを復号化するには、Secrets Manager はまず KMS キーを使用して暗号化されたデータキーを復号化します。 AWS KMS

Secrets Manager は、シークレット値を直接暗号化するとき、KMS キーを使用しません。代わりに、KMS キーを使用して 256 ビット Advanced Encryption Standard (AES) 対称型データキーを生成し、このデータキーを使用してシークレット値を暗号化します。Secrets Manager は、プレーンテキストのデータキーを使用して外部のシークレット値を暗号化し AWS KMS、メモリから削除します。また、データキーの暗号化されたコピーを、シークレットのメタデータに保存します。

シークレットを作成するときは、 AWS アカウント およびリージョンにある任意の対称暗号化カスタマー管理キーを選択するか、 AWS マネージドキー for Secrets Manager (aws/secretsmanager) を使用できます。を選択してもまだ存在しない場合は、Secrets Manager によって作成され、シークレットに関連付けられます。 AWS マネージドキー aws/secretsmanagerアカウントの各シークレットに、同じ KMS キーまたは異なる KMS キーを使用できます。異なる KMS キーを使用して、シークレットのグループのキーにカスタムアクセス許可を設定したり、それらのキーの特定の操作を監査したりする場合があります。Secrets Manager は、対称型 暗号化KMS キーのみをサポートします。外部キーストアで KMS キーを使用する場合、要求が AWSの外に移動する必要があるため、KMS キーの暗号化操作に時間がかかり、信頼性と耐久性が低下する可能性があります。

シークレットの暗号化キーの変更の詳細については、「AWS Secrets Manager シークレットの暗号化キーを変更」を参照してください。

暗号化キーを変更すると、Secrets Manager はAWSCURRENTAWSPENDINGAWSPREVIOUSを新しいキーで再暗号化します。シークレットからロックアウトされないように、SecSecrets Manager は既存のすべてのバージョンを以前のキーで暗号化したままにします。つまり、以前のキーまたは新しいキーを使用してAWSCURRENTAWSPENDING、、、AWSPREVIOUSのバージョンを復号化できます。

AWSCURRENT新しい暗号化キーでのみ復号化できるようにするには、新しいキーを使用して新しいバージョンのシークレットを作成します。その後、AWSCURRENTシークレットバージョンを復号化できるようにするには、新しいキーに対する権限が必要です。

シークレットに関連付けられている KMS キーを確認するには、コンソールでシークレットを確認するか、またはを呼び出します。ListSecretsDescribeSecretシークレットが AWS マネージドキー for Secrets Manager (aws/secretsmanager) に関連付けられている場合、これらの操作では KMS キー識別子は返されません。

暗号化されるもの

Secrets Manager ではシークレット値を暗号化しますが、次の値は暗号化しません。

  • シークレットの名前と説明

  • ローテーション設定

  • シークレットに関連付けられた KMS キーの ARN

  • 添付されているすべてのタグ AWS

プロセスの暗号化と復号

シークレットのシークレット値を暗号化するには、Secrets Manager は次のプロセスを使用します。

  1. Secrets Manager は、シークレットの KMS キーの ID と 256 ビット AES AWS KMS GenerateDataKey対称キーのリクエストを使用してオペレーションを呼び出します。 AWS KMS プレーンテキストのデータキーと、KMS キーで暗号化されたそのデータキーのコピーを返します。

  2. Secrets Manager は、プレーンテキストのデータキーと高度暗号化標準 (AES) アルゴリズムを使用して、外部のシークレット値を暗号化します。 AWS KMS次に、使用後可能な限り早く、メモリからプレーンテキストキーが削除されます。

  3. Secrets Manager は、暗号化されたデータキーをシークレットのメタデータに保存するので、シークレット値を復号化できます。ただし、Secrets Manager API のいずれも、暗号化されたシークレットまたは暗号化されたデータキーを返しません。

暗号化されたシークレット値を復号するには:

  1. Secrets Manager は AWS KMS Decrypt 操作を呼び出し、暗号化されたデータキーを渡します。

  2. AWS KMS シークレットの KMS キーを使用してデータキーを復号します。プレーンテキストのデータキーを返します。

  3. Secrets Manager は、プレーンテキストのデータキーを使用してシークレット値を復号化します。次に、可能な限り早く、メモリからデータキーが削除されます。

KMS キーのアクセス許可

Secrets Manager が暗号化オペレーションで KMS キーを使用する場合、シークレット値をアクセスまたは更新しているユーザーの代わりに動作します。IAM ポリシーまたはキーポリシーでアクセス許可を付与できます。Secrets Manager AWS KMS の以下の操作には権限が必要です。

KMS キーを Secrets Manager から発信されたリクエストにのみ使用できるようにするには、アクセス権限ポリシーで kms: ViaService 条件キーと値を使用できますsecretsmanager.<Region>.amazonaws.com

また、暗号化オペレーションに KMS キーを使用する条件として、暗号化コンテキストでキーまたは値を使用することもできます。例えば、IAM またはキーポリシードキュメントで文字列条件演算子を使用したり、制約許可を与えられます。KMS キー付与の伝播には、最大 5 分かかります。詳細については、を参照してください。CreateGrant

Secrets Manager による KMS キーの使用方法

Secrets Manager は KMS AWS KMS キーを使用して以下の操作を呼び出します。

GenerateDataKey

Secrets Manager は、以下のSecrets Manager AWS KMS GenerateDataKey操作に応答してオペレーションを呼び出します。

  • CreateSecret— 新しいシークレットにシークレット値が含まれている場合、Secrets Manager はそれを暗号化するための新しいデータキーを要求します。

  • PutSecretValue— Secrets Manager は、指定されたシークレット値を暗号化するための新しいデータキーを要求します。

  • ReplicateSecretToRegions— 複製されたシークレットを暗号化するために、SecSecrets Manager はレプリカリージョン内のKMSキーのデータキーを要求します。

  • UpdateSecret— シークレット値または KMS キーを変更すると、Secrets Manager は新しいシークレット値を暗号化するための新しいデータキーを要求します。

シークレット値は変更されないためGenerateDataKeyRotateSecretオペレーションは呼び出されません。ただし、RotateSecret がシークレット値を変更する Lambda 関数を呼び出す場合、PutSecretValue オペレーションの呼び出しにより、GenerateDataKey リクエストがトリガーされます。

Decrypt

Secrets Manager は、次の Secrets Manager オペレーションに応答して Decrypt オペレーションを呼び出します。

  • GetSecretValueおよび BatchGetSecretValue— Secrets Manager はシークレット値を復号化してから呼び出し元に返します。暗号化されたシークレット値を復号化するには、Secrets Manager は AWS KMS Decrypt オペレーションを呼び出して、シークレット内の暗号化されたデータキーを復号化します。次に、プレーンテキストのデータキーを使って、暗号化されたシークレット値を復号します。バッチコマンドの場合、Secrets Manager は復号化されたキーを再利用できるため、すべての呼び出しが Decrypt リクエストにつながるわけではありません。

  • PutSecretValueUpdateSecret— ほとんどの AND PutSecretValue UpdateSecret リクエストは操作をトリガーしません。Decryptただし、PutSecretValue または UpdateSecret 要求がシークレットの既存のバージョンでシークレット値を変更しようとすると、Secrets Manager は既存のシークレット値を復号化し、リクエスト内のシークレット値と比較して、それらが同じであることを確認します。このアクションは、Secrets Manager の操作が冪等であることを保証します。暗号化されたシークレット値を復号化するには、Secrets Manager は AWS KMS Decrypt オペレーションを呼び出して、シークレット内の暗号化されたデータキーを復号化します。次に、プレーンテキストのデータキーを使って、暗号化されたシークレット値を復号します。

  • ReplicateSecretToRegions— Secrets Manager は、まずプライマリリージョンのシークレット値を復号してから、レプリカリージョンの KMS キーを使用してシークレット値を再暗号化します。

暗号化

Secrets Manager は、次の Secrets Manager オペレーションに応答して Encrypt オペレーションを呼び出します。

  • UpdateSecret— KMS キーを変更すると、Secrets Manager は、AWSCURRENTAWSPREVIOUSAWSPENDINGシークレットバージョンを保護するデータキーを新しいキーで再暗号化します。

  • ReplicateSecretToRegions— Secrets Manager は、レプリカリージョンの KMS キーを使用して、レプリケーション中にデータキーを再暗号化します。

DescribeKey

Secrets Manager コンソールでシークレットを作成または編集するときに、Secrets Manager DescribeKeyはオペレーションを呼び出して KMS キーを一覧表示するかどうかを決定します。

KMS キーへのアクセスの検証

シークレットに関連付けられている KMS キーを確立または変更すると、Secrets Manager は、指定された KMS キーを使用して GenerateDataKey および Decrypt オペレーションを呼び出します。これらの呼び出しでは、呼び出し元に、これらのオペレーションで KMS キーを使用するアクセス許可があることが確認されます。Secrets Manager は、これらの操作の結果を破棄します。暗号化操作ではそれらを使用しません。

これらのリクエストの SecretVersionId キーの暗号化コンテキストの値は RequestToValidateKeyAccess であるため、この検証呼び出しを識別できます。

注記

以前は、Secrets Manager の検証呼び出しに暗号化コンテキストが含まれていませんでした。 AWS CloudTrail 古いログには、暗号化コンテキストのない呼び出しが見つかる場合があります。

キーポリシー AWS マネージドキー (aws/secretsmanager)

AWS マネージドキー for Secrets Manager (aws/secretsmanager) のキーポリシーは、Secrets Manager がユーザーに代わってリクエストを行う場合にのみ、指定された操作で KMS キーを使用する権限をユーザーに付与します。このキーポリシーでは、ユーザーが KMS キーを直接使用することは許可されません。

このキーポリシーは、すべての AWS マネージドキー のポリシーと同様に、サービスによって確立されます。キーポリシーは変更できませんが、いつでも表示できます。詳細については、「Viewing a key policy」を参照してください。

このキーポリシーのポリシーステートメントには次の効果があります

  • アカウントのユーザーが暗号化オペレーションに KMS キーを使用できるようにするのは、リクエストがSecrets Manager から送信される場合のみです。kms:ViaService 条件キーで、この制限を適用します。

  • ユーザーが KMS キーのプロパティを表示したり、権限を取り消したりできる IAM AWS ポリシーの作成をアカウントに許可します。

  • Secrets Manager は、KMS キーへのアクセスを取得するときは許可を使用しませんが、このポリシーは、ユーザーに代わって Secrets Manager が KMS キーの許可を作成すること、および、アカウントが KMS キーの使用を Secrets Manager に許可するための許可を取り消すことを、許可します。これらは、 AWS マネージドキーのポリシードキュメントの標準要素です。

Secrets Manager AWS マネージドキー の例のキーポリシーを以下に示します。

{ "Id": "auto-secretsmanager-2", "Version": "2012-10-17", "Statement": [ { "Sid": "Allow access through AWS Secrets Manager for all principals in the account that are authorized to use AWS Secrets Manager", "Effect": "Allow", "Principal": { "AWS": [ "*" ] }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:CreateGrant", "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:CallerAccount": "111122223333", "kms:ViaService": "secretsmanager.us-west-2.amazonaws.com" } } }, { "Sid": "Allow access through AWS Secrets Manager for all principals in the account that are authorized to use AWS Secrets Manager", "Effect": "Allow", "Principal": { "AWS": [ "*" ] }, "Action": "kms:GenerateDataKey*", "Resource": "*", "Condition": { "StringEquals": { "kms:CallerAccount": "111122223333" }, "StringLike": { "kms:ViaService": "secretsmanager.us-west-2.amazonaws.com" } } }, { "Sid": "Allow direct access to key metadata to the account", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:root" ] }, "Action": [ "kms:Describe*", "kms:Get*", "kms:List*", "kms:RevokeGrant" ], "Resource": "*" } ] }

Secrets Manager の暗号化コンテキスト

暗号化コンテキスト は、一連のキー値のペアおよび任意非シークレットデータを含みます。データを暗号化するリクエストに暗号化コンテキストを含めると、 AWS KMS 暗号化コンテキストが暗号化されたデータに暗号的にバインドされます。データを復号するには、同じ暗号化コンテキストに渡す必要があります。

Secrets Manager は、次の例に示すように AWS KMS、GenerateDataKeyシークレットとそのバージョンを識別する2つの名前と値のペアを持つ暗号化コンテキストを使用して、シークレットとそのバージョンを識別します。名前は変わりませんが、組み合わされた暗号化コンテキストの値は、シークレット値ごとに異なります。

"encryptionContext": { "SecretARN": "arn:aws:secretsmanager:us-east-2:111122223333:secret:test-secret-a1b2c3", "SecretVersionId": "EXAMPLE1-90ab-cdef-fedc-ba987SECRET1" }

暗号化コンテキストを使用して、監査レコードやログ (や Amazon CloudWatch Logs など) でこれらの暗号化操作を識別したり、ポリシーや許可の条件として使用したりできます。AWS CloudTrail

Secrets Manager の暗号化コンテキストは、2 つの名前と値のペアで構成されます。

  • SecretArn – 最初の名前と値のペアがシークレットを識別します。キーは、SecretARN です。値はシークレットの Amazon リソースネーム (ARN) です。

    "SecretARN": "ARN of an Secrets Manager secret"

    例えば、シークレットの ARN が arn:aws:secretsmanager:us-east-2:111122223333:secret:test-secret-a1b2c3 である場合 、暗号化コンテキストには次のペアが含まれます。

    "SecretARN": "arn:aws:secretsmanager:us-east-2:111122223333:secret:test-secret-a1b2c3"
  • SecretVersionId— 2 番目の名前と値のペアは、シークレットのバージョンを識別します。キーは、SecretVersionId です。値は、バージョン ID です。

    "SecretVersionId": "<version-id>"

    例えば、シークレットのバージョン ID が EXAMPLE1-90ab-cdef-fedc-ba987SECRET1 である場合、暗号化コンテキストには次のペアが含まれます。

    "SecretVersionId": "EXAMPLE1-90ab-cdef-fedc-ba987SECRET1"

シークレットの KMS キーを設定または変更すると、Secrets Manager は、呼び出し元がこれらの操作に KMS キーを使用する権限を持っていることを確認するために、GenerateDataKey要求を送信および復号化します。 AWS KMS レスポンスは廃棄され、シークレット値では使用されません。

これらの検証リクエストでは、SecretARN の値がシークレットの実際の ARN となりますが、SecretVersionId 値は、次の暗号化コンテキストの例に示すように RequestToValidateKeyAccess になります。この特殊な値は、ログと監査証跡で検証リクエストを識別するうえで役立ちます。

"encryptionContext": { "SecretARN": "arn:aws:secretsmanager:us-east-2:111122223333:secret:test-secret-a1b2c3", "SecretVersionId": "RequestToValidateKeyAccess" }
注記

以前は、Secrets Manager の検証要求に暗号化コンテキストが含まれていませんでした。古いログには、暗号化コンテキストのない呼び出しが見つかる場合があります。 AWS CloudTrail

Secrets Manager とのやりとりを監視する AWS KMS

Amazon CloudWatch Logs を使用して AWS CloudTrail 、Secrets Manager AWS KMS がユーザーに代わって送信するリクエストを追跡できます。シークレットの使用のモニタリングについては、「AWS Secrets Manager シークレットをモニタリングする」を参照してください。

GenerateDataKey

シークレットのシークレット値を作成または変更すると、Secrets Manager はシークレットの KMS GenerateDataKey AWS KMS キーを指定するリクエストをに送信します。

GenerateDataKey 演算を記録するイベントは、次のようなサンプルイベントになります。リクエストは secretsmanager.amazonaws.com によって起動されます。このパラメータには、シークレットの KMS キーの Amazon リソースネーム (ARN)、256 ビットキーを要求するキー識別子、およびシークレットとバージョンを識別する暗号化コンテキストが含まれます。

{ "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "AROAIGDTESTANDEXAMPLE:user01", "arn": "arn:aws:sts::111122223333:assumed-role/Admin/user01", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "sessionContext": { "attributes": { "mfaAuthenticated": "false", "creationDate": "2018-05-31T23:23:41Z" } }, "invokedBy": "secretsmanager.amazonaws.com" }, "eventTime": "2018-05-31T23:23:41Z", "eventSource": "kms.amazonaws.com", "eventName": "GenerateDataKey", "awsRegion": "us-east-2", "sourceIPAddress": "secretsmanager.amazonaws.com", "userAgent": "secretsmanager.amazonaws.com", "requestParameters": { "keyId": "arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "keySpec": "AES_256", "encryptionContext": { "SecretARN": "arn:aws:secretsmanager:us-east-2:111122223333:secret:test-secret-a1b2c3", "SecretVersionId": "EXAMPLE1-90ab-cdef-fedc-ba987SECRET1" } }, "responseElements": null, "requestID": "a7d4dd6f-6529-11e8-9881-67744a270888", "eventID": "af7476b6-62d7-42c2-bc02-5ce86c21ed36", "readOnly": true, "resources": [ { "ARN": "arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "accountId": "111122223333", "type": "AWS::KMS::Key" } ], "eventType": "AwsApiCall", "recipientAccountId": "111122223333" }
Decrypt

シークレットのシークレット値を取得または変更すると、Secrets Manager AWS KMS は暗号化されたデータキーを復号化するための復号化リクエストを送信します。バッチコマンドの場合、Secrets Manager は復号化されたキーを再利用できるため、すべての呼び出しが Decrypt リクエストにつながるわけではありません。

Decrypt 演算を記録するイベントは、次のようなサンプルイベントになります。ユーザーは、 AWS テーブルにアクセスするアカウントのプリンシパルです。パラメータには、暗号化されたテーブルキー (暗号文 BLOB として) と、テーブルとアカウントを識別する暗号化コンテキストが含まれます。 AWS AWS KMS KMS キーの ID を暗号文から導出します。

{ "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "AROAIGDTESTANDEXAMPLE:user01", "arn": "arn:aws:sts::111122223333:assumed-role/Admin/user01", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "sessionContext": { "attributes": { "mfaAuthenticated": "false", "creationDate": "2018-05-31T23:36:09Z" } }, "invokedBy": "secretsmanager.amazonaws.com" }, "eventTime": "2018-05-31T23:36:09Z", "eventSource": "kms.amazonaws.com", "eventName": "Decrypt", "awsRegion": "us-east-2", "sourceIPAddress": "secretsmanager.amazonaws.com", "userAgent": "secretsmanager.amazonaws.com", "requestParameters": { "encryptionContext": { "SecretARN": "arn:aws:secretsmanager:us-east-2:111122223333:secret:test-secret-a1b2c3", "SecretVersionId": "EXAMPLE1-90ab-cdef-fedc-ba987SECRET1" } }, "responseElements": null, "requestID": "658c6a08-652b-11e8-a6d4-ffee2046048a", "eventID": "f333ec5c-7fc1-46b1-b985-cbda13719611", "readOnly": true, "resources": [ { "ARN": "arn:aws:kms:us-east-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "accountId": "111122223333", "type": "AWS::KMS::Key" } ], "eventType": "AwsApiCall", "recipientAccountId": "111122223333" }
暗号化

シークレットに関連付けられている KMS キーを変更すると、Secrets Manager は Encrypt AWS KMS リクエストを送信してAWSCURRENTAWSPREVIOUSAWSPENDINGシークレットバージョンを新しいキーで再暗号化します。シークレットを別のリージョンにレプリケートすると、Secrets Manager は Encrypt リクエストも  AWS KMS に送信します。

Encrypt 演算を記録するイベントは、次のようなサンプルイベントになります。ユーザーは、 AWS テーブルにアクセスするアカウントのプリンシパルです。

{ "eventVersion": "1.08", "userIdentity": { "type": "IAMUser", "principalId": "AROAIGDTESTANDEXAMPLE:user01", "arn": "arn:aws:sts::111122223333:assumed-role/Admin/user01", "accountId": "111122223333", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "sessionContext": { "attributes": { "creationDate": "2023-06-09T18:11:34Z", "mfaAuthenticated": "false" } }, "invokedBy": "secretsmanager.amazonaws.com" }, "eventTime": "2023-06-09T18:11:34Z", "eventSource": "kms.amazonaws.com", "eventName": "Encrypt", "awsRegion": "us-east-2", "sourceIPAddress": "secretsmanager.amazonaws.com", "userAgent": "secretsmanager.amazonaws.com", "requestParameters": { "keyId": "arn:aws:kms:us-east-2:111122223333:key/EXAMPLE1-f1c8-4dce-8777-aa071ddefdcc", "encryptionAlgorithm": "SYMMETRIC_DEFAULT", "encryptionContext": { "SecretARN": "arn:aws:secretsmanager:us-east-2:111122223333:secret:ChangeKeyTest-5yKnKS", "SecretVersionId": "EXAMPLE1-5c55-4d7c-9277-1b79a5e8bc50" } }, "responseElements": null, "requestID": "129bd54c-1975-4c00-9b03-f79f90e61d60", "eventID": "f7d9ff39-15ab-47d8-b94c-56586de4ab68", "readOnly": true, "resources": [ { "accountId": "AWS Internal", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:us-west-2:111122223333:key/EXAMPLE1-f1c8-4dce-8777-aa071ddefdcc" } ], "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "111122223333", "eventCategory": "Management" }