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 des clés gérées par Amazon S3 (SSE-S3) comme niveau de chiffrement de base 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 logs, S3 Inventory, S3 Storage Lens, console Amazon S3 et en tant qu'en-tête de API réponse Amazon S3 supplémentaire dans le AWS Command Line Interface and AWS SDKs. Pour plus d'informations, consultez la section Chiffrement par défaut FAQ.

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 d'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 autre type de chiffrement dans vos PUT demandes, vous pouvez utiliser le chiffrement côté serveur avec AWS Key Management Service (AWS KMS) clés (SSE-KMS), chiffrement double couche côté serveur avec AWS KMS clés (DSSE-KMS) ou chiffrement côté serveur avec des clés fournies par le client (-C). SSE 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écifierSSE, à KMS l'aide de la console Amazon S3, REST API les opérations, AWS SDKs, et le 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 plus d'informations, voir Utilisation de clés multirégionales dans AWS Key Management Service Guide du développeur.

Note

Si vous souhaitez utiliser une KMS clé appartenant à un autre compte, vous devez être autorisé à l'utiliser. Pour plus d'informations sur les autorisations relatives aux KMS clés entre comptes, consultez la section Création de KMS clés utilisables par d'autres comptes dans le AWS Key Management Service Guide du développeur.

Cette rubrique explique comment définir ou modifier le type de chiffrement d'un objet pour utiliser le chiffrement côté serveur avec AWS Key Management Service (AWS KMS) touches (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).

  • Si vous modifiez le type de chiffrement d'un objet doté de balises définies par l'utilisateur, vous devez disposer de cette s3:GetObjectTagging autorisation. Si vous modifiez le type de chiffrement d'un objet qui ne possède pas de balises définies par l'utilisateur mais dont la taille est supérieure à 16 Mo, vous devez également disposer de l's3:GetObjectTaggingautorisation.

    Si la politique du compartiment de destination refuse l's3:GetObjectTaggingaction, le type de chiffrement de l'objet sera mis à jour, mais les balises définies par l'utilisateur seront supprimées de l'objet et vous recevrez un message d'erreur.

Pour ajouter ou modifier le chiffrement d'un objet
  1. Connectez-vous au AWS Management Console et ouvrez la console Amazon S3 à 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'KMSoption SSE - pour votre configuration de chiffrement par défaut, vous êtes soumis aux quotas de demandes par seconde (RPS) de AWS KMS. Pour plus d'informations sur AWS KMS les quotas et comment demander une augmentation de quota, voir Quotas dans le AWS Key Management Service Guide du développeur.

  9. Sous AWS KMS touche, effectuez l'une des opérations suivantes pour choisir votre KMS clé :

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

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

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

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

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

    Important

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

    Amazon S3 ne prend en charge que les KMS clés de chiffrement symétriques, et non les clés asymétriquesKMS. Pour plus d'informations, consultez la section Identification des KMS clés symétriques et asymétriques dans le AWS Key Management Service Guide du développeur.

  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, c'est-à-dire lorsque vous téléchargez un nouvel objet ou que vous copiez un objet existant, vous pouvez spécifier l'utilisation du chiffrement côté serveur avec 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 votre objet est stocké à l'aide de SSE - KMS en renvoyant l'en-tête de réponsex-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

RESTAPIOpérations Amazon S3 qui prennent en charge SSE : KMS

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

  • PutObject— Lorsque vous téléchargez des données à l'aide de cette PUT API opération, 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 SSE KMS des en-têtes à l'CopyObjectopération, ils ne sont appliqués qu'à 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 le chiffrement côté serveur.

  • POST Object— Lorsque vous utilisez une POST opération pour télécharger un objet, au lieu 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'APIopération de téléchargement partitionné, vous pouvez spécifier ces en-têtes. Vous spécifiez ces en-têtes dans la CreateMultipartUpload demande.

Les en-têtes de réponse des REST API opérations suivantes renvoient l'x-amz-server-side-encryptionen-tête lorsqu'un objet est stocké à l'aide du chiffrement côté serveur.

Important
  • Toutes GET les PUT demandes concernant un objet protégé par AWS KMS échouent si vous n'effectuez pas ces demandes à l'aide de Secure Sockets Layer (SSL), Transport Layer Security (TLS) ou Signature Version 4.

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

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

Si vous le spécifiezx-amz-server-side-encryption:aws:kms, Amazon S3 API prend en charge un contexte de chiffrement avec l'x-amz-server-side-encryption-contexten-tête. 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'objet ou le bucket Amazon Resource Name (ARN) comme paire de contextes de chiffrement. Si vous utilisez SSE - KMS sans activer de clé de compartiment S3, vous utilisez l'objet ARN 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 le compartiment ARN 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, voir AWS Key Management Service Concepts - Contexte du chiffrement dans le AWS Key Management Service Guide du développeur.

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'x-amz-server-side-encryption:aws:kmsen-tête mais que vous ne le x-amz-server-side-encryption-aws-kms-key-id fournissez pas, Amazon S3 utilise 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é de chiffrement symétrique. KMS Amazon S3 prend uniquement en charge les KMS clés de chiffrement symétriques. Pour plus d'informations sur ces clés, consultez la section Clés de KMSchiffrement symétriques dans le AWS Key Management Service Guide du développeur.

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

Vous pouvez utiliser l'en-tête de x-amz-server-side-encryption-aws-bucket-key-enabled demande pour activer ou désactiver une clé de compartiment S3 au niveau de l'objet. Les clés de compartiment S3 réduisent votre AWS KMS les coûts liés aux demandes en diminuant le trafic de demandes depuis Amazon S3 vers AWS KMS. Pour plus d'informations, consultezRéduction du coût de 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 de plus amples informations, veuillez consulter Configuration d'une clé de compartiment S3 au niveau d'un objet .

Pour utiliser l'exemple suivant AWS CLI commandes, remplacez-les user input placeholders par vos propres informations.

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 AWS KMS des 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 votre compte client géré AWS KMS clé que vous avez créée. Si vous spécifiez--server-side-encryption aws:kms, mais ne fournissez pas de AWS KMS ID de clé, Amazon S3 utilisera un AWS clé gérée.

aws s3api put-object --bucket amzn-s3-demo-bucket --key example-object-key --server-side-encryption aws:kms --ssekms-key-id example-key-id --ssekms-encryption-context example-encryption-context --body filepath

Vous pouvez activer ou désactiver les clés de compartiment S3 sur vos copy-object opérations put-object ou en ajoutant --bucket-key-enabled ou--no-bucket-key-enabled. Les clés de compartiment S3 peuvent réduire votre AWS KMS les coûts liés aux demandes en diminuant le trafic de demandes depuis Amazon S3 vers AWS KMS. Pour plus d'informations, consultez Réduire le coût de SSE - KMS avec les clés de compartiment S3.

aws s3api put-object --bucket amzn-s3-demo-bucket --key example-object-key --server-side-encryption aws:kms --bucket-key-enabled --body filepath

Vous pouvez copier un objet d'un compartiment source vers un nouveau compartiment et spécifier SSE KMS le chiffrement.

aws s3api copy-object --copy-source amzn-s3-demo-bucket/example-object-key --bucket amzn-s3-demo-bucket2 --key example-object-key --server-side-encryption aws:kms --sse-kms-key-id example-key-id --ssekms-encryption-context example-encryption-context

Lors de l'utilisation AWS SDKs, 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 AWS SDKspour Java et. NET. Pour plus d'informations sur les autresSDKs, consultez la section Exemples de code et de bibliothèques sur le AWS Centre pour développeurs.

Important

Lorsque vous utilisez un AWS KMS key pour le chiffrement côté serveur dans Amazon S3, vous devez choisir une clé de chiffrement symétrique. KMS Amazon S3 prend uniquement en charge les KMS clés de chiffrement symétriques. Pour plus d'informations sur ces clés, consultez la section Clés de KMSchiffrement symétriques dans le AWS Key Management Service Guide du développeur.

Opération CopyObject

Lorsque vous copiez des objets, vous ajoutez les mêmes propriétés de demande (ServerSideEncryptionMethodetServerSideEncryptionKeyManagementServiceKeyId) pour demander à Amazon S3 d'utiliser un AWS KMS key. Pour plus d'informations sur la copie d'objets, consultezCopier, déplacer et renommer des 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 Clé gérée par AWS (aws/s3). Pour plus d'informations, consultezUtilisation du chiffrement côté serveur avec AWS KMS clés (SSE-KMS). Vous pouvez éventuellement créer une KMS clé de chiffrement symétrique et la spécifier dans la demande, comme illustré dans l'exemple suivant :

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, voir Programmation du AWS KMS APIdans le AWS Key Management Service Guide du 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 = amzn-s3-demo-bucket, Key = keyName, // other properties ServerSideEncryptionMethod = ServerSideEncryptionMethod.AWSKMS };

Dans ce cas, Amazon S3 utilise Clé gérée par AWS. Pour plus d'informations, consultezUtilisation du chiffrement côté serveur avec AWS KMS clés (SSE-KMS). Vous pouvez éventuellement créer votre propre clé de chiffrement symétrique gérée par le client et la spécifier dans la demande, comme illustré dans l'exemple suivant :

PutObjectRequest putRequest1 = new PutObjectRequest { BucketName = amzn-s3-demo-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, voir Programmation du AWS KMS APIdans le AWS Key Management Service Guide du 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.

Présigné URLs

Java

Lors de la création d'un présigné URL pour un objet chiffré avec un AWS KMS key, vous devez spécifier explicitement la version 4 de la signature, comme illustré dans l'exemple suivant :

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

Pour obtenir un exemple de code, consultez Partage d'objets avec présigné URLs.

.NET

Lors de la création d'un présigné URL pour un objet chiffré avec un AWS KMS key, vous devez spécifier explicitement la version 4 de la signature, comme illustré dans l'exemple suivant :

AWSConfigs.S3Config.UseSignatureVersion4 = true;

Pour obtenir un exemple de code, consultez Partage d'objets avec présigné URLs.