翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS Nitro Enclaves が AWS KMS を使用する方法
AWS KMS は、AWS Nitro Enclaves の暗号化アテステーションをサポートします。AWS Nitro Enclaves をサポートするアプリケーションは、エンクレーブの署名付きアテステーションドキュメントを使用して次の AWS KMS 暗号化オペレーションを呼び出します。これらの AWS KMS API は、アテステーションドキュメントが Nitro Enclave からのものであることを確認します。次にこれらの API は、レスポンスでプレーンテキストデータを返す代わりに、アテステーションドキュメントのパブリックキーを使用してプレーンテキストを暗号化し、エンクレーブ内の対応するプライベートキーによってのみ復号できる暗号文を返します。
次の表は、Nitro Enclave リクエストへのレスポンスが各 API オペレーションの標準的なレスポンスとどのように異なるかを示しています。
AWS KMS オペレーション | 標準的なレスポンス | AWS Nitro Enclaves のレスポンス |
---|---|---|
Decrypt |
プレーンテキストデータを返します | アテステーションドキュメントのパブリックキーによって暗号化されたプレーンテキストデータを返します |
GenerateDataKey |
データキーのプレーンテキストのコピーを返します (KMS キーによって暗号化されたデータキーのコピーも返します) |
アテステーションドキュメントのパブリックキーによって暗号化されたデータキーのコピーを返します (KMS キーによって暗号化されたデータキーのコピーも返します) |
GenerateDataKeyPair |
プライベートキーのプレーンテキストのコピーを返します (パブリックキーおよび KMS キーによって暗号化されたプライベートキーのコピーも返します) |
アテステーションドキュメントのパブリックキーによって暗号化されたプライベートキーのコピーを返します (パブリックキーおよび KMS キーによって暗号化されたプライベートキーのコピーも返します) |
GenerateRandom |
乱数バイト文字列を返します | アテステーションドキュメントのパブリックキーによって暗号化された乱数バイト文字列を返します |
AWS KMS はポリシー条件キーをサポートします。このキーを使用し、アテステーションドキュメントの内容に基づく AWS KMS キーを使用したエンクレーブオペレーションを許可または拒否できます。また、AWS CloudTrail ログで Nitro Enclave の AWS KMS に対するリクエストを監視することもできます。
Nitro Enclave のAWS KMS API を呼び出す方法
Nitro Enclaveの AWS KMS API を呼び出すには、リクエスト内の Recipient
パラメーターを使用して、エンクレーブの署名付きアテステーションドキュメントと、エンクレーブのパブリックキーで使用する暗号化アルゴリズムを指定します。リクエストに Recipient
パラメーターと署名付きアテステーションドキュメントが含まれている場合、レスポンスには CiphertextForRecipient
フィールドとパブリックキーによって暗号化された暗号文が含まれます。プレーンテキストフィールドは null または空です。
Recipient
パラメーターは、AWS Nitro Enclave からの署名付きアテステーションドキュメントを指定する必要があります。AWS KMS は、エンクレーブのアテステーションドキュメントのデジタル署名を使用して、リクエストのパブリックキーが有効なエンクレーブからのものであることを証明します。アテステーションドキュメントにデジタル署名をして独自の証明書を提供することはできません。
Recipient
パラメーターを指定するには、AWS Nitro Enclaves SDK または任意の AWS SDK を使用します。AWS Nitro Enclaves SDK は、Nitro Enclave 内でのみサポートされており、Recipient
パラメーターとその値をすべての AWS KMS リクエストに自動的に追加します。AWS SDK で Nitro Enclaves をリクエストするには、Recipient
パラメーターとその値を指定する必要があります。AWS SDK での Nitro Enclave 暗号化アテステーションのサポートは、2023 年 3 月に導入されました。
AWS KMS はポリシー条件キーをサポートします。このキーを使用し、アテステーションドキュメントの内容に基づく AWS KMS キーを使用したエンクレーブオペレーションを許可または拒否できます。また、AWS CloudTrail ログで Nitro Enclave の AWS KMS に対するリクエストを監視することもできます。
Recipient
パラメータと AWS CiphertextForRecipient
レスポンスフィールドの詳細については、 AWS Key Management Service API リファレンス、Nitro Enclaves SDK、または任意の AWS SDK の Decrypt 、、、GenerateDataKeyGenerateDataKeyPairおよび GenerateRandomトピックを参照してください。 AWS暗号化のデータおよびデータキーの設定については、Using cryptographic attestation with AWS KMS を参照してください。
AWS Nitro Enclaves の AWS KMS 条件キー
AWS KMS リソースへのアクセスを制御するキーポリシーおよびIAM ポリシーで条件キーを指定できます。条件キーを含むポリシーステートメントは、その条件が満たされたときにのみ有効です。
AWS KMS には、リクエスト内の署名付きアテステーションドキュメントの内容に基づいてGenerateDataKeyPair、Decrypt 、GenerateDataKey、、および GenerateRandomオペレーションのアクセス許可を制限する条件キーが用意されています。これらの条件キーは、AWS KMS オペレーションのリクエストに Recipient
パラメータと AWS Nitro Enclave からの有効なアテステーションドキュメントが含まれている場合にのみ機能します。Recipient
パラメーターを指定するには、AWS Nitro Enclaves SDK または任意の AWS SDK を使用します。
エンクレーブ固有の AWS KMS 条件キーは、IAM コンソールまたは IAMサービス認証リファレンスに表示されない場合でも、キーポリシーステートメントおよび IAM ポリシーステートメントで有効です。
kms:RecipientAttestation:ImageSha384
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 |
単一値 |
|
キーポリシーと IAM ポリシー |
kms:RecipientAttestation:ImageSha384
条件キーは、リクエストの署名付きアテステーションドキュメントからのイメージダイジェストが条件キーの値と一致する場合、KMS キーを使用して Decrypt
、GenerateDataKey
、GenerateDataKeyPair
、および GenerateRandom
へのアクセスを制御します。ImageSha384
値は、アテステーションドキュメントの PCR0 に対応します。この条件キーは、リクエストの Recipient
パラメータが AWS Nitro Enclave の署名付きアテステーションドキュメントを指定している場合にのみ有効です。
この値は、Nitro Enclaves の へのリクエストAWS KMSのCloudTrailイベントにも含まれます。
注記
この条件キーは、IAM コンソールまたは IAM サービス認証リファレンスに表示されない場合でも、キーポリシーステートメントおよび IAM ポリシーステートメントで有効です。
例えば、次のキーポリシーステートメントでは、data-processing
ロールが Decrypt 、、、GenerateDataKeyGenerateDataKeyPairおよび GenerateRandomオペレーションに KMS キーを使用することを許可します。kms:RecipientAttestation:ImageSha384
条件キーでは、リクエスト内のアテステーションドキュメントのイメージダイジェスト値 (PCR0) が条件内のイメージダイジェスト値と一致する場合にのみ、オペレーションを許可します。この条件キーは、リクエストの Recipient
パラメータが AWS Nitro Enclave の署名付きアテステーションドキュメントを指定している場合にのみ有効です。
リクエストに AWS Nitro Enclave の有効なアテステーションドキュメントが含まれていない場合は、この条件が満たされないため、アクセス権限は拒否されます。
{ "Sid" : "Enable enclave data processing", "Effect" : "Allow", "Principal" : { "AWS" : "arn:aws:iam::111122223333:role/data-processing" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey", "kms:GenerateDataKeyPair", "kms:GenerateRandom" ], "Resource" : "*", "Condition": { "StringEqualsIgnoreCase": { "kms:RecipientAttestation:ImageSha384": "9fedcba8abcdef7abcdef6abcdef5abcdef4abcdef3abcdef2abcdef1abcdef1abcdef0abcdef1abcdef2abcdef3abcdef4abcdef5abcdef6abcdef7abcdef99" } } }
kms:RecipientAttestation:PCR<PCR_ID>
AWS KMS 条件キー | 条件の種類 | 値の型 | API オペレーション | ポリシータイプ |
---|---|---|---|---|
|
文字列 |
単一値 |
|
キーポリシーと IAM ポリシー |
kms:RecipientAttestation:PCR<PCR_ID>
条件キーは、リクエスト内の署名付きアテステーションドキュメントからのプラットフォーム設定登録 (PCR) が条件キーの PCR と一致する場合にのみ、KMS を使用して Decrypt
、GenerateDataKey
、GenerateDataKeyPair
、および GenerateRandom
へのアクセスを制御します。この条件キーは、リクエストの Recipient
パラメータが AWS Nitro Enclave からの署名付きアテステーションドキュメントを指定している場合にのみ有効です。
この値は、Nitro Enclaves AWS KMSの へのリクエストを表すCloudTrailイベントにも含まれます。
注記
この条件キーは、IAM コンソールまたは IAM サービス認証リファレンスに表示されない場合でも、キーポリシーステートメントおよび IAM ポリシーステートメントで有効です。
PCR 値を指定するには、次の形式を使用します。PCR ID を条件キー名に連結します。PCR 値は、最大 96 バイトの小文字の 16 進文字列である必要があります。
"kms:RecipientAttestation:PCR
PCR_ID
": "PCR_value
"
たとえば、次の条件キーは PCR1 の特定の値を指定します。これは、エンクレーブとブートストラッププロセスに使用されるカーネルのハッシュに対応します。
kms:RecipientAttestation:PCR1: "0x1abcdef2abcdef3abcdef4abcdef5abcdef6abcdef7abcdef8abcdef9abcdef8abcdef7abcdef6abcdef5abcdef4abcdef3abcdef2abcdef1abcdef0abcde"
次のキーポリシーステートメントの例では、data-processing
ロールに Decrypt オペレーションでの KMS キーの使用を許可します。
このステートメントの kms:RecipientAttestation:PCR
条件キーでは、リクエスト内の署名付きアテステーションドキュメントの PCR1 値が条件の kms:RecipientAttestation:PCR1
値と一致した場合にのみ、オペレーションを許可します。StringEqualsIgnoreCase
ポリシー演算子を使用して、PCR 値の大文字と小文字を区別しない比較を要求します。
リクエストにアテステーションドキュメントが含まれない場合は、この条件が満たされないため、アクセス許可は拒否されます。
{ "Sid" : "Enable enclave data processing", "Effect" : "Allow", "Principal" : { "AWS" : "arn:aws:iam::111122223333:role/data-processing" }, "Action": "kms:Decrypt", "Resource" : "*", "Condition": { "StringEqualsIgnoreCase": { "kms:RecipientAttestation:PCR1": "0x1de4f2dcf774f6e3b679f62e5f120065b2e408dcea327bd1c9dddaea6664e7af7935581474844767453082c6f1586116376cede396a30a39a611b9aad7966c87" } } }
Nitro Enclaves に対するリクエストの監視
AWS CloudTrail ログを使用して、 AWS Nitro Enclave の Decrypt 、GenerateDataKey、GenerateDataKeyPair、および GenerateRandomオペレーションをモニタリングできます。これらのログエントリの additionalEventData
フィールドには、リクエスト内のアテステーションドキュメントからのモジュール ID (attestationDocumentModuleId
)、イメージダイジェスト (attestationDocumentEnclaveImageDigest
)、およびプラットフォーム設定登録 (PCR) を含む recipient
フィールドがあります。これらのフィールドは、リクエストの Recipient
パラメータが AWS Nitro Enclave からの署名付きアテステーションドキュメントを指定している場合にのみ含まれます。
モジュール ID は Nitro Enclave のエンクレーブ ID です。イメージダイジェストは、エンクレーブイメージの SHA384 ハッシュです。キーポリシーと IAM ポリシーの条件でイメージダイジェストおよび PCR 値を使用できます。PCR の詳細については、『AWS Nitro Enclaves ユーザーガイド』の「エンクレーブの測定値の入手方法」を参照してください。
このセクションでは、 に対するサポートされている Nitro Enclave リクエストの CloudTrail ログエントリの例を示しますAWS KMS。
Decrypt (エンクレーブ用)
次の例は、AWS Nitro Enclave の Decrypt オペレーションの AWS CloudTrail ログエントリを示しています。
{ "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::111122223333:user/Alice", "accountId": "111122223333", "accessKeyId": "EXAMPLE_KEY_ID", "userName": "Alice" }, "eventTime": "2020-07-27T22:58:24Z", "eventSource": "kms.amazonaws.com", "eventName": "Decrypt", "awsRegion": "us-west-2", "sourceIPAddress": "192.0.2.0", "userAgent": "AWS Internal", "requestParameters": { "encryptionAlgorithm": "SYMMETRIC_DEFAULT", "keyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" }, "responseElements": null, "additionalEventData": { "recipient": { "attestationDocumentModuleId": "i-123456789abcde123-enc123456789abcde12", "attestationDocumentEnclaveImageDigest": "<AttestationDocument.PCR0>", "attestationDocumentEnclavePCR1": "<AttestationDocument.PCR1>", "attestationDocumentEnclavePCR2": "<AttestationDocument.PCR2>", "attestationDocumentEnclavePCR3": "<AttestationDocument.PCR3>", "attestationDocumentEnclavePCR4": "<AttestationDocument.PCR4>", "attestationDocumentEnclavePCR8": "<AttestationDocument.PCR8>" } }, "requestID": "b4a65126-30d5-4b28-98b9-9153da559963", "eventID": "e5a2f202-ba1a-467c-b4ba-f729d45ae521", "readOnly": true, "resources": [ { "accountId": "111122223333", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" } ], "eventType": "AwsApiCall", "recipientAccountId": "111122223333" }
GenerateDataKey (エンクレーブの場合)
次の例は、 AWS Nitro Enclave の GenerateDataKeyオペレーションの AWS CloudTrailログエントリを示しています。
{ "eventVersion": "1.02", "userIdentity": { "type": "IAMUser", "principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::111122223333:user/Alice", "accountId": "111122223333", "accessKeyId": "EXAMPLE_KEY_ID", "userName": "Alice" }, "eventTime": "2014-11-04T00:52:40Z", "eventSource": "kms.amazonaws.com", "eventName": "GenerateDataKey", "awsRegion": "us-east-1", "sourceIPAddress": "192.0.2.0", "userAgent": "AWS Internal", "requestParameters": { "keyId": "1234abcd-12ab-34cd-56ef-1234567890ab", "numberOfBytes": 32 }, "responseElements": null, "additionalEventData": { "recipient": { "attestationDocumentModuleId": "i-123456789abcde123-enc123456789abcde12", "attestationDocumentEnclaveImageDigest": "<AttestationDocument.PCR0>", "attestationDocumentEnclavePCR1": "<AttestationDocument.PCR1>", "attestationDocumentEnclavePCR2": "<AttestationDocument.PCR2>", "attestationDocumentEnclavePCR3": "<AttestationDocument.PCR3>", "attestationDocumentEnclavePCR4": "<AttestationDocument.PCR4>", "attestationDocumentEnclavePCR8": "<AttestationDocument.PCR8>" } }, "requestID": "e0eb83e3-63bc-11e4-bc2b-4198b6150d5c", "eventID": "a9dea4f9-8395-46c0-942c-f509c02c2b71", "readOnly": true, "resources": [{ "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "accountId": "111122223333" }], "eventType": "AwsApiCall", "recipientAccountId": "111122223333" }
GenerateDataKeyPair (エンクレーブの場合)
次の例は、 AWS Nitro Enclave の GenerateDataKeyPairオペレーションの AWS CloudTrailログエントリを示しています。
{ "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::111122223333:user/Alice", "accountId": "111122223333", "accessKeyId": "EXAMPLE_KEY_ID", "userName": "Alice" }, "eventTime": "2020-07-27T18:57:57Z", "eventSource": "kms.amazonaws.com", "eventName": "GenerateDataKeyPair", "awsRegion": "us-west-2", "sourceIPAddress": "192.0.2.0", "userAgent": "AWS Internal", "requestParameters": { "keyPairSpec": "RSA_3072", "encryptionContext": { "Project": "Alpha" }, "keyId": "1234abcd-12ab-34cd-56ef-1234567890ab" }, "responseElements": null, "additionalEventData": { "recipient": { "attestationDocumentModuleId": "i-123456789abcde123-enc123456789abcde12", "attestationDocumentEnclaveImageDigest": "<AttestationDocument.PCR0>", "attestationDocumentEnclavePCR1": "<AttestationDocument.PCR1>", "attestationDocumentEnclavePCR2": "<AttestationDocument.PCR2>", "attestationDocumentEnclavePCR3": "<AttestationDocument.PCR3>", "attestationDocumentEnclavePCR4": "<AttestationDocument.PCR4>", "attestationDocumentEnclavePCR8": "<AttestationDocument.PCR8>" } }, "requestID": "52fb127b-0fe5-42bb-8e5e-f560febde6b0", "eventID": "9b6bd6d2-529d-4890-a949-593b13800ad7", "readOnly": true, "resources": [ { "accountId": "111122223333", "type": "AWS::KMS::Key", "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" } ], "eventType": "AwsApiCall", "recipientAccountId": "111122223333" }
GenerateRandom (エンクレーブの場合)
次の例は、 AWS Nitro Enclave の GenerateRandomオペレーションの AWS CloudTrailログエントリを示しています。
{ "eventVersion": "1.02", "userIdentity": { "type": "IAMUser", "principalId": "EX_PRINCIPAL_ID", "arn": "arn:aws:iam::111122223333:user/Alice", "accountId": "111122223333", "accessKeyId": "EXAMPLE_KEY_ID", "userName": "Alice" }, "eventTime": "2014-11-04T00:52:37Z", "eventSource": "kms.amazonaws.com", "eventName": "GenerateRandom", "awsRegion": "us-east-1", "sourceIPAddress": "192.0.2.0", "userAgent": "AWS Internal", "requestParameters": null, "responseElements": null, "additionalEventData": { "recipient": { "attestationDocumentModuleId": "i-123456789abcde123-enc123456789abcde12", "attestationDocumentEnclaveImageDigest": "<AttestationDocument.PCR0>", "attestationDocumentEnclavePCR1": "<AttestationDocument.PCR1>", "attestationDocumentEnclavePCR2": "<AttestationDocument.PCR2>", "attestationDocumentEnclavePCR3": "<AttestationDocument.PCR3>", "attestationDocumentEnclavePCR4": "<AttestationDocument.PCR4>", "attestationDocumentEnclavePCR8": "<AttestationDocument.PCR8>" } }, "requestID": "df1e3de6-63bc-11e4-bc2b-4198b6150d5c", "eventID": "239cb9f7-ae05-4c94-9221-6ea30eef0442", "readOnly": true, "resources": [], "eventType": "AwsApiCall", "recipientAccountId": "111122223333" }