Comment AWS Nitro Enclaves utilise AWS KMS
AWS Nitro Enclaves est une fonctionnalité Amazon EC2 qui vous permet de créer des environnements de calcul isolés à partir d'instances Amazon EC2.
Les applications qui s'exécutent dans AWS Nitro Enclaves peuvent utiliser le kit de développement AWS Nitro Enclaves
Pour prendre en charge AWS Nitro Enclaves, AWS KMS ajoute un paramètre de demande Recipient
avec le type d'objet RecipientInfo
et un champ de réponse CiphertextForRecipient
à la demande standard et aux champs de réponse pour ces opérations. Ces éléments spécifiques à l'enclave ne sont valides que dans les opérations d'API prises en charge et uniquement lorsque la demande est signée à l'aide du kit de développement AWS Nitro Enclaves. AWS KMSs'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.
AWS KMS prend également en charge les clés de condition de stratégie que vous pouvez utiliser pour autoriser les opérations d'enclave sur une clé AWS KMS uniquement lorsque le document d'attestation contient le contenu spécifié. Pour plus d'informations, consultez Clés de condition AWS KMS pour AWS Nitro Enclaves.
Pour de plus amples informations sur AWS Nitro Enclaves, veuillez consulter Présentation d'AWSNitro Enclaves dans le Guide du développeur AWS Nitro Enclaves. 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.
Recipient
"Recipient": { "AttestationDocument": blob, "KeyEncryptionAlgorithm": "string" }
Paramètre de requête contenant le document d'attestation signé d'une enclave et un algorithme de chiffrement. Le seul algorithme de chiffrement valide est RSAES_OAEP_SHA_256
.
Ce paramètre n'est valide que lorsque la demande provient du kit de développement AWS Nitro Enclaves.
Type : objet RecipientInfo
RecipientInfo
Ce type contient des informations sur l'enclave qui reçoit la réponse de l'opération d'API.
- AttestationDocument
-
Document contenant des mesures décrivant l'état de l'enclave Nitro. Ce document inclut également la clé publique de l'enclave. AWS KMS chiffrera tout texte en clair dans la réponse sous cette clé publique afin qu'il puisse être déchiffré plus tard uniquement par la clé privée correspondante dans l'enclave.
Type : objet de données binaires encodées en base64
Contraintes de longueur : longueur minimale de 1. Longueur maximum de 262 144.
Obligatoire : Non
- KeyEncryptionAlgorithm
-
Algorithme de chiffrement que AWS KMS doit utiliser avec la clé publique. La seule valeur valide est
RSAES_OAEP_SHA_256
.Type : chaîne
Valeurs valides : RSAES_OAEP_SHA_256
Obligatoire : Non
CiphertextForRecipient
{ "CiphertextForRecipient": blob }
Ce champ de réponse contient un texte chiffré avec la clé publique du document d'attestation de la demande. Ce champ n'est renseigné que lorsque la demande inclut un paramètre Recipient
avec un document d'attestation et un algorithme de chiffrement valides. Lorsque ce champ est rempli, le champ Plaintext
dans la réponse est null.
Type : objet de données binaires encodées en base64
Contraintes de longueur : longueur minimale de 1. Longueur maximum de 6 144.
Opérations AWS KMS pour AWS Nitro Enclaves
Les opérations AWS KMS suivantes prennent en charge Nitro Enclaves. Cette rubrique explique comment ces opérations d'API se comportent lorsqu'une demande provient du kit de développement AWS Nitro Enclaves et le paramètre Recipient
inclut un document d'attestation valide. Ces opérations prennent en charge le paramètre Recipient
et le champ de réponse CiphertextForRecipient
.
Decrypt
Pour appeler l'opération Decrypt à partir d'une enclave, utilisez l'opération kms-decrypt
Après avoir utilisé la clé AWS KMS pour déchiffrer le blob de texte chiffré dans la demande, l'opération Decrypt
rechiffre le texte brut résultant à l'aide de la clé publique à partir du document d'attestation et de l'algorithme de chiffrement spécifié. Elle renvoie le texte chiffré résultant dans le champ CiphertextForRecipient
de la réponse. Le champ Plaintext
dans la réponse est Null.
GenerateDataKey
Pour appeler l'opération GenerateDataKey à partir d'une enclave, utilisez l'opération kms-generate-data-key
Après avoir généré la clé de données, l'opération GenerateDataKey
chiffre la copie de la clé de données sous la clé AWS KMS spécifiée et la renvoie dans le champ CiphertextBlob
. Elle chiffre l'autre copie de la clé de données sous la clé publique à partir du document d'attestation et la renvoie dans le champ CiphertextForRecipient
. Le champ Plaintext
dans la réponse est Null.
Votre utilisation des deux clés de données chiffrées dans la réponse GenerateDataKey
dépend de votre utilisation de l'enclave.
-
Si vous souhaitez utiliser la clé de données pour chiffrer des données dans l'enclave, déchiffrez la valeur dans le champ
CiphertextForRecipient
à l'aide de la clé privée de votre enclave. Si vous souhaitez conserver ces données nouvellement chiffrées en dehors de l'enclave, vous pouvez les stocker avec l'une des deux copies de clé de données chiffrées dans la réponseGenerateDataKey
(kms-generate-data-key
). -
Si vous avez l'intention de maintenir l'enclave en cours d'exécution et que vous pouvez compter sur la durabilité de la clé privée dans la mémoire de l'enclave, vous pouvez inclure l'objet
CiphertextForRecipient
avec les données nouvellement chiffrées lorsque vous les déplacez en dehors de l'enclave. Lorsque vous êtes prêt à déchiffrer l'objetCiphertextForRecipient
, vous devez utiliser la clé privée correspondante dans l'enclave.Si vous n'avez pas l'intention de garder votre enclave en cours d'exécution ou si vous ne voulez pas compter sur la durabilité de la clé privée dans la mémoire d'enclave, vous devez inclure l'objet
CiphertextBlob
avec vos données chiffrées. Pour déchiffrer cette copie de la clé de données, vous devez l'envoyer à AWS KMS dans une demandeDecrypt
(kms-decrypt
).Vous pouvez également transmettre l'objet
CiphertextBlob
dans une enclave différente, puis le déchiffrer en appelant l'opérationkms-decrypt
(Decrypt
) dans le kit de développement AWS Nitro Enclaves. Cette demande comprendra le document d'attestation de la nouvelle enclave avec une nouvelle clé publique. AWS KMS déchiffrera la clé de données qui a été chiffrée sous la clé AWS KMS, puis la chiffrera à nouveau sous la clé publique de la nouvelle enclave. Cette clé de données peut être déchiffrée uniquement à l'aide de la clé privée correspondante dans la nouvelle enclave.
GenerateRandom
Pour appeler l'opération GenerateRandom à partir d'une enclave, utilisez l'opération kms-generate-random
Après avoir généré la chaîne d'octets aléatoires, l'opération GenerateRandom chiffre la chaîne d'octets aléatoires à l'aide de la clé publique à partir du document d'attestation et de l'algorithme de chiffrement spécifié. Elle renvoie la chaîne d'octets chiffrée dans le champ CiphertextForRecipient
. Le champ Plaintext
dans la réponse est Null.