Comment AWS Nitro Enclaves utilise AWS KMS - AWS Key Management Service

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Comment AWS Nitro Enclaves utilise AWS KMS

AWS KMS prend en charge l'attestation cryptographique pour les enclaves Nitro AWS. Les applications qui prennent en charge les enclaves Nitro AWS exécutent les opérations AWS KMS cryptographiques suivantes avec un document d'attestation signé pour l'enclave. Ces API AWS KMS vérifient que le document d'attestation provient d'une enclave Nitro. Ensuite, au lieu de renvoyer des données en texte brut dans la réponse, ces API chiffrent le texte brut avec la clé publique du document d'attestation et renvoient un texte chiffré uniquement par la clé privée correspondante dans l'enclave.

Le tableau suivant montre en quoi la réponse aux demandes d'enclave Nitro diffère de la réponse standard pour chaque opération d'API.

Opération AWS KMS Réponse normale Réponse pour les enclaves Nitro AWS
Decrypt Renvoie des données en texte brut Renvoie les données en texte brut par la clé publique à partir du document d'attestation
GenerateDataKey Renvoie une copie en texte brut de la clé de données

(Renvoie également une copie de la clé de données avec une clé KMS)

Renvoie une copie de la clé de données chiffrées par la clé publique à partir du document d'attestation

(Renvoie également une copie de la clé de données avec une clé KMS)

GenerateDataKeyPair Renvoie une copie en texte brut de la clé privée

(Renvoie également la clé publique et une copie de la clé privée chiffrée avec une clé KMS)

Renvoie une copie de la clé privée chiffrée par la clé publique à partir du document d'attestation

(Renvoie également la clé publique et une copie de la clé privée chiffrée avec une clé KMS)

GenerateRandom Renvoie une chaîne d'octets aléatoire Renvoie les chaîne d’octets aléatoire chiffrée par la clé publique à partir du document d'attestation

AWS KMS prend en charge les clés de condition de stratégie que vous pouvez utiliser pour autoriser ou refuser les opérations d'enclave sur une clé AWS KMS uniquement lorsque le document d'attestation contient le contenu spécifié. Vous pouvez également suivre les demandes AWS KMS relatives à votre enclave Nitro dans vos journaux AWS CloudTrail.

Comment appeler des API AWS KMS pour une enclave Nitro

Pour appeler des API AWS KMS pour une enclave Nitro, utilisez le paramètre Recipient de la demande pour fournir le document d'attestation signé pour l'enclave et l'algorithme de chiffrement à utiliser avec la clé publique de l'enclave. Lorsqu'une demande inclut le paramètre Recipient avec un document d'attestation signé, la réponse inclut un champ CiphertextForRecipient contenant le texte chiffré par la clé publique. Le champ de texte brut est nul ou vide.

Le paramètre Recipient doit spécifier un document d'attestation signé provenant d'une enclave AWS Nitro. AWS KMS s'appuie sur la signature numérique du document d'attestation de l'enclave pour prouver que la clé publique de la demande provenait d'une enclave valide. Vous ne pouvez pas fournir votre propre certificat pour signer numériquement le document d'attestation.

Pour spécifier le paramètre Recipient, utilisez le SDK d’enclaves Nitro AWS ou n’importe quel SDK AWS. Le SDK d’enclaves Nitro AWS, qui n'est pris en charge que dans une enclave Nitro, ajoute automatiquement le paramètre Recipient et ses valeurs à chaque demande AWS KMS. Pour demander des enclaves Nitro dans les SDK AWS, vous devez spécifier le paramètre Recipient et ses valeurs. Support de l'attestation cryptographique de l'enclave Nitro dans les SDK AWS a été introduit en mars 2023.

AWS KMS prend en charge les clés de condition de stratégie que vous pouvez utiliser pour autoriser ou refuser les opérations d'enclave sur une clé AWS KMS uniquement lorsque le document d'attestation contient le contenu spécifié. Vous pouvez également suivre les demandes AWS KMS relatives à votre enclave Nitro dans vos journaux AWS CloudTrail.

Pour obtenir des informations détaillées sur le Recipient paramètre et le champ de CiphertextForRecipient réponse AWS, consultez les GenerateRandomrubriques Déchiffrer, GenerateDataKeyGenerateDataKeyPair, et dans la référence des AWS Key Management Service API, le SDK AWSNitro Enclaves ou tout autre SDK. AWS Pour plus d'informations sur la configuration de vos données et clés de données pour le chiffrement, veuillez consulter Using cryptographic attestation with AWS KMS.

Clés de condition AWS KMS pour AWS Nitro Enclaves

Vous pouvez spécifier les clés de conditions dans les stratégies de clé et les politiques IAM qui contrôlent l’accès à vos ressources AWS KMS. Les déclarations de politique qui incluent une clé de condition ne sont efficaces que lorsque ses conditions sont satisfaites.

AWS KMSfournit des clés de condition qui limitent les autorisations pour les GenerateRandomopérations de déchiffrement GenerateDataKeyGenerateDataKeyPair,, et en fonction du contenu du document d'attestation signé dans la demande. Ces clés de condition ne fonctionnent que lorsqu'une demande d'opération AWS KMS inclut le paramètre Recipient avec un document d'attestation valide provenant d'une enclave Nitro AWS. Pour spécifier le paramètre Recipient, utilisez le SDK d’enclaves Nitro AWS ou n’importe quel SDK AWS.

Cette clé de condition AWS KMS spécifique à l’enclave est valide dans les instructions de politique de clé et les instructions de politique IAM, même si elle n'apparaît pas dans la console IAM ou dans la référence d'autorisations de service IAM.

km RecipientAttestation : ImageSha 384

Clés de condition AWS KMS Type de condition Type de la valeur Opérations d'API Type de politique

kms:RecipientAttestation:ImageSha384

Chaîne

À valeur unique

Decrypt

GenerateDataKey

GenerateDataKeyPair

GenerateRandom

Politiques de clé et politiques IAM

La clé de condition kms:RecipientAttestation:ImageSha384 contrôle l'accès à Decrypt, GenerateDataKey, GenerateDataKeyPair et GenerateRandom avec une clé KMS lorsque le résumé d'image du document d'attestation signé dans la demande correspond à la valeur de la clé de condition. La valeur ImageSha384 correspond au PCR0 du document d'attestation. Cette clé de condition n'est effective que lorsque le paramètre Recipient de la demande spécifie un document d'attestation signé pour une enclave AWS Nitro.

Cette valeur est également incluse dans les CloudTrailévénements relatifs aux demandes adressées AWS KMS aux enclaves Nitro.

Note

Cette clé de condition est valide dans les instructions de politique de clé et les instructions de politique IAM, même si elle n'apparaît pas dans la console IAM ou dans la référence d'autorisations de service IAM.

Par exemple, la déclaration de politique clé suivante autorise le data-processing rôle à utiliser la clé KMS pour les GenerateRandomopérations de déchiffrement GenerateDataKey, GenerateDataKeyPair, et. La clé de condition kms:RecipientAttestation:ImageSha384 permet les opérations uniquement lorsque la valeur de hachage de l'image (PCR0) du document d'attestation de la demande correspond à la valeur de hachage de l'image de la condition. Cette clé de condition n'est effective que lorsque le paramètre Recipient de la demande spécifie un document d'attestation signé pour une enclave AWS Nitro.

Si la demande n'inclut pas de document d'attestation valide provenant d'une enclave AWS Nitro, l'autorisation est refusée car cette condition n'est pas remplie.

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

Clés de condition AWS KMS Type de condition Type de la valeur Opérations d'API Type de politique

kms:RecipientAttestation:PCR<PCR_ID>

Chaîne

À valeur unique

Decrypt

GenerateDataKey

GenerateDataKeyPair

GenerateRandom

Politiques de clé et politiques IAM

La clé de condition kms:RecipientAttestation:PCR<PCR_ID> contrôle l’accès à Decrypt, GenerateDataKey, GenerateDataKeyPair et GenerateRandom avec une clé KMS uniquement lorsque les registres de configuration de plateforme (PCR) du document d'attestation signé de la demande correspondent aux PCR de la clé de condition. Cette clé de condition n'est effective que lorsque le paramètre Recipient de la demande spécifie un document d'attestation signé pour une enclave AWS Nitro.

Cette valeur est également incluse dans les CloudTrailévénements qui représentent des demandes adressées à AWS KMS des enclaves Nitro.

Note

Cette clé de condition est valide dans les instructions de politique de clé et les instructions de politique IAM, même si elle n'apparaît pas dans la console IAM ou dans la référence d'autorisations de service IAM.

Pour spécifier une valeur PCR, utilisez le format suivant. Concaténez l'ID de PCR au nom de clé de condition. La valeur PCR doit être une chaîne hexadécimale en minuscules de 96 octets maximum.

"kms:RecipientAttestation:PCRPCR_ID": "PCR_value"

Par exemple, la clé de condition suivante spécifie une valeur particulière pour PCR1, qui correspond au hachage du noyau utilisé pour l'enclave et le processus d'amorçage.

kms:RecipientAttestation:PCR1: "0x1abcdef2abcdef3abcdef4abcdef5abcdef6abcdef7abcdef8abcdef9abcdef8abcdef7abcdef6abcdef5abcdef4abcdef3abcdef2abcdef1abcdef0abcde"

Par exemple, l'instruction de stratégie de clé suivante autorise le rôle data-processing à utiliser la clé KMS pour l'opération Decrypt.

La clé de condition kms:RecipientAttestation:PCR de cette instruction autorise l'opération uniquement lorsque la valeur PCR1 du document d'attestation signé dans la demande correspond à la valeur kms:RecipientAttestation:PCR1 de la condition. Utilisez l'opérateur de politique StringEqualsIgnoreCase pour exiger une comparaison insensible à la casse des valeurs PCR.

Si la demande n'inclut pas de document d'attestation, l'autorisation est refusée car cette condition n'est pas remplie.

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

Demandes de surveillance pour les enclaves Nitro

Vous pouvez utiliser vos AWS CloudTrail journaux pour surveiller le déchiffrement, GenerateDataKeyGenerateDataKeyPair, et les GenerateRandomopérations d'une enclave AWS Nitro. Dans ces entrées de journal, le champ additionalEventData contient un champ recipient contenant l'ID du module (attestationDocumentModuleId), le condensé d'image (attestationDocumentEnclaveImageDigest) et les registres de configuration de plateforme (PCR) provenant du document d'attestation contenu dans la demande. Ces champs sont uniquement inclus lorsque le paramètre Recipient de la demande spécifie un document d'attestation signé pour une enclave Nitro AWS.

L'ID du module est l'ID d'enclave de l'enclave Nitro. Le résumé d'image est le hachage SHA384 de l'image d'enclave. Vous pouvez utiliser le résumé de l'image et les valeurs PCR dans les conditions des stratégies de clé et des politiques IAM. Pour plus d'informations sur les PCR, consultez Où obtenir les mesures d'une enclave dans le Guide de l’utilisateur des enclaves Nitro AWS.

Cette section présente un exemple d'entrée de CloudTrail journal pour chacune des demandes d'enclave Nitro prises en charge àAWS KMS.

Decrypt (pour une enclave)

L'exemple suivant illustre une entrée de journal AWS CloudTrail pour l’opération Decrypt d’une 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 (pour une enclave)

L'exemple suivant montre une entrée dans le AWS CloudTrail journal d'une GenerateDataKeyopération pour une 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 (pour une enclave)

L'exemple suivant montre une entrée dans le AWS CloudTrail journal d'une GenerateDataKeyPairopération pour une 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-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 (pour une enclave)

L'exemple suivant montre une entrée dans le AWS CloudTrail journal d'une GenerateRandomopération pour une 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" }