Come utilizza AWS Nitro Enclaves AWS KMS - AWS Key Management Service

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Come utilizza AWS Nitro Enclaves AWS KMS

AWS KMS supporta l'attestazione crittografica per Nitro Enclaves.AWS Le applicazioni che supportano AWS Nitro Enclaves eseguono le seguenti operazioni AWS KMS crittografiche con un documento di attestazione firmato per l'enclave. Queste AWS KMS API verificano che il documento di attestazione provenga da un'enclave Nitro. Per tale motivo, invece di restituire dati in testo normale nella risposta, queste API eseguono la crittografia del testo normale con la chiave pubblica dal documento di attestazione e restituiscono testo criptato che può essere decrittato solo dalla chiave privata corrispondente nell'enclave.

La tabella seguente illustra le differenze tra la risposta alle richieste di enclavi Nitro e la risposta standard per ogni operazione dell'API.

AWS KMS operazione Risposta standard Risposta per AWS Nitro Enclaves
Decrypt Restituisce dati in testo normale Restituisce i dati di testo normale crittografati dalla chiave pubblica dal documento di attestazione
DeriveSharedSecret Restituisce un segreto condiviso non elaborato Restituisce il segreto condiviso non elaborato crittografato dalla chiave pubblica del documento di attestazione
GenerateDataKey Restituisce una copia in testo normale della chiave dati

(Restituisce anche una copia della chiave dati crittografata da una chiave KMS)

Restituisce una copia della chiave dati crittografata dalla chiave pubblica dal documento di attestazione

(Restituisce anche una copia della chiave dati crittografata da una chiave KMS)

GenerateDataKeyPair Restituisce una copia in testo normale della chiave privata

(Restituisce anche la chiave pubblica e una copia della chiave privata crittografata da una chiave KMS)

Restituisce una copia della chiave privata crittografata dalla chiave pubblica dal documento di attestazione

(Restituisce anche la chiave pubblica e una copia della chiave privata crittografata da una chiave KMS)

GenerateRandom Restituisce una stringa di byte casuali Restituisce la stringa di byte casuali crittografata dalla chiave pubblica dal documento di attestazione

AWS KMS supporta le chiavi relative alle condizioni delle policy che è possibile utilizzare per consentire o negare operazioni di enclave con una AWS KMS chiave basata sul contenuto del documento di attestazione. Puoi anche monitorare le richieste AWS KMS per la tua enclave Nitro nei tuoi registri. AWS CloudTrail

Come chiamare le API per un'enclave AWS KMS Nitro

Per chiamare le AWS KMS API per un'enclave Nitro, utilizza il Recipient parametro nella richiesta per fornire il documento di attestazione firmato per l'enclave e l'algoritmo di crittografia da utilizzare con la chiave pubblica dell'enclave. Quando una richiesta include il parametro Recipient con un documento di attestazione firmato, la risposta include un campo CiphertextForRecipient con il testo criptato crittografato dalla chiave pubblica. Il campo di testo normale è nullo o vuoto.

Il Recipient parametro deve specificare un documento di attestazione firmato da un'enclave Nitro. AWS AWS KMS si affida alla firma digitale del documento di attestazione dell'enclave per dimostrare che la chiave pubblica contenuta nella richiesta proviene da un'enclave valida. Non è possibile fornire il proprio certificato per firmare digitalmente il documento di attestazione.

Per specificare il parametro Recipient, usa l'SDK per enclavi Nitro AWS o qualunque SDK AWS . L'SDK AWS Nitro Enclaves, supportato solo all'interno di un'enclave Nitro, aggiunge automaticamente il parametro e i relativi valori a ogni richiesta. Recipient AWS KMS Per effettuare richieste di enclavi Nitro negli AWS SDK, devi specificare il parametro e i relativi valori. Recipient Il supporto per l'attestazione crittografica di enclavi Nitro negli SDK AWS è stato introdotto a marzo 2023.

AWS KMS supporta le chiavi relative alle condizioni delle policy che è possibile utilizzare per consentire o negare operazioni di enclave con una AWS KMS chiave basata sul contenuto del documento di attestazione. Puoi anche monitorare le richieste AWS KMS per la tua enclave Nitro nei tuoi registri. AWS CloudTrail

Per informazioni dettagliate sul Recipient parametro e sul campo di CiphertextForRecipient risposta AWS, consulta Decrypt,, DeriveSharedSecret, e GenerateRandomgli argomenti nell'AWS Key Management Service API Reference GenerateDataKeyGenerateDataKeyPair, nell'SDK AWS Nitro Enclaves o in qualsiasi SDK. AWS Per informazioni sull'impostazione dei dati e delle chiavi dati per la crittografia, consulta Utilizzo dell'attestazione crittografica con AWS KMS.

AWS KMS chiavi AWS di condizione per Nitro Enclaves

Puoi specificare le chiavi delle condizioni nelle policy chiave e nelle policy IAM che controllano l'accesso alle tue risorse. AWS KMS Le dichiarazioni delle policy che includono una chiave di condizione sono efficaci solo quando sono soddisfatte le relative condizioni.

AWS KMS fornisce chiavi di condizione che limitano le autorizzazioni per Decrypt,, DeriveSharedSecretGenerateDataKeyGenerateDataKeyPair, e GenerateRandomle operazioni in base al contenuto del documento di attestazione firmato contenuto nella richiesta. Queste chiavi di condizione funzionano solo quando una richiesta di AWS KMS operazione include il Recipient parametro con un documento di attestazione valido proveniente da un'enclave Nitro. AWS Per specificare il Recipient parametro, usa AWS Nitro Enclaves SDK o qualsiasi SDK. AWS

Le chiavi delle AWS KMS condizioni specifiche dell'enclave sono valide nelle dichiarazioni politiche chiave e nelle dichiarazioni delle politiche IAM anche se non compaiono nella console IAM o nell'IAM Service Authorization Reference.

km: 384 RecipientAttestation ImageSha

AWS KMS Chiavi di condizione Tipo di condizioni Value type (Tipo di valore) Operazioni API Tipo di policy

kms:RecipientAttestation:ImageSha384

Stringa

A valore singolo

Decrypt

DeriveSharedSecret

GenerateDataKey

GenerateDataKeyPair

GenerateRandom

Policy delle chiavi e policy IAM

La chiave kms:RecipientAttestation:ImageSha384 condizionale controlla l'accesso a DecryptDeriveSharedSecret, GenerateDataKeyGenerateDataKeyPair, e GenerateRandom con una chiave KMS quando l'immagine digest del documento di attestazione firmato nella richiesta corrisponde al valore nella chiave di condizione. Il valore ImageSha384 corrisponde a PCR0 nel documento di attestazione. Questa chiave condizionale è efficace solo quando il Recipient parametro nella richiesta specifica un documento di attestazione firmato per un'enclave Nitro. AWS

Questo valore è incluso anche negli CloudTraileventi per le richieste alle enclavi Nitro. AWS KMS

Nota

Questa chiave di condizione è valida nelle istruzioni delle policy delle chiavi e nelle istruzioni delle policy IAM, anche se non viene visualizzata nella console IAM o nella Documentazione di riferimento dell'autorizzazione del servizio IAM.

Ad esempio, la seguente dichiarazione di policy chiave consente al data-processing ruolo di utilizzare la chiave KMS per Decrypt,,, DeriveSharedSecrete le operazioni. GenerateDataKeyGenerateDataKeyPairGenerateRandom La chiave di condizione kms:RecipientAttestation:ImageSha384 consente le operazioni solo quando il valore del digest immagine (PCR0) del documento di attestazione nella richiesta corrisponde al valore del digest nella condizione. Questa chiave condizionale è efficace solo quando il Recipient parametro nella richiesta specifica un documento di attestazione firmato per un'enclave Nitro. AWS

Se la richiesta non include un documento di attestazione valido proveniente da un'enclave AWS Nitro, l'autorizzazione viene negata perché questa condizione non è soddisfatta.

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

kms: PCR RecipientAttestation <PCR_ID>

AWS KMS Chiavi di condizione Tipo di condizioni Value type (Tipo di valore) Operazioni API Tipo di policy

kms:RecipientAttestation:PCR<PCR_ID>

Stringa

A valore singolo

Decrypt

DeriveSharedSecret

GenerateDataKey

GenerateDataKeyPair

GenerateRandom

Policy delle chiavi e policy IAM

La chiave kms:RecipientAttestation:PCR<PCR_ID> condizionale controlla l'accesso a DecryptDeriveSharedSecret, GenerateDataKeyGenerateDataKeyPair, e GenerateRandom con una chiave KMS solo quando i registri di configurazione della piattaforma (PCR) contenuti nel documento di attestazione firmato nella richiesta corrispondono ai PCR nella chiave condizionale. Questa chiave condizionale è efficace solo quando il Recipient parametro nella richiesta specifica un documento di attestazione firmato da un'enclave Nitro. AWS

Questo valore è incluso anche negli CloudTraileventi che rappresentano le richieste per le enclavi Nitro. AWS KMS

Nota

Questa chiave di condizione è valida nelle istruzioni delle policy delle chiavi e nelle istruzioni delle policy IAM, anche se non viene visualizzata nella console IAM o nella Documentazione di riferimento dell'autorizzazione del servizio IAM.

Per specificare un valore PCR, utilizzare il formato seguente. Concatena l'ID PCR al nome della chiave di condizione. Il valore PCR deve essere una stringa esadecimale minuscola di un massimo di 96 byte.

"kms:RecipientAttestation:PCRPCR_ID": "PCR_value"

Ad esempio, la seguente chiave di condizione specifica un valore particolare per PCR1, che corrisponde all'hash del kernel utilizzato per l'enclave e il processo di bootstrap.

kms:RecipientAttestation:PCR1: "0x1abcdef2abcdef3abcdef4abcdef5abcdef6abcdef7abcdef8abcdef9abcdef8abcdef7abcdef6abcdef5abcdef4abcdef3abcdef2abcdef1abcdef0abcde"

Il seguente esempio di istruzione della policy della chiave consente al ruolo data-processing di utilizzare la chiave KMS per l'operazione Decrypt.

La chiave di condizione kms:RecipientAttestation:PCR in questa istruzione consente l'operazione solo quando il valore PCR1 nel documento di attestazione firmato nella richiesta corrisponde al valore kms:RecipientAttestation:PCR1 nella condizione. Usa l'operatore di policy StringEqualsIgnoreCase per richiedere un confronto senza distinzione tra maiuscole e minuscole dei valori PCR.

Se la richiesta non include un documento di attestazione, l'autorizzazione viene negata perché questa condizione non è soddisfatta.

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

Richieste di monitoraggio per enclavi Nitro

Puoi usare i tuoi AWS CloudTrail log per monitorare Decrypt,, DeriveSharedSecret, GenerateDataKeye GenerateRandomle operazioni per un'enclave GenerateDataKeyPairNitro. AWS In queste voci di log, il campo additionalEventData contiene un campo recipient con l'ID del modulo (attestationDocumentModuleId), il digest dell'immagine (attestationDocumentEnclaveImageDigest) e i registri di configurazione della piattaforma (PCR) dal documento di attestazione nella richiesta. Questi campi vengono inclusi solo quando il Recipient parametro nella richiesta specifica un documento di attestazione firmato proveniente da un'enclave Nitro. AWS

L'ID del modulo è l'ID enclave dell'enclave Nitro. Il digest dell'immagine è l'hash SHA384 dell'immagine dell'enclave. Puoi possibile utilizzare il digest dell'immagine e i valori PCR in condizioni per le policy delle chiavi e le policy IAM. Per informazioni sui PCR, consulta Dove reperire le misurazioni di un'enclave nella Guida per l'utente di enclavi Nitro di AWS .

Questa sezione mostra un esempio di voce di CloudTrail registro per ciascuna delle richieste di enclave Nitro supportate a. AWS KMS

Decrypt (per un'enclave)

L'esempio seguente mostra una voce di AWS CloudTrail registro di un'operazione Decrypt per un'enclave Nitro. AWS

{ "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 (per un'enclave)

L'esempio seguente mostra una voce di AWS CloudTrail registro di un'GenerateDataKeyoperazione per un'enclave 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 (per un'enclave)

L'esempio seguente mostra una voce di AWS CloudTrail registro di un'GenerateDataKeyPairoperazione per un' AWS enclave 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 (per un'enclave)

L'esempio seguente mostra una voce di AWS CloudTrail registro di un'GenerateRandomoperazione per un'enclave 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" }