AWS Nitro Enclaves が AWS KMS を使用する方法 - AWS Key Management Service

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

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 には、リクエスト内の署名付きアテステーションドキュメントの内容に基づいてGenerateDataKeyPairDecryptGenerateDataKey、、および 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 オペレーション ポリシータイプ

kms:RecipientAttestation:ImageSha384

文字列

単一値

Decrypt

GenerateDataKey

GenerateDataKeyPair

GenerateRandom

キーポリシーと IAM ポリシー

kms:RecipientAttestation:ImageSha384 条件キーは、リクエストの署名付きアテステーションドキュメントからのイメージダイジェストが条件キーの値と一致する場合、KMS キーを使用して DecryptGenerateDataKeyGenerateDataKeyPair、および 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 オペレーション ポリシータイプ

kms:RecipientAttestation:PCR<PCR_ID>

文字列

単一値

Decrypt

GenerateDataKey

GenerateDataKeyPair

GenerateRandom

キーポリシーと IAM ポリシー

kms:RecipientAttestation:PCR<PCR_ID> 条件キーは、リクエスト内の署名付きアテステーションドキュメントからのプラットフォーム設定登録 (PCR) が条件キーの PCR と一致する場合にのみ、KMS を使用して DecryptGenerateDataKeyGenerateDataKeyPair、および GenerateRandom へのアクセスを制御します。この条件キーは、リクエストの Recipient パラメータが AWS Nitro Enclave からの署名付きアテステーションドキュメントを指定している場合にのみ有効です。

この値は、Nitro Enclaves AWS KMSの へのリクエストを表すCloudTrailイベントにも含まれます。

注記

この条件キーは、IAM コンソールまたは IAM サービス認証リファレンスに表示されない場合でも、キーポリシーステートメントおよび IAM ポリシーステートメントで有効です。

PCR 値を指定するには、次の形式を使用します。PCR ID を条件キー名に連結します。PCR 値は、最大 96 バイトの小文字の 16 進文字列である必要があります。

"kms:RecipientAttestation:PCRPCR_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 の DecryptGenerateDataKeyGenerateDataKeyPair、および 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" }