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.
Argomenti
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 |
---|---|---|---|---|
|
Stringa |
A valore singolo |
|
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 |
---|---|---|---|---|
|
Stringa |
A valore singolo |
|
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:PCR
PCR_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" }