Come AWS Nitro Enclaves usa 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 AWS Nitro Enclaves usa AWS KMS

AWS KMS supporta l'attestazione crittografica per enclavi Nitro AWS. Le applicazioni che supportano enclavi Nitro AWS richiamano le seguenti operazioni crittografiche AWS KMS con un documento di attestazione firmato per l'enclave. Queste API AWS KMS 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.

Operazione AWS KMS Risposta standard Risposta per enclavi Nitro AWS
Decrypt Restituisce dati in testo normale Restituisce i dati di testo normale crittografati dalla chiave pubblica dal 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 chiavi di condizione della policy che puoi utilizzare per consentire o negare operazioni dell'enclave con una chiave AWS KMS basata sul contenuto del documento di attestazione. Puoi monitorare le richieste a AWS KMS per la tua enclave Nitro anche nei log di AWS CloudTrail.

Come richiamare le API AWS KMS per un'enclave Nitro

Per richiamare le API AWS KMS per un'enclave Nitro, usa il parametro Recipient nella richiesta in modo da 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 parametro Recipient deve specificare un documento di attestazione firmato da un'enclave Nitro AWS. AWS KMS si basa sulla firma digitale per il documento di attestazione dell'enclave per dimostrare che la chiave pubblica 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 per enclavi Nitro AWS, supportato solo in un'enclave Nitro, aggiunge automaticamente il parametro Recipient e i relativi valori a ogni richiesta AWS KMS. Per effettuare richieste di enclavi Nitro negli SDK AWS, devi specificare il parametro Recipient e i relativi valori. Il supporto per l'attestazione crittografica di enclavi Nitro negli SDK AWS è stato introdotto a marzo 2023.

AWS KMS supporta chiavi di condizione della policy che puoi utilizzare per consentire o negare operazioni dell'enclave con una chiave AWS KMS basata sul contenuto del documento di attestazione. Puoi monitorare le richieste a AWS KMS per la tua enclave Nitro anche nei log di AWS CloudTrail.

Per informazioni dettagliate sul Recipient parametro e sul campo di CiphertextForRecipient risposta AWS, consulta Decrypt e GenerateRandomgli argomenti nell'AWS Key Management ServiceAPI Reference GenerateDataKeyGenerateDataKeyPair, nell'SDK AWSNitro 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.

Chiavi di condizione AWS KMS per AWS Nitro Enclaves

Puoi specificare chiavi di condizione nelle policy delle chiavi 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 KMSfornisce chiavi di condizione che limitano le autorizzazioni per Decrypt e le GenerateRandomoperazioni in base al contenuto GenerateDataKeydel GenerateDataKeyPairdocumento di attestazione firmato contenuto nella richiesta. Queste chiavi di condizione funzionano solo quando una richiesta di un'operazione AWS KMS include il parametro Recipient con un documento di attestazione valido proveniente da un'enclave Nitro AWS. Per specificare il parametro Recipient, usa l'SDK per enclavi Nitro di AWS o qualunque SDK di AWS.

Le chiavi di condizione AWS KMS specifiche delle enclavi sono valide nelle dichiarazioni della policy della chiave e nelle dichiarazioni della policy IAM anche se non appaiono nella console IAM o nella Guida di riferimento sull'autorizzazione del servizio IAM.

km: 384 RecipientAttestation ImageSha

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

kms:RecipientAttestation:ImageSha384

Stringa

A valore singolo

Decrypt

GenerateDataKey

GenerateDataKeyPair

GenerateRandom

Policy delle chiavi e policy IAM

La chiave di condizione kms:RecipientAttestation:ImageSha384 controlla l'accesso a Decrypt, GenerateDataKey, GenerateDataKeyPair e GenerateRandom con una chiave KMS quando il digest immagine 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 di condizione è efficace solo quando il parametro Recipient nella richiesta specifica un documento di attestazione firmato per un'enclave Nitro AWS.

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

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 politica chiave consente al data-processing ruolo di utilizzare la chiave KMS per Decrypt,, e 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 di condizione è efficace solo quando il parametro Recipient nella richiesta specifica un documento di attestazione firmato per un'enclave Nitro AWS.

Se la richiesta non include un documento di attestazione valido da un'enclave Nitro AWS, 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:GenerateDataKey", "kms:GenerateDataKeyPair", "kms:GenerateRandom" ], "Resource" : "*", "Condition": { "StringEqualsIgnoreCase": { "kms:RecipientAttestation:ImageSha384": "9fedcba8abcdef7abcdef6abcdef5abcdef4abcdef3abcdef2abcdef1abcdef1abcdef0abcdef1abcdef2abcdef3abcdef4abcdef5abcdef6abcdef7abcdef99" } } }

kms:: PCR RecipientAttestation <PCR_ID>

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

kms:RecipientAttestation:PCR<PCR_ID>

Stringa

A valore singolo

Decrypt

GenerateDataKey

GenerateDataKeyPair

GenerateRandom

Policy delle chiavi e policy IAM

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

Questo valore è incluso anche negli CloudTraileventi che rappresentano le richieste alle enclavi di 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,, 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 sono inclusi solo quando il parametro Recipient nella richiesta specifica un documento di attestazione firmato 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 del log di AWS CloudTrail per un'operazione Decrypt per un'enclave Nitro di 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'AWSenclave 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" }