AWS 硝基飛地如何使用 AWS KMS - AWS Key Management Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

AWS 硝基飛地如何使用 AWS KMS

AWS KMS 支援硝基飛地的AWS 密碼編譯驗證支援 AWS Nitro Enclaves 的應用程式會使用 Enclave 的已簽署證明 AWS KMS 文件來呼叫下列密碼編譯作業。這些 AWS KMS API 會驗證證明文件來自硝基飛地。然後,在回應時,這些 API 不會傳回純文字資料,而是利用證明文件的公有金鑰來加密純文字,並傳回僅能透過 enclave 的相應私有金鑰進行解密的密文。

下表顯示對 Nitro enclave 請求的回應與每個 API 操作的標準回應有何不同。

AWS KMS 操作 標準回應 對 AWS 硝基飛地的回應
Decrypt 傳回純文字資料 傳回純文字資料 (經來自證明文件的公有金鑰加密)
DeriveSharedSecret 返回原始共享秘密 返回由證明文檔中的公鑰加密的原始共享密鑰
GenerateDataKey 傳回資料金鑰的純文字複本

(也會傳回 KMS 金鑰加密的資料金鑰複本)

傳回資料金鑰複本 (經來自證明文件的公有金鑰加密)

(也會傳回 KMS 金鑰加密的資料金鑰複本)

GenerateDataKeyPair 傳回私有金鑰的純文字副本

(也會傳回公有金鑰以及由 KMS 金鑰加密的私有金鑰副本)

傳回私有金鑰複本 (經來自證明文件的公有金鑰加密)

(也會傳回公有金鑰以及由 KMS 金鑰加密的私有金鑰副本)

GenerateRandom 傳回隨機位元組字串 傳回隨機位元組字串 (經來自證明文件的公有金鑰加密)

AWS KMS 支援原則條件金鑰,您可以使用這些金鑰根據驗證文件的內容來允許或拒絕透過金 AWS KMS 鑰執行 Enclave 作業。您還可以監視日誌中 AWS KMS 的硝基飛地的請求。 AWS CloudTrail

如何調 AWS KMS 用硝基飛地的 API

若要呼叫 Nitro Enclave 的 AWS KMS API,請使用要求中的Recipient參數為 Enclave 提供已簽署的證明文件,並使用加密演算法與 Enclave 的公開金鑰搭配使用。當請求包含已簽署證明文件的 Recipient 參數時,回應會包含 CiphertextForRecipient 欄位,以及由公有金鑰加密的密文。純文字欄位為空值或空白。

Recipient參數必須從 AWS Nitro 飛地指定已簽署的證明文件。 AWS KMS 依賴 Enclave 驗證文件的數位簽章,以證明要求中的公開金鑰來自有效的保護區。您無法提供自己的憑證來數位簽署證明文件。

若要指定 Recipient 參數,請採用 AWS Nitro Enclaves SDK 或任何 AWS SDK。 AWS 硝基飛地 SDK 僅在硝基飛地中受支援,會自動將Recipient參數及其值新增至每個要求。 AWS KMS 要在 AWS SDK 中對硝基飛地的請求,您必須指定Recipient參數及其值。於 2023 年 3 月針對 AWS SDK 推出 Nitro enclave 密碼編譯證明支援。

AWS KMS 支援原則條件金鑰,您可以使用這些金鑰根據驗證文件的內容來允許或拒絕透過金 AWS KMS 鑰執行 Enclave 作業。您還可以監視日誌中 AWS KMS 的硝基飛地的請求。 AWS CloudTrail

如需有關Recipient參數和 AWS CiphertextForRecipient 回應欄位的詳細資訊,請參閱 AWS Key Management Service API 參考DeriveSharedSecretGenerateDataKeyGenerateDataKeyPairAWS Nitro Enclaves 開發套件或任何開發套件中的解密、、、和GenerateRandom主題。 AWS 如需設定加密之資料和資料金鑰的相關資訊,請參閱將 AWS KMS與密碼編譯證明搭配使用

AWS KMSAWS 硝基飛地的條件鍵

您可以在金鑰政策和 IAM 政策中指定條件金鑰,以控制對 AWS KMS 資源的存取。包含條件金鑰的政策陳述式僅在符合條件時才有效。

AWS KMS 提供條件金鑰,DeriveSharedSecret以根據請求中已簽署的驗證文件的內容 GenerateDataKeyPair,限制解密、、和GenerateRandom作業的權限。GenerateDataKey這些條件索引鍵只有在作 AWS KMS 業要求包含來自 AWS Nitro 飛地的有效證明文件的Recipient參數時才有作用。若要指定Recipient參數,請使用AWS 硝基隔離區 SDK 或任何 SDK。 AWS

保留區特定的 AWS KMS 條件金鑰在金鑰政策陳述式和 IAM 政策陳述式中是有效的,即使這些金鑰未出現在 IAM 主控台或 IAM 服務授權參考中也是如此。

公里RecipientAttestationImageSha:

AWS KMS 條件鍵 條件類型 值類型 API 操作 政策類型

kms:RecipientAttestation:ImageSha384

字串

單一值

Decrypt

DeriveSharedSecret

GenerateDataKey

GenerateDataKeyPair

GenerateRandom

金鑰政策和 IAM 政策

當請求中已簽署驗證文件的影像摘要Decrypt符合kms:RecipientAttestation:ImageSha384條件索引鍵中的值時GenerateDataKeyPair,條件金鑰可控制對、、和使GenerateRandom用 KMS 金鑰的存取。DeriveSharedSecret GenerateDataKeyImageSha384 值對應證明文件的 PCR0。只有當請求中的Recipient參數指定了 AWS Nitro Enclave 的已簽署證明文件時,此條件金鑰才有效。

此值也包含在要求 Nitro 飛地 AWS KMS 的CloudTrail事件中。

注意

此條件金鑰在金鑰政策陳述式和 IAM 政策陳述式中有效,即使它未出現在 IAM 主控台或 IAM 服務授權參考

例如,下列金鑰原則陳述式允許data-processing角色使用 KMS 金鑰進行解密DeriveSharedSecretGenerateDataKeyGenerateDataKeyPair、和GenerateRandom作業。僅當請求中證明文件的影像摘要值 (PCR0) 符合條件的影像摘要值時,kms:RecipientAttestation:ImageSha384 條件金鑰才會允許操作。只有當請求中的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:DeriveSharedSecret", "kms:GenerateDataKey", "kms:GenerateDataKeyPair", "kms:GenerateRandom" ], "Resource" : "*", "Condition": { "StringEqualsIgnoreCase": { "kms:RecipientAttestation:ImageSha384": "9fedcba8abcdef7abcdef6abcdef5abcdef4abcdef3abcdef2abcdef1abcdef1abcdef0abcdef1abcdef2abcdef3abcdef4abcdef5abcdef6abcdef7abcdef99" } } }

公里:: 聚氯乙烯 RecipientAttestation <PCR_ID>

AWS KMS 條件鍵 條件類型 值類型 API 操作 政策類型

kms:RecipientAttestation:PCR<PCR_ID>

字串

單一值

Decrypt

DeriveSharedSecret

GenerateDataKey

GenerateDataKeyPair

GenerateRandom

金鑰政策和 IAM 政策

GenerateRandom有當要求中已簽署的證明文件中的平台組態註冊 (PCR) 符合kms:RecipientAttestation:PCR<PCR_ID>條件金鑰中的 PCR 時GenerateDataKeyPair,條件金鑰才會控制對、、和使用 KMS 金鑰的存取。Decrypt DeriveSharedSecret GenerateDataKey只有當請求中的Recipient參數指定來自 AWS Nitro 飛地的已簽署證明文件時,此條件金鑰才有效。

此值也包含在代表 AWS KMS 對 Nitro 飛地的請求的CloudTrail事件中。

注意

此條件金鑰在金鑰政策陳述式和 IAM 政策陳述式中有效,即使它未出現在 IAM 主控台或 IAM 服務授權參考

若要指定 PCR 值,請使用以下格式。將 PCR ID 串連到條件索引鍵名稱。PCR 值必須是最多 96 個位元組的小寫十六進位字串。

"kms:RecipientAttestation:PCRPCR_ID": "PCR_value"

例如,下列條件金鑰指定 PCR1 的特定值,對應於用於 enclave 與啟動程序處理的核心雜湊。

kms:RecipientAttestation:PCR1: "0x1abcdef2abcdef3abcdef4abcdef5abcdef6abcdef7abcdef8abcdef9abcdef8abcdef7abcdef6abcdef5abcdef4abcdef3abcdef2abcdef1abcdef0abcde"

下列範例金鑰政策陳述式允許 data-processing 角色利用 KMS 金鑰進行 Decrypt 操作。

僅當請求中已簽署證明文件中的 PCR1 值符合條件中的 kms:RecipientAttestation:PCR1 值時,本陳述式中的 kms:RecipientAttestation:PCR 條件索引鍵才會允許操作。使用 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 飛地的解密DeriveSharedSecretGenerateDataKeyGenerateDataKeyPair、、、和GenerateRandom作業。在這些日誌項目,additionalEventData 欄位具 recipient 欄位,其中包含請求證明文件的模組 ID (attestationDocumentModuleId)、影像摘要 (attestationDocumentEnclaveImageDigest),以及平台組態註冊 (PCR)。只有當請求中的Recipient參數指定來自 AWS Nitro Enclave 的已簽署證明文件時,才會包含這些欄位。

模組 ID 是 Nitro enclave 的 enclave ID。影像摘要是 enclave 影像的 SHA384 雜湊。您可在金鑰政策與 IAM 政策的條件運用影像摘要及 PCR 值。如需 PCR 的相關資訊,請參閱《AWS Nitro Enclaves使用者指南》Where to get an enclave's measurements

本節顯示每個受支援的 Nitro enclave 要求的範例 CloudTrail 記錄項目。 AWS KMS

Decrypt (針對 enclave)

下列範例顯示 AWS Nitro Enclave 之解密作業的 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 硝基飛地之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 硝基飛地之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 硝基飛地之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" }