翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
でのシークレット暗号化と復号化 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 はAWSCURRENT
、AWSPENDING
、AWSPREVIOUS
を新しいキーで再暗号化します。シークレットからロックアウトされないように、SecSecrets Manager は既存のすべてのバージョンを以前のキーで暗号化したままにします。つまり、以前のキーまたは新しいキーを使用してAWSCURRENT
AWSPENDING
、、、AWSPREVIOUS
のバージョンを復号化できます。
AWSCURRENT
新しい暗号化キーでのみ復号化できるようにするには、新しいキーを使用して新しいバージョンのシークレットを作成します。その後、AWSCURRENT
シークレットバージョンを復号化できるようにするには、新しいキーに対する権限が必要です。
シークレットに関連付けられている KMS キーを確認するには、コンソールでシークレットを確認するか、またはを呼び出します。ListSecretsDescribeSecretシークレットが AWS マネージドキー for Secrets Manager (aws/secretsmanager
) に関連付けられている場合、これらの操作では KMS キー識別子は返されません。
トピック
暗号化されるもの
Secrets Manager ではシークレット値を暗号化しますが、次の値は暗号化しません。
-
シークレットの名前と説明
-
ローテーション設定
-
シークレットに関連付けられた KMS キーの ARN
-
添付されているすべてのタグ AWS
プロセスの暗号化と復号
シークレットのシークレット値を暗号化するには、Secrets Manager は次のプロセスを使用します。
-
Secrets Manager は、シークレットの KMS キーの ID と 256 ビット AES AWS KMS GenerateDataKey対称キーのリクエストを使用してオペレーションを呼び出します。 AWS KMS プレーンテキストのデータキーと、KMS キーで暗号化されたそのデータキーのコピーを返します。
-
Secrets Manager は、プレーンテキストのデータキーと高度暗号化標準 (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 の以下の操作には権限が必要です。
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 は新しいシークレット値を暗号化するための新しいデータキーを要求します。
シークレット値は変更されないため
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— ほとんどの 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 は、
AWSCURRENT
、AWSPREVIOUS
AWSPENDING
シークレットバージョンを保護するデータキーを新しいキーで再暗号化します。 -
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 リクエストを送信して
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" }