翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
でのシークレットの暗号化と復号 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 は AWSCURRENT
、AWSPENDING
、および 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 は次のプロセスを使用します。
-
Secrets Manager は、 AWS KMS GenerateDataKeyシークレットの KMS キーの ID と 256 ビット AES 対称キーのリクエストを使用して オペレーションを呼び出します。 AWS KMS は、プレーンテキストのデータキーと、KMS キーで暗号化されたそのデータキーのコピーを返します。
-
Secrets Manager は、プレーンテキストのデータキーと Advanced Encryption Standard (AES) アルゴリズムを使用して、 の外部でシークレット値を暗号化します AWS KMS。次に、使用後可能な限り早く、メモリからプレーンテキストキーが削除されます。
-
Secrets Manager は、暗号化されたデータキーをシークレットのメタデータに保存するので、シークレット値を復号化できます。ただし、Secrets Manager API のいずれも、暗号化されたシークレットまたは暗号化されたデータキーを返しません。
暗号化されたシークレット値を復号するには:
-
Secrets Manager は AWS KMS Decrypt オペレーションを呼び出し、暗号化されたデータキーを渡します。
-
AWS KMS はシークレットの KMS キーを使用してデータキーを復号します。プレーンテキストのデータキーを返します。
-
Secrets Manager は、プレーンテキストのデータキーを使用してシークレット値を復号化します。次に、可能な限り早く、メモリからデータキーが削除されます。
KMS キーのアクセス許可
Secrets Manager が暗号化オペレーションで KMS キーを使用する場合、シークレット値をアクセスまたは更新しているユーザーの代わりに動作します。IAM ポリシーまたはキーポリシーでアクセス許可を付与できます。次の Secrets Manager オペレーションには AWS KMS アクセス許可が必要です。
Secrets Manager から送信されるリクエストにのみ KMS キーを使用できるようにするには、 アクセス許可ポリシーで、 secretsmanager.
値で kms:ViaService condition キーを使用できます。<Region>
.amazonaws.com
また、暗号化オペレーションに 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 は新しいデータキーをリクエストして新しいシークレット値を暗号化します。
シークレット値は変更されないため
GenerateDataKey
、 RotateSecretオペレーションは を呼び出しません。ただし、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" }