でのシークレットの暗号化と復号 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 KMS キーの選択

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

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

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

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

へのアクセス許可を拒否し、 AWS マネージドキー aws/secretsmanagerシークレットがカスタマーマネージドキーで暗号化されるように要求できます。詳細については、「例: シークレットを暗号化するための特定の AWS KMS キーを拒否する」を参照してください。

シークレットに関連付けられている KMS キーを検索するには、コンソールでシークレットを表示するか、 ListSecrets または を呼び出しますDescribeSecret。シークレットが Secrets Manager (aws/secretsmanager) AWS マネージドキー の に関連付けられている場合、これらのオペレーションは KMS キー識別子を返しません。

暗号化されるもの

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

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

  • ローテーション設定

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

  • アタッチされた AWS タグ

プロセスの暗号化と復号

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

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

  2. Secrets Manager は、プレーンテキストのデータキーと Advanced Encryption Standard (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 アクセス許可が必要です。

Secrets Manager から送信されるリクエストにのみ KMS キーを使用できるようにするには、 アクセス許可ポリシーで、 secretsmanager.<Region>.amazonaws.com値で kms:ViaService condition キーを使用できます。

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

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

Secrets Manager は、KMS キーを使用して次の AWS KMS オペレーションを呼び出します。

GenerateDataKey

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

  • CreateSecret – 新しいシークレットにシークレット値が含まれている場合、Secrets Manager は新しいデータキーをリクエストして暗号化します。

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

  • ReplicateSecretToRegions – レプリケートされたシークレットを暗号化するために、Secrets 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 リクエストにつながるわけではありません。

  • PutSecretValue および UpdateSecret - ほとんどの 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 は、AWSCURRENT、、AWSPREVIOUSおよび AWSPENDINGシークレットバージョンを保護するデータキーを新しいキーで再暗号化します。

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

DescribeKey

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

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

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

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

注記

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

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

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

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

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

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

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

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

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

{ "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 暗号的にバインドします。データを復号するには、同じ暗号化コンテキストに渡す必要があります。

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

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

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

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 は GenerateDataKeyおよび Decrypt リクエストを AWS KMS に送信して、呼び出し元がこれらのオペレーションに 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

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

GenerateDataKey

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

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 は Decrypt リクエストを に送信 AWS KMS して、暗号化されたデータキーを復号します。バッチコマンドの場合、Secrets Manager は復号化されたキーを再利用できるため、すべての呼び出しが Decrypt リクエストにつながるわけではありません。

Decrypt 演算を記録するイベントは、次のようなサンプルイベントになります。ユーザーは、テーブルにアクセスする AWS アカウントのプリンシパルです。パラメータには、暗号化されたテーブルキー (暗号文 blob として) と、テーブルと AWS account. 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 してAWSCURRENT、、AWSPREVIOUS、および シークAWSPENDINGレットバージョンを新しいキーで再暗号化します。シークレットを別のリージョンにレプリケートすると、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" }