Spécification du chiffrement côté serveur avec AWS KMS (SSE-KMS) pour les chargements de nouveaux objets dans des compartiments de répertoires - Amazon Simple Storage Service

Spécification du chiffrement côté serveur avec AWS KMS (SSE-KMS) pour les chargements de nouveaux objets dans des compartiments de répertoires

Pour les compartiments de répertoires, pour chiffrer vos données avec le chiffrement côté serveur, vous pouvez utiliser le chiffrement côté serveur avec des clés gérées par Amazon S3 (SSE-S3) (chiffrement défini par défaut) ou le chiffrement côté serveur avec des clés AWS Key Management Service (AWS KMS) (SSE-KMS). Nous recommandons que le chiffrement par défaut du compartiment utilise la configuration de chiffrement souhaitée et que vous ne remplaciez pas le chiffrement par défaut du compartiment dans vos demandes CreateSession ni dans vos demandes d’objets PUT. Les nouveaux objets seront ensuite automatiquement chiffrés avec les paramètres de chiffrement souhaités. Pour plus d’informations sur les comportements de remplacement du chiffrement dans les compartiments de répertoires, consultez Spécification du chiffrement côté serveur avec AWS KMS pour les nouveaux chargements d’objets.

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. Si vous souhaitez spécifier un type de chiffrement différent pour un compartiment de répertoires, vous pouvez utiliser le chiffrement côté serveur avec des clés AWS Key Management Service (AWS KMS) (SSE-KMS). Pour chiffrer de nouveaux objets dans un compartiment de répertoires avec SSE-KMS, vous devez spécifier SSE-KMS comme configuration de chiffrement par défaut de ce compartiment avec une clé KMS (plus spécifiquement, une clé gérée par le client). La Clé gérée par AWS (aws/s3) n’est pas prise en charge. Votre configuration SSE-KMS ne peut prendre en charge qu’une seule clé gérée par le client par compartiment de répertoires pendant toute la durée de vie du compartiment. Après avoir spécifié une clé gérée par le client pour SSE-KMS, vous ne pouvez pas remplacer cette clé pour la configuration SSE-KMS du compartiment. Ensuite, lorsque vous spécifierez les paramètres de chiffrement côté serveur pour les nouveaux objets avec SSE-KMS, vous devrez vous assurer que la clé de chiffrement est la clé gérée par le client que vous avez spécifiée pour la configuration de chiffrement par défaut du compartiment de répertoires. Pour utiliser une nouvelle clé gérée par le client pour vos données, nous vous recommandons de copier vos objets existants dans un nouveau compartiment de répertoires avec une nouvelle clé gérée par le client.

Vous pouvez appliquer le chiffrement lorsque vous chargez un nouvel objet ou copiez un objet existant. Si vous modifiez le chiffrement d’un objet, un nouvel objet est créé pour remplacer l’ancien.

Vous pouvez spécifier SSE-KMS à l’aide des opérations d’API REST, des kits AWS SDK et de l’AWS Command Line Interface (AWS CLI).

Note
  • Pour les compartiments de répertoires, les comportements de remplacement du chiffrement sont les suivants :

    • Lorsque vous utilisez CreateSession avec l’API REST pour authentifier et autoriser les demandes de l’API de point de terminaison zonal, à l’exception de CopyObject et UploadPartCopy, vous ne pouvez remplacer les paramètres de chiffrement par SSE-S3 ou SSE-KMS que si vous avez précédemment spécifié le chiffrement par défaut du compartiment avec SSE-KMS.

    • Lorsque vous utilisez CreateSession avec l’AWS CLI ou les kits AWS SDK pour authentifier et autoriser les demandes d’API de point de terminaison zonal, à l’exception de CopyObject et UploadPartCopy, vous ne pouvez pas du tout remplacer les paramètres de chiffrement.

    • Lorsque vous effectuez des demandes CopyObject, vous ne pouvez remplacer les paramètres de chiffrement par SSE-S3 ou SSE-KMS que si vous avez précédemment spécifié le chiffrement par défaut du compartiment avec SSE-KMS. Lorsque vous effectuez des demandes UploadPartCopy, vous ne pouvez pas remplacer les paramètres de chiffrement.

  • Vous pouvez utiliser une clé AWS KMS keys multi-régions 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 plus d’informations, consultez Utilisation des clés multi-régions dans le Guide du développeur AWS Key Management Service.

  • Si vous souhaitez utiliser une clé KMS qui appartient à un autre compte, vous devez avoir l’autorisation d’utiliser cette 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.

Note

Une seule clé gérée par le client est prise en charge par compartiment de répertoires pendant toute la durée de vie de ce compartiment. La Clé gérée par AWS (aws/s3) n’est pas prise en charge. Une fois que vous avez spécifié SSE-KMS comme configuration de chiffrement par défaut de votre compartiment avec une clé gérée par le client, vous ne pourrez plus modifier cette clé pour la configuration SSE-KMS du compartiment.

Pour les opérations d’API de point de terminaison zonal (au niveau de l’objet), à l’exception de CopyObject et d’UploadPartCopy, authentifiez et autorisez les demandes via CreateSession pour une faible latence. Nous recommandons que le chiffrement par défaut du compartiment utilise les configurations de chiffrement souhaitées et que vous ne remplaciez pas le chiffrement par défaut du compartiment dans vos demandes CreateSession ni dans vos demandes d’objets PUT. Les nouveaux objets seront ensuite automatiquement chiffrés avec les paramètres de chiffrement souhaités. Pour chiffrer de nouveaux objets dans un compartiment de répertoires avec SSE-KMS, vous devez spécifier SSE-KMS comme configuration de chiffrement par défaut de ce compartiment avec une clé KMS (plus spécifiquement, une clé gérée par le client). Ensuite, lorsqu’une session sera créée pour les opérations de l’API de point de terminaison zonal, les nouveaux objets seront automatiquement chiffrés et déchiffrés avec les clés SSE-KMS et les clés de compartiment S3 pendant la session. Pour plus d’informations sur les comportements de remplacement du chiffrement dans les compartiments de répertoires, consultez Spécification du chiffrement côté serveur avec AWS KMS pour les nouveaux chargements d’objets.

Dans les appels d’API de point de terminaison zonal (à l’exception de CopyObject et UploadPartCopy) avec l’API REST, vous ne pouvez pas remplacer les valeurs des paramètres de chiffrement (x-amz-server-side-encryption, x-amz-server-side-encryption-aws-kms-key-id, x-amz-server-side-encryption-context et x-amz-server-side-encryption-bucket-key-enabled) de la demande CreateSession. Il n’est pas nécessaire de spécifier explicitement les valeurs de ces paramètres de chiffrement dans les appels d’API de point de terminaison zonal. Amazon S3 utilisera les valeurs des paramètres de chiffrement de la demande CreateSession pour protéger les nouveaux objets dans le compartiment de répertoires.

Note

Lorsque vous utilisez l’AWS CLI ou les kits AWS SDK, pour CreateSession, le jeton de session est automatiquement actualisé afin d’éviter les interruptions de service à l’expiration d’une session. L’AWS CLI ou les kits AWS SDK utilisent la configuration de chiffrement par défaut du compartiment pour la demande CreateSession. Il n’est pas possible de remplacer les valeurs des paramètres de chiffrement dans la demande CreateSession. De plus, dans les appels d’API de point de terminaison zonal (à l’exception de CopyObject et d’UploadPartCopy), il n’est pas possible de remplacer les valeurs des paramètres de chiffrement de la demande CreateSession.

Pour CopyObject, pour chiffrer de nouvelles copies d’objets dans un compartiment de répertoires avec SSE-KMS, vous devez spécifier SSE-KMS comme configuration de chiffrement par défaut de ce compartiment avec une clé KMS (plus spécifiquement, une clé gérée par le client). Ensuite, lorsque vous spécifierez les paramètres de chiffrement côté serveur pour les nouvelles copies d’objets avec SSE-KMS, vous devrez vous assurer que la clé de chiffrement est la clé gérée par le client que vous avez spécifiée pour la configuration de chiffrement par défaut du compartiment de répertoires. Pour UploadPartCopy, pour chiffrer de nouvelles copies de parties d’objets dans un compartiment de répertoires avec SSE-KMS, vous devez spécifier SSE-KMS comme configuration de chiffrement par défaut de ce compartiment avec une clé KMS (plus spécifiquement, une clé gérée par le client). Vous ne pouvez pas spécifier de paramètres de chiffrement côté serveur pour les nouvelles copies de parties d’objets avec SSE-KMS dans les en-têtes de demande UploadPartCopy. De même, les paramètres de chiffrement que vous fournissez dans la demande CreateMultipartUpload doivent correspondre à la configuration de chiffrement par défaut du compartiment de destination.

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

Les opérations d’API REST suivantes au niveau de l’objet dans les compartiments de répertoires 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.

  • CreateSession – lorsque vous utilisez les opérations d’API de point de terminaison zonal (au niveau de l’objet) (à l’exception de CopyObject et UploadPartCopy), vous pouvez spécifier ces en-têtes de demande.

  • PutObject – Lorsque vous chargez des données avec l’opération d’API PUT, vous pouvez spécifier ces en-têtes de demande.

  • CopyObject – Lorsque vous copiez un objet, vous disposez d’un objet source et d’un objet cible. Lorsque vous transmettez les en-têtes SSE-KMS avec l’opération CopyObject, ils sont appliqués uniquement à l’objet cible.

  • CreateMultipartUpload – lorsque vous chargez des objets volumineux avec l’opération d’API de chargement partitionné, vous pouvez spécifier ces en-têtes. Vous spécifiez ces en-têtes dans la demande CreateMultipartUpload.

Les en-têtes de réponse des opérations 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 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.

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

Si vous spécifiez x-amz-server-side-encryption:aws:kms, l’API Amazon S3 vous permet de fournir un contexte de chiffrement explicite avec l’en-tête x-amz-server-side-encryption-context. Pour les compartiments de répertoires, un contexte de chiffrement est un ensemble de paires clé-valeur qui contient des informations contextuelles supplémentaires sur les données. La valeur doit correspondre au contexte de chiffrement par défaut, à savoir l’Amazon Resource Name (ARN) du compartiment. Aucune valeur supplémentaire de contexte de chiffrement n’est prise en charge.

Pour plus d’informations sur le contexte de chiffrement dans les compartiments de répertoires, consultez Contexte de chiffrement. Pour des informations générales sur le contexte de chiffrement, consultez Concepts AWS Key Management Service - Contexte de chiffrement dans le Guide du développeur AWS Key Management Service.

ID de clé AWS KMS (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.

Votre configuration SSE-KMS ne peut prendre en charge qu’une seule clé gérée par le client par compartiment de répertoires pendant toute la durée de vie du compartiment. La Clé gérée par AWS (aws/s3) n’est pas prise en charge. De même, après avoir spécifié une clé gérée par le client pour SSE-KMS, vous ne pouvez pas remplacer la clé gérée par le client pour la configuration SSE-KMS du compartiment.

Vous pouvez identifier la clé gérée par le client que vous avez spécifiée pour la configuration SSE-KMS du compartiment de la manière suivante :

  • Effectuez une demande d’opération d’API HeadObject pour trouver la valeur de x-amz-server-side-encryption-aws-kms-key-id dans la réponse.

Pour utiliser une nouvelle clé gérée par le client pour vos données, nous vous recommandons de copier vos objets existants dans un nouveau compartiment de répertoires avec une nouvelle clé gérée par le client.

Pour plus d’informations sur le contexte de chiffrement dans les compartiments de répertoires, consultez AWS KMS keys.

Clés de compartiment S3 (x-amz-server-side-encryption-aws-bucket-key-enabled)

Les clés de compartiment S3 sont toujours activées pour les opérations GET et PUT dans un compartiment de répertoires et ne peuvent pas être désactivées. Les clés de compartiment S3 ne sont pas prises en charge lorsque vous copiez des objets chiffrés avec SSE-KMS depuis des compartiments à usage général vers des compartiments de répertoires, depuis des compartiments de répertoires vers des compartiments à usage général ou entre des compartiments de répertoires, par le biais de CopyObject, d’UploadPartCopy, de l’opération Copy dans Batch Operations ou des tâches import. Dans ce cas, Amazon S3 appelle AWS KMS chaque fois qu’une demande de copie est faite par rapport à un objet chiffré KMS. Pour plus d’informations sur les clés de compartiment S3 dans les compartiments de répertoires, consultez Contexte de chiffrement.

Note

Lorsque vous utilisez l’AWS CLI, pour CreateSession, le jeton de session est automatiquement actualisé afin d’éviter les interruptions de service à l’expiration d’une session. Il n’est pas possible de remplacer les valeurs des paramètres de chiffrement pour la demande CreateSession. De plus, dans les appels d’API de point de terminaison zonal (à l’exception de CopyObject et d’UploadPartCopy), il n’est pas possible de remplacer les valeurs des paramètres de chiffrement de la demande CreateSession.

Pour chiffrer de nouveaux objets dans un compartiment de répertoires avec SSE-KMS, vous devez spécifier SSE-KMS comme configuration de chiffrement par défaut de ce compartiment avec une clé KMS (plus spécifiquement, une clé gérée par le client). Ensuite, lorsqu’une session sera créée pour les opérations de l’API de point de terminaison zonal, les nouveaux objets seront automatiquement chiffrés et déchiffrés avec les clés SSE-KMS et les clés de compartiment S3 pendant la session.

Pour utiliser les exemples de commandes AWS CLI suivants, remplacez les user input placeholders par vos propres informations.

Lorsque vous chargez un nouvel objet ou copiez un objet existant, vous pouvez spécifier l’utilisation du chiffrement côté serveur avec des clés AWS KMS pour chiffrer vos données. Pour ce faire, utilisez la commande put-bucket-encryption afin de définir la configuration de chiffrement par défaut du compartiment de répertoires en tant que chiffrement SSE-KMS (aws:kms). Plus précisément, ajoutez l’en-tête --server-side-encryption aws:kms à la demande. Utilisez --ssekms-key-id example-key-id pour ajouter la clé AWS KMS gérée par le client que vous avez créée. Si vous spécifiez --server-side-encryption aws:kms, vous devez fournir un identifiant de clé AWS KMS pour votre clé gérée par le client. Les compartiments de répertoires n’utilisent pas de clé gérée par AWS. Pour obtenir un exemple de commande, consultez Utilisation de la AWS CLI.

Ensuite, lorsque vous chargez un nouvel objet à l’aide de la commande suivante, Amazon S3 utilise les paramètres du compartiment pour le chiffrement par défaut afin de chiffrer l’objet par défaut.

aws s3api put-object --bucket bucket-base-name--zone-id--x-s3 --key example-object-key --body filepath

Vous n’avez pas besoin d’ajouter -\-bucket-key-enabled explicitement dans les commandes d’opérations d’API de point de terminaison zonal. Les clés de compartiment S3 sont toujours activées pour les opérations GET et PUT dans un compartiment de répertoires et ne peuvent pas être désactivées. Les clés de compartiment S3 ne sont pas prises en charge lorsque vous copiez des objets chiffrés avec SSE-KMS depuis des compartiments à usage général vers des compartiments de répertoires, depuis des compartiments de répertoires vers des compartiments à usage général ou entre des compartiments de répertoires, par le biais de CopyObject, d’UploadPartCopy, de l’opération Copy dans Batch Operations ou des tâches import. Dans ce cas, Amazon S3 appelle AWS KMS chaque fois qu’une demande de copie est faite par rapport à un objet chiffré KMS.

Vous pouvez copier un objet d’un compartiment source (par exemple, un compartiment à usage général) vers un nouveau compartiment (par exemple, un compartiment de répertoires) et utiliser le chiffrement SSE-KMS pour les objets de destination. Pour ce faire, utilisez la commande put-bucket-encryption afin de définir la configuration de chiffrement par défaut du compartiment de destination en tant que chiffrement SSE-KMS (aws:kms). Pour obtenir un exemple de commande, consultez Utilisation de la AWS CLI. Ensuite, lorsque vous copiez un objet à l’aide de la commande suivante, Amazon S3 utilise les paramètres du compartiment pour le chiffrement par défaut afin de chiffrer l’objet par défaut.

aws s3api copy-object --copy-source amzn-s3-demo-bucket/example-object-key --bucket bucket-base-name--zone-id--x-s3 --key example-object-key

Lorsque vous utilisez les kits AWS SDK, vous pouvez demander à Amazon S3 d’utiliser AWS KMS keys pour le chiffrement côté serveur. Les exemples suivants montrent comment utiliser SSE-KMS avec les kits AWS SDK pour Java et .NET. Pour plus d’informations sur l’utilisation d’autres kits SDK, consultez Exemples de code et de bibliothèques dans le centre pour développeur AWS.

Note

Lorsque vous utilisez les kits AWS SDK, pour CreateSession, le jeton de session est automatiquement actualisé afin d’éviter les interruptions de service à l’expiration d’une session. Il n’est pas possible de remplacer les valeurs des paramètres de chiffrement pour la demande CreateSession. De plus, dans les appels d’API de point de terminaison zonal (à l’exception de CopyObject et d’UploadPartCopy), il n’est pas possible de remplacer les valeurs des paramètres de chiffrement de la demande CreateSession.

Pour chiffrer de nouveaux objets dans un compartiment de répertoires avec SSE-KMS, vous devez spécifier SSE-KMS comme configuration de chiffrement par défaut de ce compartiment avec une clé KMS (plus spécifiquement, une clé gérée par le client). Ensuite, lorsqu’une session sera créée pour les opérations de l’API de point de terminaison zonal, les nouveaux objets seront automatiquement chiffrés et déchiffrés avec les clés SSE-KMS et les clés de compartiment S3 pendant la session.

Pour plus d’informations sur l’utilisation des kits AWS SDK pour définir la configuration de chiffrement par défaut d’un compartiment de répertoires avec SSE-KMS, consultez Utilisation des kits AWS SDK.

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.

Pour en savoir plus sur la création des clés gérées par le client, consultez Programmation de l’API AWS KMS dans le guide du développeur AWS Key Management Service.