Protection des données grâce au chiffrement côté serveur avec AWS Key Management Service (SSE-KMS) - Amazon Simple Storage Service

Protection des données grâce au chiffrement côté serveur avec AWS Key Management Service (SSE-KMS)

Le chiffrement côté serveur consiste à chiffer les données une fois à destination par l'application ou le service destinataire. AWS Key Management Service (AWS KMS) est un service qui combine matériel et logiciel sécurisés hautement disponibles, pour fournir un système de gestion de clé mis à échelle pour le cloud. Amazon S3 utilise AWS KMS keys pour chiffrer vos objets Amazon S3. AWS KMS chiffre uniquement les données de l'objet. Les métadonnées d'objet ne sont pas chiffrées.

Si vous utilisez des clés KMS, vous pouvez utiliser AWS KMS via AWS Management Console ou les API AWS KMS pour effectuer les tâches suivantes :

  • Créer des clés KMS de façon centralisée

  • Définir les politiques qui contrôlent la façon dont les clés KMS peuvent être utilisées

  • Auditer leur utilisation pour prouver qu'elles sont utilisées correctement

Les contrôles de sécurité intégrés à AWS KMS peuvent vous aider à respecter les exigences de conformité liées au chiffrement. Vous pouvez utiliser ces clés KMS pour protéger les données dans les compartiments Simple Storage Service (Amazon S3). Lorsque vous utilisez le chiffrement SSE-KMS avec un compartiment S3, la AWS KMS keys doit être dans la même Région que le compartiment.

Des frais supplémentaires sont facturés pour l'utilisation de AWS KMS keys. Pour plus d'informations, consultez la section Concepts AWS KMS key dans le Guide du développeur AWS Key Management Service et Tarification AWS KMS.

Autorisations

Pour charger un objet chiffré avec une AWS KMS key vers Amazon S3, vous devez disposer des autorisations kms:GenerateDataKey sur la clé. Pour télécharger un objet chiffré avec une AWS KMS key, vous avez besoin d'autorisations kms:Decrypt. Pour plus d'informations sur les autorisations AWS KMS requises pour le chargement partitionné, veuillez consulter API de chargement partitionné et autorisations.

AWS KMS keys

Lorsque vous utilisez un chiffrement côté serveur avec AWS KMS (SSE-KMS), vous pouvez utiliser la clé gérée par AWS par défaut, ou spécifier une clé gérée par le client que vous avez déjà créée.AWS KMS utilise le chiffrement d'enveloppe pour mieux protéger vos données. Le chiffrement d'enveloppe est la pratique consistant à chiffrer vos données en texte brut à l'aide d'une clé de données, puis à chiffrer cette clé de données avec une clé racine.

Si vous ne spécifiez pas de clé gérée par le client, Simple Storage Service (Amazon S3) créera automatiquement une AWS KMS key dans votre Compte AWS la première fois que vous ajouterez un objet chiffré avec SSE-KMS dans un compartiment. Par défaut, Amazon S3 utilise cette clé KMS pour SSE-KMS.

Si vous souhaitez utiliser une clé gérée par le client pour SSE-KMS, vous devez créer la clé gérée par le client avant de configurer SSE-KMS. Ensuite, lorsque vous configurez SSE-KMS pour votre compartiment, vous pouvez spécifier la clé gérée par le client existante.

En créant une clé gérée par le client, vous disposez de plus de flexibilité et d'un contrôle accru. Par exemple, vous pouvez créer, faire tourner et désactiver les clés gérés par le client. Vous pouvez également définir des contrôles d'accès et auditer les clés gérées par le client que vous utilisez pour protéger vos données. Pour de plus amples informations sur les clés gérées par le client et les clés gérées par AWS, consultez la section Concepts AWS KMS dans le Guide du développeur AWS Key Management Service.

Si vous choisissez de chiffrer vos données à l'aide d'une clé KMS ou d'une clé gérée par le client, AWS KMS et Amazon S3 effectuent les actions suivantes :

  • Simple Storage Service (Amazon S3) demande une clé de données en texte brut et une copie de la clé chiffrée sous la clé KMS spécifiée.

  • AWS KMS génère une clé de données, la chiffre à l'aide de la clé KMS et envoie la clé de données en texte brut et la clé de données chiffrée à Amazon S3.

  • Amazon S3 chiffre les données à l'aide de la clé de données et supprime la clé en texte brut de la mémoire dès que possible après utilisation.

  • Simple Storage Service (Amazon S3) stocke la clé de données chiffrée sous forme de métadonnées avec les données chiffrées.

Lorsque vous demandez le déchiffrement de vos données, Amazon S3 et AWS KMS effectuent les actions suivantes :

  • Simple Storage Service (Amazon S3) envoie la clé de données chiffrée à AWS KMS.

  • AWS KMS déchiffre la clé à l'aide de la même clé KMS et renvoie la clé de données en texte brut à Amazon S3.

  • Simple Storage Service (Amazon S3) déchiffre le texte chiffré et supprime la clé de données en texte brut de la mémoire dès que possible.

Important

Lorsque vous utilisez une AWS KMS key pour le chiffrement côté serveur dans Amazon S3, vous devez choisir une clé KMS de chiffrement symétrique. Amazon S3 prend en charge seulement les clés KMS symétriques de chiffrement et ne prend pas en charge les clés asymétriques. Pour en savoir plus, consultez la section Utilisation des clés symétriques et asymétriques dans le Guide du développeur AWS Key Management Service.

Clés de compartiment Amazon S3.

Lorsque vous configurez le chiffrement côté serveur à l'aide d'AWS KMS (SSE-KMS), vous pouvez configurer votre compartiment de sorte qu'il utilise les clés de compartiment S3 pour SSE-KMS. Utiliser une clé de niveau compartiment pour SSE-KMS peut réduire les coûts de vos demandes AWS KMS jusqu'à 99 % en diminuant le trafic de demandes d'Amazon S3 vers AWS KMS.

Lorsque vous configurez votre compartiment de sorte qu'il utilise les clés de compartiment S3 pour SSE-KMS sur de nouveaux objets, AWS KMS génère une clé de niveau compartiment qui est utilisée pour créer des clés de données uniques pour les objets dans le compartiment. Cette clé de compartiment est utilisée pendant une période limitée dans Amazon S3, ce qui réduit encore la nécessité pour Amazon S3 d'adresser des demandes à AWS KMS pour terminer les opérations de chiffrement. Pour plus d'informations sur l'utilisation des clés de compartiment S3, consultez Réduction du coût du SSE-KMS avec les clés de compartiment Amazon S3.

Exigence du chiffrement côté serveur

Pour exiger le chiffrement côté serveur de tous les objets d'un compartiment Simple Storage Service (Amazon S3) particulier, vous pouvez utiliser une politique. Par exemple, la politique de compartiment suivante n'autorise pas le chargement d'objet (s3:PutObject) si la demande n'inclut pas l'en-tête x-amz-server-side-encryption demandant le chiffrement côté serveur avec des SSE-KMS.

{ "Version":"2012-10-17", "Id":"PutObjectPolicy", "Statement":[{ "Sid":"DenyUnEncryptedObjectUploads", "Effect":"Deny", "Principal":"*", "Action":"s3:PutObject", "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET1/*", "Condition":{ "StringNotEquals":{ "s3:x-amz-server-side-encryption":"aws:kms" } } } ] }

Pour exiger qu'une AWS KMS key particulière soit utilisée pour chiffrer les objets d'un compartiment, vous pouvez utiliser la clé de condition s3:x-amz-server-side-encryption-aws-kms-key-id. Pour spécifier la clé KMS, vous devez utiliser un Amazon Resource Name (ARN) de clé au format arn:aws:kms:region:acct-id:key/key-id".

Note

Lorsque vous chargez un objet, vous pouvez spécifier la clé KMS à l'aide de l'en-tête x-amz-server-side-encryption-aws-kms-key-id. Si l'en-tête n'est pas présent dans la demande, Amazon S3 suppose que vous souhaitez utiliser la clé gérée par AWS. L'ID de clé AWS KMS utilisé par Simple Storage Service (Amazon S3) pour chiffrer les objets doit correspondre à l'ID de clé AWS KMS de la politique, faute de quoi Simple Storage Service (Amazon S3) refuse la demande.

Pour obtenir la liste complète des clés de condition spécifiques à Amazon S3, veuillez consulter Condition keys for Amazon S3 (Clés de condition pour Amazon S3).

Contexte de chiffrement

Un contexte de chiffrement est un ensemble de paires valeur clé qui contient des informations contextuelles supplémentaires sur les données. Le contexte de chiffrement n'est pas chiffré. Lorsqu'un contexte de chiffrement est spécifié pour une opération de chiffrement, Amazon S3 doit spécifier le même contexte de chiffrement pour l'opération de déchiffrement. Sinon, le déchiffrement échoue. AWS KMS utilise le contexte de chiffrement en tant que données authentifiées supplémentaires (AAD) pour prendre en charge le chiffrement authentifié. Pour plus d'informations sur le contexte de chiffrement, consultez la section Contexte de chiffrement du Guide du développeur AWS Key Management Service.

Amazon S3 utilise automatiquement l'Amazon Resource Name (ARN) de l'objet ou du compartiment comme paire de contexte de chiffrement :

  • Si vous utilisez SSE-KMS sans activer une clé de compartiment S3, l'ARN de l'objet est utilisé comme contexte de chiffrement.

    arn:aws:s3:::object_ARN
  • Si vous utilisez SSE-KMS avec une clé de compartiment S3 activée, l'ARN du compartiment est utilisé comme contexte de chiffrement. Pour plus d'informations sur les clés de compartiment S3, consultez Réduction du coût du SSE-KMS avec les clés de compartiment Amazon S3.

    arn:aws:s3:::bucket_ARN

Vous pouvez éventuellement fournir une paire de contexte de chiffrement supplémentaire à l'aide de l'en-tête x-amz-server-side-encryption-context dans une demande s3:PutObject. Toutefois, étant donné que le contexte de chiffrement n'est pas chiffré, assurez-vous qu'il n'inclut pas d'informations sensibles. Amazon S3 stocke cette paire de clés supplémentaire avec le contexte de chiffrement par défaut. Lorsqu'il traite votre demande PUT, Amazon S3 ajoute le contexte de chiffrement par défaut d'aws:s3:arn à celui que vous fournissez.

Vous pouvez utiliser le contexte de chiffrement pour identifier et classer vos opérations cryptographiques par catégorie. Vous pouvez également utiliser la valeur ARN du contexte de chiffrement par défaut pour suivre les demandes pertinentes dans AWS CloudTrail en consultant quel ARN Amazon S3 a été utilisé avec quelle clé de chiffrement.

Dans le champ requestParameters d'un fichier journal CloudTrail, le contexte de chiffrement ressemble à ce qui suit.

"encryptionContext": { "aws:s3:arn": "arn:aws:s3:::DOC-EXAMPLE-BUCKET1/file_name" }

Lorsque vous utilisez SSE-KMS avec la fonction de clés de compartiment S3 facultative, la valeur du contexte de chiffrement est l'ARN du compartiment.

"encryptionContext": { "aws:s3:arn": "arn:aws:s3:::DOC-EXAMPLE-BUCKET1" }

AWS Signature version 4

Signature version 4 est le processus permettant d'ajouter des informations d'authentification à des demandes AWS envoyées par HTTP. Pour des raisons de sécurité, la plupart des demandes à AWS doivent être signées avec une clé d'accès, qui se compose d'un ID de clé d'accès et de la clé d'accès secrète. Ces deux clés sont généralement appelées informations d'identification de sécurité. Pour de plus amples informations, veuillez consulter Authentification des demandes (AWS Signature version 4) et Processus de signature Signature version 4.

Important
  • Toutes les demandes GET et PUT pour un objet protégé par AWS KMS échouent si vous ne les faites pas en utilisant le protocole SSL, le protocole TLS (Transport Layer Security) ou Signature Version 4.

  • Si votre objet utilise des SSE-KMS, n'envoyez pas d'en-têtes de demande de chiffrement pour les demandes GET et les demandes HEAD. Dans le cas contraire, vous obtiendrez une erreur HTTP 400 BadRequest.