Bagaimana Nitro Enclaves AWS menggunakan AWS KMS - AWS Key Management Service

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Bagaimana Nitro Enclaves AWS menggunakan AWS KMS

AWS KMSmendukung pengesahan kriptografi untuk AWS Nitro Enclave. Aplikasi yang mendukung AWS Nitro Enclave memanggil operasi AWS KMS kriptografi berikut dengan dokumen pengesahan yang ditandatangani untuk enclave. AWS KMSAPI ini memverifikasi bahwa dokumen pengesahan berasal dari kantong Nitro. Kemudian, alih-alih mengembalikan data teks biasa dalam respons, API ini mengenkripsi plaintext dengan kunci publik dari dokumen pengesahan dan mengembalikan ciphertext yang hanya dapat didekripsi oleh kunci pribadi yang sesuai di enklave.

Tabel berikut menunjukkan bagaimana respons terhadap permintaan enclave Nitro berbeda dari respons standar untuk setiap operasi API.

Operasi AWS KMS Respon standar Tanggapan untuk AWS Nitro Enclave
Decrypt Mengembalikan data plaintext Mengembalikan data plaintext yang dienkripsi oleh kunci publik dari dokumen pengesahan
GenerateDataKey Mengembalikan salinan plaintext dari kunci data

(Juga mengembalikan salinan kunci data yang dienkripsi oleh kunci KMS)

Mengembalikan salinan kunci data yang dienkripsi oleh kunci publik dari dokumen pengesahan

(Juga mengembalikan salinan kunci data yang dienkripsi oleh kunci KMS)

GenerateDataKeyPair Mengembalikan salinan plaintext dari kunci pribadi

(Juga mengembalikan kunci publik dan salinan kunci pribadi yang dienkripsi oleh kunci KMS)

Mengembalikan salinan kunci pribadi yang dienkripsi oleh kunci publik dari dokumen pengesahan

(Juga mengembalikan kunci publik dan salinan kunci pribadi yang dienkripsi oleh kunci KMS)

GenerateRandom Mengembalikan string byte acak Mengembalikan string byte acak dienkripsi oleh kunci publik dari dokumen pengesahan

AWS KMSmendukung kunci kondisi kebijakan yang dapat Anda gunakan untuk mengizinkan atau menolak operasi enclave dengan AWS KMS kunci berdasarkan konten dokumen pengesahan. Anda juga dapat memantau permintaan AWS KMS untuk enklave Nitro Anda di log Anda. AWS CloudTrail

Cara memanggil AWS KMS API untuk enclave Nitro

Untuk memanggil AWS KMS API untuk enclave Nitro, gunakan Recipient parameter dalam permintaan untuk menyediakan dokumen pengesahan yang ditandatangani untuk enclave dan algoritma enkripsi untuk digunakan dengan kunci publik enclave. Ketika permintaan menyertakan Recipient parameter dengan dokumen pengesahan yang ditandatangani, respons menyertakan CiphertextForRecipient bidang dengan ciphertext yang dienkripsi oleh kunci publik. Bidang plaintext adalah nol atau kosong.

RecipientParameter harus menentukan dokumen pengesahan yang ditandatangani dari enklave AWS Nitro. AWS KMSbergantung pada tanda tangan digital untuk dokumen pengesahan enklave untuk membuktikan bahwa kunci publik dalam permintaan berasal dari kantong yang valid. Anda tidak dapat menyediakan sertifikat Anda sendiri untuk menandatangani dokumen pengesahan secara digital.

Untuk menentukan Recipient parameter, gunakan AWSNitro Enclave SDK atau SDK apa pun. AWS AWSNitro Enclave SDK, yang didukung hanya dalam enklave Nitro, secara otomatis menambahkan Recipient parameter dan nilainya ke setiap permintaan. AWS KMS Untuk membuat permintaan enklaf Nitro di AWS SDK, Anda harus menentukan Recipient parameter dan nilainya. Support untuk pengesahan kriptografi enclave Nitro di AWS SDK diperkenalkan pada Maret 2023.

AWS KMSmendukung kunci kondisi kebijakan yang dapat Anda gunakan untuk mengizinkan atau menolak operasi enclave dengan AWS KMS kunci berdasarkan konten dokumen pengesahan. Anda juga dapat memantau permintaan AWS KMS untuk enklave Nitro Anda di log Anda. AWS CloudTrail

Untuk informasi terperinci tentang Recipient parameter dan bidang CiphertextForRecipient respons AWS, lihat Dekripsi,, dan GenerateRandomtopik di Referensi AWS Key Management Service API GenerateDataKeyGenerateDataKeyPair, AWSNitro Enclave SDK, atau SDK apa pun. AWS Untuk informasi tentang cara menyiapkan data dan kunci data untuk enkripsi, lihat Menggunakan pengesahan kriptografi dengan AWS KMS.

Kunci syarat AWS KMS untuk AWS Nitro Enclaves

Anda dapat menentukan kunci kondisi dalam kebijakan utama dan kebijakan IAM yang mengontrol akses ke AWS KMS sumber daya Anda. Pernyataan kebijakan yang mencakup kunci kondisi hanya efektif jika kondisinya terpenuhi.

AWS KMSmenyediakan kunci kondisi yang membatasi izin untuk Dekripsi,, GenerateDataKeyGenerateDataKeyPair, dan GenerateRandomoperasi berdasarkan isi dokumen pengesahan yang ditandatangani dalam permintaan. Kunci kondisi ini yang hanya berfungsi ketika permintaan untuk AWS KMS operasi menyertakan Recipient parameter dengan dokumen pengesahan yang valid dari enklave AWS Nitro. Untuk menentukan Recipient parameter, gunakan AWSNitro Enclave SDK atau SDK apa pun. AWS

Kunci AWS KMS kondisi khusus enclave valid dalam pernyataan kebijakan utama dan pernyataan kebijakan IAM meskipun tidak muncul di konsol IAM atau Referensi Otorisasi Layanan IAM.

km:RecipientAttestation: 384 ImageSha

Kunci Syarat AWS KMS Jenis Syarat Jenis nilai Operasi API Jenis Kebijakan

kms:RecipientAttestation:ImageSha384

String

Bernilai tunggal

Decrypt

GenerateDataKey

GenerateDataKeyPair

GenerateRandom

Kebijakan kunci dan kebijakan IAM

Kunci kms:RecipientAttestation:ImageSha384 kondisi mengontrol akses keDecrypt,GenerateDataKey,GenerateDataKeyPair, dan GenerateRandom dengan kunci KMS saat gambar digest dari dokumen pengesahan yang ditandatangani dalam permintaan cocok dengan nilai dalam kunci kondisi. ImageSha384Nilai sesuai dengan PCR0 dalam dokumen pengesahan. Kunci kondisi ini hanya efektif jika Recipient parameter dalam permintaan menentukan dokumen pengesahan yang ditandatangani untuk enclave Nitro. AWS

Nilai ini juga termasuk dalam CloudTrailacara untuk permintaan ke AWS KMS kantong Nitro.

catatan

Kunci kondisi ini valid dalam pernyataan kebijakan utama dan pernyataan kebijakan IAM meskipun tidak muncul di konsol IAM atau Referensi Otorisasi Layanan IAM.

Misalnya, pernyataan kebijakan kunci berikut memungkinkan data-processing peran untuk menggunakan kunci KMS untuk Dekripsi,, GenerateDataKeyGenerateDataKeyPair, dan operasi. GenerateRandom Kunci kms:RecipientAttestation:ImageSha384 kondisi memungkinkan operasi hanya jika nilai intisari gambar (PCR0) dari dokumen pengesahan dalam permintaan cocok dengan nilai intisari gambar dalam kondisi. Kunci kondisi ini hanya efektif jika Recipient parameter dalam permintaan menentukan dokumen pengesahan yang ditandatangani untuk enclave Nitro. AWS

Jika permintaan tidak menyertakan dokumen pengesahan yang valid dari kantong AWS Nitro, izin ditolak karena kondisi ini tidak terpenuhi.

{ "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" } } }

km ::PCR RecipientAttestation <PCR_ID>

Kunci Syarat AWS KMS Jenis Syarat Jenis nilai Operasi API Jenis Kebijakan

kms:RecipientAttestation:PCR<PCR_ID>

String

Bernilai tunggal

Decrypt

GenerateDataKey

GenerateDataKeyPair

GenerateRandom

Kebijakan kunci dan kebijakan IAM

Kunci kms:RecipientAttestation:PCR<PCR_ID> kondisi mengontrol akses keDecrypt,, GenerateDataKeyGenerateDataKeyPair, dan GenerateRandom dengan kunci KMS hanya jika konfigurasi platform register (PCR) dari dokumen pengesahan yang ditandatangani dalam permintaan cocok dengan PCR dalam kunci kondisi. Kunci kondisi ini hanya efektif jika Recipient parameter dalam permintaan menentukan dokumen pengesahan yang ditandatangani dari enklave Nitro. AWS

Nilai ini juga termasuk dalam CloudTrailperistiwa yang mewakili permintaan AWS KMS untuk kantong Nitro.

catatan

Kunci kondisi ini valid dalam pernyataan kebijakan utama dan pernyataan kebijakan IAM meskipun tidak muncul di konsol IAM atau Referensi Otorisasi Layanan IAM.

Untuk menentukan nilai PCR, gunakan format berikut. Gabungkan ID PCR ke nama kunci syarat. Nilai PCR harus berupa string heksadesimal huruf kecil hingga 96 byte.

"kms:RecipientAttestation:PCRPCR_ID": "PCR_value"

Misalnya, kunci kondisi berikut menentukan nilai tertentu untuk PCR1, yang sesuai dengan hash kernel yang digunakan untuk enclave dan proses bootstrap.

kms:RecipientAttestation:PCR1: "0x1abcdef2abcdef3abcdef4abcdef5abcdef6abcdef7abcdef8abcdef9abcdef8abcdef7abcdef6abcdef5abcdef4abcdef3abcdef2abcdef1abcdef0abcde"

Contoh pernyataan kebijakan kunci berikut memungkinkan data-processing peran untuk menggunakan kunci KMS untuk operasi Dekripsi.

Kunci syarat kms:RecipientAttestation:PCR dalam pernyataan ini memungkinkan operasi hanya jika nilai PCR1 dalam dokumen pengesahan yang ditandatangani dalam permintaan cocok dengan nilai kms:RecipientAttestation:PCR1 dalam syarat. Gunakan operator kebijakan StringEqualsIgnoreCase untuk mewajibkan perbandingan nilai PCR yang tidak peka huruf besar/kecil.

Jika permintaan tidak menyertakan dokumen pengesahan, izin ditolak karena kondisi ini tidak terpenuhi.

{ "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" } } }

Memantau permintaan untuk kantong Nitro

Anda dapat menggunakan AWS CloudTrail log Anda untuk memantau Dekripsi,, GenerateDataKeyGenerateDataKeyPair, dan GenerateRandomoperasi untuk enklave AWS Nitro. Dalam entri log ini, additionalEventData bidang memiliki recipient bidang dengan ID modul (attestationDocumentModuleId), image digest (attestationDocumentEnclaveImageDigest), dan register konfigurasi platform (PCR) dari dokumen pengesahan dalam permintaan. Bidang ini disertakan hanya jika Recipient parameter dalam permintaan menentukan dokumen pengesahan yang ditandatangani dari enklave Nitro. AWS

ID modul adalah ID enclave dari enclave Nitro. Intisari gambar adalah hash SHA384 dari gambar enclave. Anda dapat menggunakan intisari gambar dan nilai PCR dalam kondisi untuk kebijakan utama dan kebijakan IAM. Untuk informasi tentang PCR, lihat Tempat mendapatkan pengukuran enclave di Panduan Pengguna AWSNitro Enclave.

Bagian ini menunjukkan contoh entri CloudTrail log untuk setiap permintaan enclave Nitro yang didukung. AWS KMS

Dekripsi (untuk kantong)

Contoh berikut menunjukkan entri AWS CloudTrail log operasi Dekripsi untuk enclave AWS Nitro.

{ "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 (untuk kantong)

Contoh berikut menunjukkan entri AWS CloudTrail log GenerateDataKeyoperasi untuk kantong AWS Nitro.

{ "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 (untuk kantong)

Contoh berikut menunjukkan entri AWS CloudTrail log GenerateDataKeyPairoperasi untuk kantong AWS Nitro.

{ "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 (untuk kantong)

Contoh berikut menunjukkan entri AWS CloudTrail log GenerateRandomoperasi untuk kantong AWS Nitro.

{ "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" }