Utilisation du chiffrement côté serveur avec des clés AWS KMS (SSE-KMS) - Amazon Simple Storage Service

Utilisation du chiffrement côté serveur avec des clés AWS KMS (SSE-KMS)

Important

Amazon S3 applique désormais le chiffrement côté serveur avec les clés gérées par Amazon S3 (SSE-S3) comme niveau de base du chiffrement pour chaque compartiment d’Amazon S3. À partir du 5 janvier 2023, tous les nouveaux chargements d’objets sur Amazon S3 sont automatiquement chiffrés, sans coût supplémentaire et sans impact sur les performances. Le statut de chiffrement automatique pour la configuration de chiffrement par défaut du compartiment S3 et pour les nouveaux chargements d’objets est disponible dans les journaux AWS CloudTrail, S3 Inventory, S3 Storage Lens, dans la console Amazon S3, et en tant qu’en-tête de réponse supplémentaire de l’API Amazon S3 dans l’AWS Command Line Interface et les kits AWS SDK. Pour plus d’informations, consultez la FAQ sur le chiffrement par défaut.

Le chiffrement côté serveur est le chiffrement des données à leur destination par l’application ou le service qui les reçoit.

Amazon S3 active automatiquement le chiffrement côté serveur avec les clés gérées par Amazon S3 (SSE-S3) pour les nouveaux chargements d’objets.

Sauf indication contraire, les compartiments utilisent SSE-S3 par défaut pour chiffrer les objets. Toutefois, vous pouvez choisir de configurer les compartiments de sorte qu’ils utilisent à la place le chiffrement côté serveur avec des clés AWS Key Management Service (AWS KMS) (SSE-KMS). Pour plus d’informations, consultez Spécification du chiffrement côté serveur avec AWS KMS (SSE-KMS).

AWS KMS est un service qui combine du matériel et des logiciels sécurisés et hautement disponibles pour fournir un système de gestion de clés à l’échelle du cloud. Amazon S3 utilise le chiffrement côté serveur avec AWS KMS (SSE-KMS) pour chiffrer les données de vos objets S3. En outre, lorsque SSE-KMS est demandé pour l’objet, la somme de contrôle S3, qui fait partie des métadonnées de l’objet, est stockée sous forme chiffrée. Pour plus d’informations sur le total de contrôle, consultez Vérification de l’intégrité des objets dans Amazon S3.

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

  • Créer, visualiser, modifier, surveiller, activer ou désactiver, faire tourner et planifier la suppression des clés KMS de manière centralisée.

  • Définir les politiques qui contrôlent comment et par qui les clés KMS peuvent être utilisées.

  • Auditer la bonne utilisation des clés KMS. L’audit est pris en charge par l’API AWS KMS, mais pas par la console AWS KMS.

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 Concepts AWS KMS key dans le Guide du développeur AWS Key Management Service et Tarification AWS KMS.

Pour plus d’informations sur la manière d’autoriser les utilisateurs IAM à accéder à des compartiments chiffrés avec des clés KMS, consultez Mon compartiment Amazon S3 utilise un chiffrement par défaut avec une clé AWS KMS personnalisée. Comment autoriser des utilisateurs à télécharger depuis et charger vers le compartiment ? dans le Centre de connaissances AWS re:Post.

Autorisations

Pour transmettre une demande PutObject de chiffrement d’un objet avec une clé AWS KMS à Amazon S3, vous devez disposer de l’autorisation kms:GenerateDataKey sur la clé. Pour télécharger un objet chiffré avec une AWS KMS key, vous devez disposer de l’autorisation kms:Decrypt sur la clé. Pour effectuer un chargement partitionné afin de chiffrer un objet avec une AWS KMS key, vous devez disposer des autorisations kms:GenerateDataKey et kms:Decrypt sur la clé.

Important

Examinez attentivement les autorisations accordées dans les politiques des clés KMS. Ne limitez les autorisations des stratégies de clé KMS gérées par le client qu’aux principaux et aux services AWS qui doivent accéder à l’action de clé AWS KMS correspondante. Pour plus d’informations, consultez Stratégies de clé dans le AWS KMS.

AWS KMS keys

Lorsque vous utilisez le chiffrement côté serveur avec AWS KMS (SSE-KMS), vous pouvez utiliser la clé gérée par AWS par défaut, ou vous pouvez spécifier une clé gérée par le client que vous avez déjà créée. AWS KMS prend en charge le chiffrement d’enveloppe. S3 utilise les fonctions AWS KMS de 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é KMS. Pour plus d’informations sur le chiffrement d’enveloppe, consultez Chiffrement d’enveloppe dans le Guide du développeurAWS Key Management Service.

Si vous ne spécifiez pas de clé gérée par le client, Simple Storage Service (Amazon S3) créera automatiquement une Clé gérée par AWS 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.

Note

Les objets chiffrés en utilisant SSE-KMS avec des Clés gérées par AWS ne peuvent pas être partagés entre comptes. Si vous avez besoin de partager des données SSE-KMS entre comptes, vous devez utiliser une clé gérée par le client en provenance d’AWS KMS.

Si vous souhaitez utiliser une clé gérée par le client pour SSE-KMS, créez une clé gérée par le client à chiffrement symétrique 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. Pour plus d’informations sur la clé de chiffrement symétrique, consultez Clés KMS de chiffrement symétriques dans le Guide du développeur AWS Key Management Service.

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 plus d’informations sur les clés gérées par le client et par AWS, consultez Clés client et clés AWS dans le Guide du développeur AWS Key Management Service.

Note

Lorsque vous utilisez le chiffrement côté serveur avec une clé gérée par le client qui est stockée dans un magasin de clés externe, contrairement aux clés KMS standard, vous êtes responsable de la disponibilité et de la durabilité de votre matériel de clé. Pour plus d’informations sur les magasins de clés externes et sur la manière dont ils modifient le modèle de responsabilité partagée, consultez Magasins de clés externes dans le Guide du développeur AWS Key Management Service.

Utilisation du chiffrement SSE-KMS pour les opérations intercomptes

Tenez compte des éléments suivants lors de l’utilisation du chiffrement pour les opérations inter-comptes :

  • Si l’Amazon Resource Name (ARN) ou l’alias de la AWS KMS key n’est pas fourni au moment de la demande, ni via la configuration de chiffrement par défaut du compartiment, la Clé gérée par AWS (aws/s3) du compte du chargement est utilisée pour le chiffrement et requise pour le déchiffrement.

  • La Clé gérée par AWS(aws/s3) peut être utilisée comme clé KMS pour les opérations intercomptes lorsque les principaux responsables du chargement et de l’accès AWS Identity and Access Management (IAM) proviennent du même Compte AWS.

  • Utilisez une clé gérée par le client si vous souhaitez accorder un accès intercompte à vos objets S3. Vous pouvez configurer la politique d’une clé gérée par le client afin d’autoriser l’accès à partir d’un autre compte.

  • Si vous spécifiez une clé KMS gérée par le client, nous recommandons d’utiliser un ARN de clé KMS complet. Si vous utilisez plutôt un alias de clé KMS, AWS KMS résout la clé dans le compte du demandeur. En raison de ce comportement, les données peuvent être chiffrées avec une clé KMS qui appartient au demandeur, et non au propriétaire du compartiment.

  • Vous devez spécifier une clé pour laquelle vous (le demandeur) avez obtenu l’autorisation de Encrypt. Pour plus d’informations, consultez Permettre aux utilisateurs de clés d’utiliser une clé KMS pour les opérations de chiffrement dans le Guide de l’utilisateur AWS Key Management Service.

Pour plus d’informations sur les moments propices à l’utilisation des clés gérées par le client et des clés KMS gérées par AWS, consultez Dois-je utiliser une Clé gérée par AWS ou une clé gérée par le client pour chiffrer mes objets dans Amazon S3 ?

Flux de travail de chiffrement SSE-KMS

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

  1. 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.

  2. 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.

  3. 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.

  4. 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 :

  1. Amazon S3 envoie la clé des données chiffrées à AWS KMS dans une requête Decrypt.

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

  3. Amazon S3 déchiffre les données chiffrées, en utilisant la clé des données en texte brut, et supprime la clé des 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 ne prend en charge que les clés KMS à chiffrement symétrique. Pour plus d’informations sur ces clés, consultez Clés KMS de chiffrement symétriques dans le Guide du développeur AWS Key Management Service.

Audit du chiffrement SSE-KMS

Pour identifier les requêtes qui spécifient SSE-KMS, vous pouvez utiliser les métriques Toutes les demandes SSE-KMS et % de toutes les demandes SSE-KMS dans les métriques Amazon S3 Storage Lens. S3 Storage Lens est une fonctionnalité d’analytique du stockage dans le cloud que vous pouvez utiliser pour obtenir une visibilité à l’échelle de l’organisation sur l’utilisation et l’activité du stockage d’objets. Vous pouvez également utiliser le nombre de compartiments avec le chiffrement SSE-KMS activé et le pourcentage de compartiments avec le chiffrement SSE-KMS activé pour déterminer le nombre de compartiments (SSE-KMS) pour le chiffrement des compartiments par défaut. Pour plus d’informations, consultez Évaluer l’activité et l’utilisation de votre stockage avec S3 Storage Lens. Pour obtenir la liste complète des métriques, consultez le Glossaire des métriques S3 Storage Lens.

Pour auditer l’utilisation de vos clés AWS KMS pour les données chiffrées SSE-KMS, vous pouvez utiliser les journaux AWS CloudTrail. Vous pouvez obtenir un aperçu de vos opérations cryptographiques, telles que GenerateDataKey et Decrypt. CloudTrail prend en charge de nombreuses valeurs d’attribut pour filtrer votre recherche, notamment le nom de l’événement, le nom d’utilisateur et la source de l’événement.

Clés de compartiment Amazon S3.

Lorsque vous configurez le chiffrement côté serveur à l’aide d’AWS KMS (SSE-KMS), vous pouvez configurer vos compartiments de sorte qu’ils utilisent des 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 un compartiment de sorte qu’il utilise des 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 S3 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 stratégie de compartiment. Par exemple, la stratégie 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-aws-kms-key-id demandant le chiffrement côté serveur avec SSE-KMS.

JSON
{ "Version":"2012-10-17", "Id":"PutObjectPolicy", "Statement":[{ "Sid":"DenyObjectsThatAreNotSSEKMS", "Effect":"Deny", "Principal":"*", "Action":"s3:PutObject", "Resource":"arn:aws:s3:::amzn-s3-demo-bucket1/*", "Condition":{ "Null":{ "s3:x-amz-server-side-encryption-aws-kms-key-id":"true" } } } ] }

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. AWS Identity and Access Management ne valide pas si la chaîne pour s3:x-amz-server-side-encryption-aws-kms-key-id existe.

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 ou vous fier à la configuration de chiffrement de compartiment par défaut. Si votre demande PutObject spécifie aws:kms dans l’en-tête x-amz-server-side-encryption, mais pas dans l’en-tête x-amz-server-side-encryption-aws-kms-key-id, Amazon S3 part du principe que vous souhaitez utiliser une 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, consultez Clés de condition pour Amazon S3 dans la Référence de l’autorisation de service.

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 Contexte de chiffrement dans le Guide du développeur AWS Key Management Service.

Par défaut, Amazon S3 utilise 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:::amzn-s3-demo-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:::amzn-s3-demo-bucket1" }

Envoi de requêtes pour des objets AWS KMS chiffrés

Important

Toutes les requêtes GET et PUT pour les objets chiffrés AWS KMS doivent être créés en utilisant le protocole SSL (Secure Sockets Layer) ou le protocole TLS (Transport Layer Security). Les requêtes doivent également être signées à l’aide d’informations d’identification valides, telles qu’AWS Signature Version 4 (ou AWS Signature Version 2).

AWS Signature version 4 est le processus permettant d’ajouter des informations d’authentification à des requêtes 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 plus d’informations, consultez Authentification des demandes (AWS Signature Version 4) et Processus de signature Signature version 4.

Important

Si votre objet utilise SSE-KMS, n’envoyez pas d’en-têtes de chiffrement pour les requêtes GET et HEAD. Sinon, vous obtiendrez une erreur HTTP 400 Bad Request (HTTP 400 Requête erronée).