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

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 appeler les opérations AWS KMS Decrypt,GenerateDataKey et GenerateRandom. Le kit SDK Nitro Enclaves ajoute le document d'attestation de l'enclave à chaque demande d'API AWS KMS. Au lieu de renvoyer des données en texte brut, les opérations AWS KMS chiffrent le texte brut avec la clé publique du document d'attestation. Cette conception permet de déchiffrer le texte chiffré uniquement au moyen de la clé privée correspondante dans l'enclave.

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 Recipientavec 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 dans le kit de développement AWS Nitro Enclaves.

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 dans le kit de développement AWS Nitro Enclaves.

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éponse GenerateDataKey (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'objet CiphertextForRecipient, 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 demande Decrypt (kms-decrypt).

    Vous pouvez également transmettre l'objet CiphertextBlob dans une enclave différente, puis le déchiffrer en appelant l'opération kms-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 dans le kit de développement AWS Nitro Enclaves.

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.