Spécification du chiffrement côté serveur avec AWS KMS (SSE-KMS) - Amazon Simple Storage 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.

Spécification du chiffrement côté serveur avec 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. L'état du chiffrement automatique pour la configuration de chiffrement par défaut du compartiment S3 et pour le téléchargement de nouveaux objets est disponible dans AWS CloudTrail les journaux, S3 Inventory, S3 Storage Lens, la console Amazon S3 et sous forme d'en-tête de réponse d'API Amazon S3 supplémentaire dans les AWS SDK AWS Command Line Interface et. Pour plus d'informations, consultez la FAQ sur le chiffrement par défaut.

Le chiffrement est configuré par défaut pour tous les compartiments Amazon S3, et tous les nouveaux objets qui sont chargés dans un compartiment S3 sont automatiquement chiffrés au repos. Le chiffrement côté serveur avec des clés gérées par Amazon S3 (SSE-S3) est la configuration de chiffrement par défaut pour chaque compartiment dans Amazon S3. Pour utiliser un autre type de chiffrement, vous pouvez soit spécifier le type de chiffrement côté serveur à utiliser dans vos demandes PUT S3, soit définir la configuration de chiffrement par défaut dans le compartiment de destination.

Si vous souhaitez spécifier un type de chiffrement différent dans vos PUT demandes, vous pouvez utiliser le chiffrement côté serveur avec des clés AWS Key Management Service (AWS KMS) (SSE-KMS), le chiffrement double couche côté serveur avec des clés (DSSE-KMS) ou le chiffrement côté serveur avec des AWS KMS clés fournies par le client (SSE-C). Si vous souhaitez définir une autre configuration de chiffrement par défaut dans le compartiment de destination, vous pouvez utiliser SSE-KMS ou DSSE-KMS.

Vous pouvez appliquer le chiffrement lorsque vous chargez un nouvel objet ou copiez un objet existant.

Vous pouvez spécifier SSE-KMS à l'aide de la console Amazon S3, des opérations d'API REST, des AWS SDK et du AWS Command Line Interface ().AWS CLI Pour plus d’informations, consultez les rubriques suivantes.

Note

Vous pouvez utiliser plusieurs régions AWS KMS keys dans Amazon S3. Cependant, Amazon S3 traite actuellement les clés multi-régions comme s'il s'agissait de clés à région unique et n'utilise pas les fonctions multi-régions de la clé. Pour en savoir plus, consultez la section Utilisation des clés multi-régions dans le Guide du développeur AWS Key Management Service .

Note

Si vous souhaitez utiliser une clé KMS qui appartient à un autre compte, vous devez avoir l'autorisation d'utiliser la clé. Pour plus d'informations sur les autorisations intercomptes pour les clés KMS, consultez la section Creating KMS keys that other accounts can use (Création de clés KMS que d'autres comptes peuvent utiliser) dans le Guide du développeur AWS Key Management Service .

Cette rubrique explique comment définir ou modifier le type de chiffrement d'un objet pour utiliser le chiffrement côté serveur avec des clés AWS Key Management Service (AWS KMS) (SSE-KMS) à l'aide de la console Amazon S3.

Note

Si vous modifiez le chiffrement d'un objet, un nouvel objet est créé pour remplacer l'ancien. Si la gestion des versions S3 est activée, une nouvelle version de l'objet est créée et l'objet existant devient une version plus ancienne. Le rôle qui modifie la propriété devient également le propriétaire du nouvel objet ou (version de l'objet).

Pour ajouter ou modifier le chiffrement d'un objet
  1. Connectez-vous à la console Amazon S3 AWS Management Console et ouvrez-la à l'adresse https://console.aws.amazon.com/s3/.

  2. Dans le panneau de navigation de gauche, choisissez Compartiments.

  3. Dans la liste Buckets (Compartiments), choisissez le nom du compartiment qui contient l'objet.

  4. Dans la liste Objets, choisissez le nom de l'objet pour lequel vous souhaitez ajouter ou modifier le chiffrement.

    La page de détails de l'objet apparaît, avec plusieurs sections qui affichent les propriétés de votre objet.

  5. Choisissez l’onglet Propriétés.

  6. Faites défiler la page jusqu'à la section Paramètres de chiffrement côté serveur et choisissez Modifier.

    La page Modifier le chiffrement côté serveur s'ouvre.

  7. Sous Chiffrement côté serveur, pour Paramètres de chiffrement, choisissez Ignorer les paramètres de chiffrement par défaut du compartiment.

  8. Sous Type de chiffrement, choisissez Chiffrement côté serveur avec AWS Key Management Service clés (SSE-KMS).

    Important

    Si vous utilisez l'option SSE-KMS pour votre configuration de chiffrement par défaut, vous êtes soumis aux quotas RPS (demandes par seconde) de AWS KMS. Pour plus d'informations sur les quotas de AWS KMS et sur la procédure à suivre pour demander une augmentation des quotas, consultez Quotas dans le Guide du développeur AWS Key Management Service .

  9. Sous CléAWS KMS , choisissez votre clé KMS avec l'une des options suivantes :

    • Pour choisir parmi une liste de clés KMS disponibles, choisissez Choisir parmi vos AWS KMS keys, puis sélectionnez votre Clé KMS dans la liste des clés disponibles.

      La clé Clé gérée par AWS (aws/s3) et la clé gérée par votre client apparaissent toutes deux dans cette liste. Pour plus d'informations sur les clés gérées par le client, consultez Clés de client et clés AWS dans le Guide du développeur AWS Key Management Service .

    • Pour saisir l'ARN de la clé KMS, choisissez Enter AWS KMS key ARN, puis entrez l'ARN de votre clé KMS dans le champ qui apparaît.

    • Pour créer une nouvelle clé gérée par le client dans la AWS KMS console, choisissez Create a KMS key.

      Pour plus d'informations sur la création d'un AWS KMS key, consultez la section Création de clés dans le Guide du AWS Key Management Service développeur.

    Important

    Vous ne pouvez utiliser que les clés KMS disponibles dans le même compartiment Région AWS que le bucket. La console Amazon S3 répertorie uniquement les 100 premières clés KMS dans la même région que le compartiment. Pour utiliser une clé KMS qui n'est pas répertoriée, vous devez saisir l'ARN de votre clé KMS. Si vous souhaitez utiliser une clé KMS qui appartient à un autre compte, vous devez d'abord avoir l'autorisation d'utiliser cette clé KMS, puis saisir l'ARN de la clé KMS.

    Amazon S3 prend en charge seulement les clés KMS symétriques de chiffrement et ne prend pas en charge les clés KMS asymétriques. Pour plus d'informations, consultez la section Identifying symmetric and asymmetric KMS keys (Identification des clés KMS symétriques et asymétriques) dans le Guide du développeur AWS Key Management Service .

  10. Sélectionnez Save Changes (Enregistrer les modifications).

Note

Cette action applique le chiffrement à tous les objets spécifiés. Lorsque vous chiffrez des dossiers, attendez la fin de l'opération d'enregistrement pour ajouter de nouveaux objets au dossier.

Lorsque vous créez un objet, à savoir, lorsque vous chargez un nouvel objet ou copiez un objet existant, vous pouvez spécifier l'utilisation du chiffrement côté serveur avec des AWS KMS keys (SSE-KMS) pour chiffrer vos données. Pour ce faire, ajoutez l'en-tête x-amz-server-side-encryption à la demande. Configurez la valeur de l'en-tête sur l'algorithme de chiffrement aws:kms. Amazon S3 confirme que l'objet est stocké grâce à SSE-KMS en renvoyant l'en-tête de réponse x-amz-server-side-encryption.

Si vous spécifiez l'en-tête x-amz-server-side-encryption avec une valeur de aws:kms, vous pouvez également utiliser les en-têtes de demandes suivants :

  • x-amz-server-side-encryption-aws-kms-key-id

  • x-amz-server-side-encryption-context

  • x-amz-server-side-encryption-bucket-key-enabled

Opérations d'API REST Amazon S3 prenant en charge SSE-KMS

Les opérations d'API REST suivantes acceptent les en-têtes de demande x-amz-server-side-encryption, x-amz-server-side-encryption-aws-kms-key-id et x-amz-server-side-encryption-context.

  • PutObject— Lorsque vous téléchargez des données à l'aide de l'opération PUT API, vous pouvez spécifier ces en-têtes de demande.

  • CopyObject— Lorsque vous copiez un objet, vous disposez à la fois d'un objet source et d'un objet cible. Lorsque vous transmettez les en-têtes des SSE-KMS avec l'opération CopyObject, ils sont appliqués uniquement à l'objet cible. Lorsque vous copiez un objet existant, que l'objet source soit chiffré ou non, l'objet de destination n'est pas chiffré sauf si vous demandez explicitement un chiffrement côté serveur.

  • POST Object : lorsque vous utilisez une opération POST pour charger un objet, à la place des en-têtes de demande, vous fournissez les mêmes informations dans les champs du formulaire.

  • CreateMultipartUpload— Lorsque vous chargez des objets volumineux à l'aide de l'opération d'API de téléchargement en plusieurs parties, vous pouvez spécifier ces en-têtes. Vous spécifiez ces en-têtes dans la demande initiale du chargement partitionné.

Les en-têtes de réponse des opréations d'API REST suivantes renvoient l'en-tête x-amz-server-side-encryption lorsqu'un objet est stocké grâce au chiffrement côté serveur.

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 (Secure Sockets Layer), le protocole TLS (Transport Layer Security) ou Signature Version 4.

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

Contexte de chiffrement (x-amz-server-side-encryption-context)

Si vous spécifiez x-amz-server-side-encryption:aws:kms, l'API Simple Storage Service (Amazon S3) prend en charge un contexte de chiffrement avec l'en-tête x-amz-server-side-encryption-context. Un contexte de chiffrement est un ensemble de paires valeur clé qui contient des informations contextuelles supplémentaires sur les données.

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, vous utilisez l'ARN de l'objet comme contexte de chiffrement, par exemple, arn:aws:s3:::object_ARN. Toutefois, si vous utilisez SSE-KMS et activez une clé de compartiment S3, vous utilisez l'ARN du compartiment pour votre contexte de chiffrement, par exemple, 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. 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.

Pour plus d'informations sur le contexte de chiffrement dans Simple Storage Service (Amazon S3), consultez Contexte de chiffrement. Pour des informations générales sur le contexte de chiffrement, consultez la section Concepts AWS Key Management Service - Contexte de chiffrement du Guide du développeur AWS Key Management Service .

AWS KMS ID de clé (x-amz-server-side- encryption-aws-kms-key -id)

Vous pouvez utiliser l'en-tête x-amz-server-side-encryption-aws-kms-key-id pour spécifier l'ID de la clé gérée par le client utilisée pour protéger les données. Si vous spécifiez l'en-tête x-amz-server-side-encryption:aws:kms mais que vous ne fournissez pas l'en-tête x-amz-server-side-encryption-aws-kms-key-id, Amazon S3 utilisera la Clé gérée par AWS (aws/s3) pour protéger les données. Si vous souhaitez utiliser une clé gérée par le client, vous devrez fournir l'en-tête x-amz-server-side-encryption-aws-kms-key-id de la clé gérée par le client.

Important

Lorsque vous utilisez un 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 .

Clés de compartiment S3 (x-amz-server-sideencryption-aws-bucket-keyactivées)

Vous pouvez utiliser l'en-tête de demande x-amz-server-side-encryption-aws-bucket-key-enabled pour activer ou désactiver une clé de compartiment S3 au niveau de l'objet. Les clés de compartiment S3 réduisent les coûts de vos AWS KMS demandes en diminuant le trafic de demandes d'Amazon S3 vers AWS KMS. Pour de plus amples informations, veuillez consulter Réduction du coût du SSE-KMS avec les clés de compartiment Amazon S3.

Si vous spécifiez l'en-tête x-amz-server-side-encryption:aws:kms, mais que vous ne fournissez pas l'en-tête x-amz-server-side-encryption-aws-bucket-key-enabled, votre objet utilise les paramètres de clé de compartiment S3 du compartiment de destination pour chiffrer votre objet. Pour plus d’informations, consultez Configuration d'une clé de compartiment S3 au niveau d'un objet .

Lorsque vous chargez un nouvel objet ou que vous copiez un objet existant, vous pouvez spécifier l'utilisation du chiffrement côté serveur avec des AWS KMS clés pour chiffrer vos données. Pour ce faire, ajoutez l'en-tête --server-side-encryption aws:kms à la demande. Utilisez le --ssekms-key-id example-key-id pour ajouter la AWS KMS clé gérée par le client que vous avez créée. Si vous spécifiez--server-side-encryption aws:kms, mais que vous ne fournissez pas d'identifiant de AWS KMS clé, Amazon S3 utilisera une clé AWS gérée.

aws s3api put-object --bucket DOC-EXAMPLE-BUCKET --key example-object-key --server-side-encryption aws:kms --ssekms-key-id example-key-id --body filepath

Vous pouvez également activer ou désactiver les clés de compartiment Amazon S3 sur vos opérations PUT ou COPY en ajoutant --bucket-key-enabled ou --no-bucket-key-enabled. Les clés de compartiment Amazon S3 peuvent réduire les coûts de vos AWS KMS demandes en diminuant le trafic de demandes d'Amazon S3 vers AWS KMS. Pour plus d'informations, consultez Reducing the cost of SSE-KMS with Amazon S3 Bucket Keys (Réduire le coût de SSE-KMS à l'aide des clés de compartiment Amazon S3).

aws s3api put-object --bucket DOC-EXAMPLE-BUCKET --key example-object-key --server-side-encryption aws:kms --bucket-key-enabled --body filepath

Vous pouvez chiffrer un objet non chiffré pour utiliser SSE-KMS en recopiant l'objet en place.

aws s3api copy-object --bucket DOC-EXAMPLE-BUCKET --key example-object-key --body filepath --bucket DOC-EXAMPLE-BUCKET --key example-object-key --sse aws:kms --sse-kms-key-id example-key-id --body filepath

Lorsque vous utilisez AWS des SDK, vous pouvez demander à Amazon S3 de les utiliser AWS KMS keys pour le chiffrement côté serveur. Cette section fournit des exemples d'utilisation des AWS kits de développement logiciel pour Java et .NET. Pour plus d’informations sur les autres kits SDK, consultez Exemples de code et de bibliothèques.

Important

Lorsque vous utilisez un 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 .

Opération Copy

Lors de la copie d'objets, vous ajoutez les mêmes propriétés de demande (ServerSideEncryptionMethod et ServerSideEncryptionKeyManagementServiceKeyId) pour demander à Amazon S3 d'utiliser une AWS KMS key. Pour plus d'informations sur la copie d'objets, consultez Copie d'objets.

Opération PUT

Java

Lorsque vous chargez un objet à l'aide du AWS SDK for Java, vous pouvez demander à Amazon S3 d'utiliser un AWS KMS key en ajoutant la SSEAwsKeyManagementParams propriété comme indiqué dans la demande suivante.

PutObjectRequest putRequest = new PutObjectRequest(bucketName, keyName, file).withSSEAwsKeyManagementParams(new SSEAwsKeyManagementParams());

Dans ce cas, Amazon S3 utilise le Clé gérée par AWS (aws/s3) (voirUtilisation du chiffrement côté serveur à l'aide de AWS KMS clés (SSE-KMS). Si vous le souhaitez, vous pouvez créer une clé KMS symétrique de chiffrement et la spécifier dans la demande.

PutObjectRequest putRequest = new PutObjectRequest(bucketName, keyName, file).withSSEAwsKeyManagementParams(new SSEAwsKeyManagementParams(keyID));

Pour plus d'informations sur la création de clés gérées par le client, consultez la section Programmation de l' AWS KMS API dans le Guide du AWS Key Management Service développeur.

Pour obtenir des exemples de code utilisables pour charger un objet, consultez les rubriques suivantes. Pour utiliser ces exemples, vous devez mettre à jour les exemples de code et fournir des informations de chiffrement comme illustré dans le fragment de code précédent.

.NET

Lorsque vous chargez un objet à l'aide du AWS SDK for .NET, vous pouvez demander à Amazon S3 d'utiliser un AWS KMS key en ajoutant la ServerSideEncryptionMethod propriété comme indiqué dans la demande suivante.

PutObjectRequest putRequest = new PutObjectRequest { BucketName = DOC-EXAMPLE-BUCKET, Key = keyName, // other properties. ServerSideEncryptionMethod = ServerSideEncryptionMethod.AWSKMS };

Dans ce cas, Amazon S3 utilise le Clé gérée par AWS. Pour plus d’informations, consultez Utilisation du chiffrement côté serveur à l'aide de AWS KMS clés (SSE-KMS). Si vous le souhaitez, vous pouvez créer votre propre clé symétrique de chiffrement gérée par le client et la spécifier dans la demande.

PutObjectRequest putRequest1 = new PutObjectRequest { BucketName = DOC-EXAMPLE-BUCKET, Key = keyName, // other properties. ServerSideEncryptionMethod = ServerSideEncryptionMethod.AWSKMS, ServerSideEncryptionKeyManagementServiceKeyId = keyId };

Pour plus d'informations sur la création de clés gérées par le client, consultez la section Programmation de l' AWS KMS API dans le Guide du AWS Key Management Service développeur.

Pour obtenir des exemples de code utilisables pour charger un objet, consultez les rubriques suivantes. Pour utiliser ces exemples, vous devez mettre à jour les exemples de code et fournir des informations de chiffrement comme illustré dans le fragment de code précédent.

URL présignées

Java

Lorsque vous créez une URL présignée pour un objet chiffré avec un AWS KMS key, vous devez spécifier explicitement la version 4 de la signature.

ClientConfiguration clientConfiguration = new ClientConfiguration(); clientConfiguration.setSignerOverride("AWSS3V4SignerType"); AmazonS3Client s3client = new AmazonS3Client( new ProfileCredentialsProvider(), clientConfiguration); ...

Pour obtenir un exemple de code, consultez Partage d'objets à l'aide d'URL présignées.

.NET

Lorsque vous créez une URL présignée pour un objet chiffré avec un AWS KMS key, vous devez spécifier explicitement la version 4 de la signature.

AWSConfigs.S3Config.UseSignatureVersion4 = true;

Pour obtenir un exemple de code, consultez Partage d'objets à l'aide d'URL présignées.