

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.

# Utilisation du chiffrement côté serveur avec des clés gérées par Amazon S3 (SSE-S3)
<a name="UsingServerSideEncryption"></a>

**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 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 le AWS CLI et AWS SDKs. Pour plus d’informations, consultez la [FAQ sur le chiffrement par défaut](https://docs.aws.amazon.com/AmazonS3/latest/userguide/default-encryption-faq.html).

Tous les nouveaux chargements d’objets dans les compartiments Amazon S3 sont chiffrés par défaut à l’aide du chiffrement côté serveur avec les clés gérées Amazon S3 (SSE-S3).

Le chiffrement côté serveur protège les données au repos. Amazon S3 chiffre chaque objet à l’aide d’une clé unique. Comme protection supplémentaire, il chiffre la clé elle-même à l’aide d’une clé dont il effectue une rotation régulière. Le chiffrement côté serveur Amazon S3 utilise le mode AES-GCM (Advanced Encryption Standard Galois/Counter Mode) 256 bits pour chiffrer tous les objets chargés.

L’utilisation du chiffrement côté serveur avec les clés gérées par Amazon S3 (SSE-S3) n’entraîne pas de frais supplémentaires. Toutefois, les demandes de configuration de la fonction de chiffrement par défaut seront facturées comme des demandes Amazon S3 standard. Pour obtenir des informations sur la tarification, consultez [Tarification Amazon S3](https://aws.amazon.com/s3/pricing/).

Si vous souhaitez que vos chargements de données soient chiffrés à l’aide de clés gérées uniquement par Amazon S3, vous pouvez utiliser la stratégie de compartiment suivante. Par exemple, la stratégie de compartiment suivante refuse les autorisations de charger un objet si la demande n’inclut pas l’en-tête `x-amz-server-side-encryption` demandant le chiffrement côté serveur :

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Id": "PutObjectPolicy",
  "Statement": [
    {
      "Sid": "DenyObjectsThatAreNotSSES3",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:PutObject",
      "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*",
      "Condition": {
        "StringNotEquals": {
          "s3:x-amz-server-side-encryption": "AES256"
        }
      }
    }
   ]
}
```

------

**Note**  
Un chiffrement côté serveur chiffre uniquement les données d’objet, pas les métadonnées d’objet. 

## Prise en charge de l’API pour le chiffrement côté serveur
<a name="APISupportforServer-SideEncryption"></a>

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 S3 `PUT`, soit actualiser la configuration du 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.

Pour plus d’informations sur la modification de la configuration du chiffrement par défaut de vos compartiments à usage général, consultez [Configuration du chiffrement par défaut](default-bucket-encryption.md). 

Lorsque vous remplacez la configuration du chiffrement par défaut de votre compartiment par SSE-KMS, le type de chiffrement des objets Amazon S3 existants du compartiment n’est pas modifié. Pour modifier le type de chiffrement de vos objets préexistants après avoir remplacé la configuration de chiffrement par défaut par SSE-KMS, vous pouvez utiliser Amazon S3 Batch Operations. Vous fournissez une liste d’objets à S3 Batch Operations, qui appelle l’opération d’API correspondante. Vous pouvez utiliser l’action [Copie d’objets](batch-ops-copy-object.md) pour copier des objets existants et les réécrire dans le même compartiment en tant qu’objets chiffrés par SSE-KMS. Une tâche d’opérations par lots peut effectuer l’opération spécifiée sur des milliards d’objets. Pour plus d’informations, consultez [Exécution d’opérations groupées sur des objets avec Batch Operations](batch-ops.md) et la publication [How to retroactively encrypt existing objects in Amazon S3 using S3 Inventory, Amazon Athena, and S3 Batch Operations](https://aws.amazon.com/blogs/security/how-to-retroactively-encrypt-existing-objects-in-amazon-s3-using-s3-inventory-amazon-athena-and-s3-batch-operations/) dans le *blog sur le stockage AWS *. 

Pour configurer le chiffrement côté serveur à l'aide du REST de création d'objets APIs, vous devez fournir l'en-tête de `x-amz-server-side-encryption` demande. Pour plus d'informations sur le REST APIs, consultez[Utilisation de l'API REST](specifying-s3-encryption.md#SSEUsingRESTAPI).

Les Amazon S3 suivants APIs prennent en charge cet en-tête :
+ **Opérations PUT** : spécifiez l’en-tête de demande lors du chargement des données grâce à l’API `PUT`. Pour plus d’informations, consultez [Objet PUT](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html).
+ **Lancement du chargement partitionné** : spécifiez l’en-tête dans la demande initiale lors du chargement d’objets volumineux grâce à l’API de chargement partitionné. Pour plus d’informations, consultez [Lancement du chargement partitionné](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadInitiate.html).
+ **Opérations COPY** : lorsque vous copiez un objet, vous disposez à la fois d’un objet source et d’un objet cible. Pour plus d’informations, consultez [Objet PUT - Copy](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html).

**Note**  
Lors de l’utilisation d’une opération `POST` pour charger un objet, à la place de l’en-tête de demande, vous fournissez les mêmes informations dans les champs du formulaire. Pour plus d’informations, consultez [POST Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html). 

Ils fournissent AWS SDKs également un wrapper APIs que vous pouvez utiliser pour demander un chiffrement côté serveur. Vous pouvez également utiliser le AWS Management Console pour télécharger des objets et demander un chiffrement côté serveur.

Pour obtenir des informations plus générales, consultez [Concepts AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html) dans le *Guide du développeur AWS Key Management Service *.

**Topics**
+ [Prise en charge de l’API pour le chiffrement côté serveur](#APISupportforServer-SideEncryption)
+ [Spécification du chiffrement côté serveur avec des clés gérées par Amazon S3 (SSE-S3)](specifying-s3-encryption.md)

# Spécification du chiffrement côté serveur avec des clés gérées par Amazon S3 (SSE-S3)
<a name="specifying-s3-encryption"></a>

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 S3 `PUT`, soit actualiser la configuration du 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.

Pour plus d’informations sur la modification de la configuration du chiffrement par défaut de vos compartiments à usage général, consultez [Configuration du chiffrement par défaut](default-bucket-encryption.md). 

Lorsque vous remplacez la configuration du chiffrement par défaut de votre compartiment par SSE-KMS, le type de chiffrement des objets Amazon S3 existants du compartiment n’est pas modifié. Pour modifier le type de chiffrement de vos objets préexistants après avoir remplacé la configuration de chiffrement par défaut par SSE-KMS, vous pouvez utiliser Amazon S3 Batch Operations. Vous fournissez une liste d’objets à S3 Batch Operations, qui appelle l’opération d’API correspondante. Vous pouvez utiliser l’action [Copie d’objets](batch-ops-copy-object.md) pour copier des objets existants et les réécrire dans le même compartiment en tant qu’objets chiffrés par SSE-KMS. Une tâche d’opérations par lots peut effectuer l’opération spécifiée sur des milliards d’objets. Pour plus d’informations, consultez [Exécution d’opérations groupées sur des objets avec Batch Operations](batch-ops.md) et la publication [How to retroactively encrypt existing objects in Amazon S3 using S3 Inventory, Amazon Athena, and S3 Batch Operations](https://aws.amazon.com/blogs/security/how-to-retroactively-encrypt-existing-objects-in-amazon-s3-using-s3-inventory-amazon-athena-and-s3-batch-operations/) dans le *blog sur le stockage AWS *. 

Vous pouvez spécifier SSE-S3 à l'aide de la console S3 APIs AWS SDKs, REST et AWS Command Line Interface ()AWS CLI. Pour de plus amples informations, veuillez consulter [Définition du comportement de chiffrement côté serveur par défaut pour les compartiments Amazon S3](bucket-encryption.md).

## Utilisation de la console S3
<a name="add-object-encryption-s3"></a>

Cette rubrique décrit comment définir ou modifier le type de chiffrement qu’un objet utilise à l’aide de la AWS Management Console. Lorsque vous copiez un objet en utilisant la console, Amazon S3 copie l’objet en l’état. Cela signifie que si l’objet source est chiffré, l’objet cible est également chiffré. La console vous permet d’ajouter ou de modifier le chiffrement d’un objet. 

**Note**  
Vous pouvez modifier le chiffrement d’un objet si sa taille est inférieure à 5 Go. Si la taille de votre objet est supérieure à 5 Go, vous devez utiliser le [AWS CLI](mpu-upload-object.md#UsingCLImpUpload)ou [AWS SDKs](CopyingObjectsMPUapi.md)pour modifier le chiffrement d'un objet.
Pour obtenir la liste des autorisations supplémentaires requises pour modifier le chiffrement d’un objet, consultez [Autorisations requises pour les opérations d’API Amazon S3](using-with-s3-policy-actions.md). Pour obtenir un exemple de politiques qui accorde ces autorisations, consultez [Exemples de politiques basées sur l’identité pour Amazon S3](example-policies-s3.md).
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 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/](https://console.aws.amazon.com/s3/).

1. Dans le volet de navigation, choisissez **Compartiments**, puis l’onglet **Compartiments à usage général**. Accédez au compartiment ou au dossier Amazon S3 contenant les objets que vous souhaitez modifier.

1. Cochez la case correspondant aux objets à modifier.

1. Dans le menu **Actions**, choisissez **Modifier le chiffrement côté serveur** dans la liste d’options qui s’affiche.

1. Accédez à la section **Chiffrement côté serveur**.

1. Sous **Paramètres de chiffrement**, choisissez **Utiliser les paramètres du compartiment pour le chiffrement par défaut** ou **Ignorer les paramètres du compartiment pour le chiffrement par défaut**.

1. Si vous avez choisi **Ignorer les paramètres de chiffrement par défaut du compartiment**, configurez les paramètres de chiffrement suivants.

   1. Sous **Type de chiffrement**, choisissez **Server-side encryption with Amazon S3 managed keys (SSE-S3)** (Chiffrement côté serveur avec clés de chiffrement gérées par Amazon S3 (SSE-S3)). SSE-S3 utilise l'un des chiffrements par bloc les plus puissants qui existent, Advanced Encryption Standard à 256 bits (AES-256) pour chiffrer chaque objet. Pour de plus amples informations, veuillez consulter [Utilisation du chiffrement côté serveur avec des clés gérées par Amazon S3 (SSE-S3)](UsingServerSideEncryption.md).

1. Sous **Paramètres de copie supplémentaires**, choisissez **Copie des paramètres source**, **Aucune spécification de paramètres** ou **Spécification des paramètres**. L’option par défaut est **Copie des paramètres source**. Si vous souhaitez uniquement copier l’objet sans les attributs des paramètres source, choisissez **Aucune spécification de paramètres**. Choisissez **Spécifier les paramètres** pour définir les paramètres de classe de stockage ACLs, les balises d'objet, les métadonnées, le chiffrement côté serveur et les sommes de contrôle supplémentaires.

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

## Utilisation de l'API REST
<a name="SSEUsingRESTAPI"></a>

Lors de la création d’un objet (c’est-à-dire lorsque vous chargez un nouvel objet ou effectuez une copie d’un objet existant), vous pouvez spécifier si vous souhaitez qu’Amazon S3 chiffre vos données avec des clés gérées par Amazon S3 (SSE-S3) en ajoutant l’en-tête `x-amz-server-side-encryption` à la demande. Définissez la valeur de l’en-tête sur l’algorithme de chiffrement `AES256` pris en charge par Amazon S3. Amazon S3 confirme que votre objet est stocké avec SSE-KMS en renvoyant l’en-tête de réponse `x-amz-server-side-encryption`. 

Les opérations d’API de chargement REST suivantes acceptent l’en-tête de demande `x-amz-server-side-encryption`.
+ [PUT Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html)
+ [PUT Object - Copy](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html)
+ [POST Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html)
+ [Lancement du chargement partitionné](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadInitiate.html)

Lors du chargement d’objets volumineux à l’aide de l’opération d’API de chargement partitionné, vous pouvez spécifier un chiffrement côté serveur en ajoutant l’en-tête `x-amz-server-side-encryption` à la demande de lancement de chargement partitionné. 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.

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 à SSE-S3. 
+ [PUT Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html)
+ [PUT Object - Copy](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html)
+ [POST Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPOST.html)
+ [Lancement du chargement partitionné](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadInitiate.html)
+ [Chargement d’une partie](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadUploadPart.html)
+ [Chargement d’une partie (Copy)](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadUploadPartCopy.html)
+ [Achèvement du chargement partitionné](https://docs.aws.amazon.com/AmazonS3/latest/API/mpUploadComplete.html)
+ [Get Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGET.html)
+ [Head Object](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectHEAD.html)

**Note**  
N’envoyez pas d’en-têtes de demande de chiffrement pour les demandes `GET` et `HEAD` si votre objet utilise SSE-S3 ou vous obtiendrez une erreur code d’état HTTP 400 (Demande erronée).

## En utilisant le AWS SDKs
<a name="s3-using-sdks"></a>

Lors de l'utilisation AWS SDKs, vous pouvez demander à Amazon S3 d'utiliser le chiffrement côté serveur avec des clés de chiffrement gérées par Amazon S3 (SSE-S3). Cette section fournit des exemples d'utilisation du AWS SDKs dans plusieurs langues. Pour plus d'informations sur les autres SDKs, reportez-vous à la [section Exemples de code et bibliothèques](https://aws.amazon.com/code). 

------
#### [ Java ]

Lorsque vous utilisez le AWS SDK pour Java pour télécharger un objet, vous pouvez utiliser SSE-S3 pour le chiffrer. Pour demander un chiffrement côté serveur, utilisez la propriété `ObjectMetadata` de la demande `PutObjectRequest` pour définir l’en-tête de demande `x-amz-server-side-encryption`. Lorsque vous appelez la méthode `putObject()` du `AmazonS3Client`, Amazon S3 chiffre et enregistre les données.

Vous pouvez également demander le chiffrement SSE-S3 lors du chargement d’objet avec l’opération d’API de chargement partitionné : 
+ Lorsque vous utilisez l’opération d’API de chargement partitionné de haut niveau, vous utilisez les méthodes `TransferManager` pour appliquer le chiffrement côté serveur aux objets à mesure que vous les chargez. Vous pouvez utiliser n’importe quelle méthode de chargement qui accepte `ObjectMetadata` comme paramètre. Pour plus d’informations, consultez [Chargement d’un objet à l’aide du chargement partitionné](mpu-upload-object.md).
+ Lorsque vous utilisez l’opération d’API de chargement partitionné de bas niveau, vous spécifiez le chiffrement côté serveur quand vous lancez le chargement partitionné. Vous ajoutez la propriété `ObjectMetadata` en appelant la méthode `InitiateMultipartUploadRequest.setObjectMetadata()`. Pour plus d’informations, consultez [Utilisation de AWS SDKs (API de bas niveau)](mpu-upload-object.md#mpu-upload-low-level).

Vous ne pouvez pas modifier directement l’état de chiffrement d’un objet (chiffrer un objet non chiffré ou déchiffrer un objet chiffré). Pour modifier l’état de chiffrement d’un objet, vous effectuez une copie de l’objet, en spécifiant l’état de chiffrement voulu pour la copie, puis supprimez l’objet d’origine. Amazon S3 chiffre l’objet copié uniquement si vous demandez explicitement un chiffrement côté serveur. Pour demander le chiffrement de l’objet copié via l’API Java, utilisez la propriété `ObjectMetadata` pour spécifier le chiffrement côté serveur dans la demande `CopyObjectRequest`.

**Example Exemple**  
L’exemple suivant illustre comment définir le chiffrement côté serveur à l’aide du kit AWS SDK pour Java. Il explique comment effectuer les tâches suivantes :  
+ Chargez un nouvel objet à l’aide de SSE-S3.
+ Modifier l’état de chiffrement d’un objet (dans cet exemple, chiffrer un objet précédemment non chiffré) en effectuant une copie de l’objet.
+ Vérifier l’état de chiffrement de l’objet.
Pour plus d’informations sur le chiffrement côté serveur, consultez [Utilisation de l'API REST](#SSEUsingRESTAPI). Pour obtenir des instructions sur la création et le test d'un échantillon fonctionnel, voir [Getting Started](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/getting-started.html) dans le guide du AWS SDK pour Java développeur.  

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.internal.SSEResultBase;
import com.amazonaws.services.s3.model.*;

import java.io.ByteArrayInputStream;

public class SpecifyServerSideEncryption {

    public static void main(String[] args) {
        Regions clientRegion = Regions.DEFAULT_REGION;
        String bucketName = "*** Bucket name ***";
        String keyNameToEncrypt = "*** Key name for an object to upload and encrypt ***";
        String keyNameToCopyAndEncrypt = "*** Key name for an unencrypted object to be encrypted by copying ***";
        String copiedObjectKeyName = "*** Key name for the encrypted copy of the unencrypted object ***";

        try {
            AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                    .withRegion(clientRegion)
                    .withCredentials(new ProfileCredentialsProvider())
                    .build();

            // Upload an object and encrypt it with SSE.
            uploadObjectWithSSEEncryption(s3Client, bucketName, keyNameToEncrypt);

            // Upload a new unencrypted object, then change its encryption state
            // to encrypted by making a copy.
            changeSSEEncryptionStatusByCopying(s3Client,
                    bucketName,
                    keyNameToCopyAndEncrypt,
                    copiedObjectKeyName);
        } catch (AmazonServiceException e) {
            // The call was transmitted successfully, but Amazon S3 couldn't process
            // it, so it returned an error response.
            e.printStackTrace();
        } catch (SdkClientException e) {
            // Amazon S3 couldn't be contacted for a response, or the client
            // couldn't parse the response from Amazon S3.
            e.printStackTrace();
        }
    }

    private static void uploadObjectWithSSEEncryption(AmazonS3 s3Client, String bucketName, String keyName) {
        String objectContent = "Test object encrypted with SSE";
        byte[] objectBytes = objectContent.getBytes();

        // Specify server-side encryption.
        ObjectMetadata objectMetadata = new ObjectMetadata();
        objectMetadata.setContentLength(objectBytes.length);
        objectMetadata.setSSEAlgorithm(ObjectMetadata.AES_256_SERVER_SIDE_ENCRYPTION);
        PutObjectRequest putRequest = new PutObjectRequest(bucketName,
                keyName,
                new ByteArrayInputStream(objectBytes),
                objectMetadata);

        // Upload the object and check its encryption status.
        PutObjectResult putResult = s3Client.putObject(putRequest);
        System.out.println("Object \"" + keyName + "\" uploaded with SSE.");
        printEncryptionStatus(putResult);
    }

    private static void changeSSEEncryptionStatusByCopying(AmazonS3 s3Client,
            String bucketName,
            String sourceKey,
            String destKey) {
        // Upload a new, unencrypted object.
        PutObjectResult putResult = s3Client.putObject(bucketName, sourceKey, "Object example to encrypt by copying");
        System.out.println("Unencrypted object \"" + sourceKey + "\" uploaded.");
        printEncryptionStatus(putResult);

        // Make a copy of the object and use server-side encryption when storing the
        // copy.
        CopyObjectRequest request = new CopyObjectRequest(bucketName,
                sourceKey,
                bucketName,
                destKey);
        ObjectMetadata objectMetadata = new ObjectMetadata();
        objectMetadata.setSSEAlgorithm(ObjectMetadata.AES_256_SERVER_SIDE_ENCRYPTION);
        request.setNewObjectMetadata(objectMetadata);

        // Perform the copy operation and display the copy's encryption status.
        CopyObjectResult response = s3Client.copyObject(request);
        System.out.println("Object \"" + destKey + "\" uploaded with SSE.");
        printEncryptionStatus(response);

        // Delete the original, unencrypted object, leaving only the encrypted copy in
        // Amazon S3.
        s3Client.deleteObject(bucketName, sourceKey);
        System.out.println("Unencrypted object \"" + sourceKey + "\" deleted.");
    }

    private static void printEncryptionStatus(SSEResultBase response) {
        String encryptionStatus = response.getSSEAlgorithm();
        if (encryptionStatus == null) {
            encryptionStatus = "Not encrypted with SSE";
        }
        System.out.println("Object encryption status is: " + encryptionStatus);
    }
}
```

------
#### [ .NET ]

Lorsque vous chargez un objet, vous pouvez indiquer à Amazon S3 de le chiffrer. Pour modifier l’état de chiffrement d’un objet existant, vous effectuez une copie de l’objet et supprimez l’objet source. Par défaut, l’opération de copie ne chiffre la cible que si vous demandez explicitement un chiffrement côté serveur de l’objet cible. Pour spécifier SSE-S3 dans `CopyObjectRequest`, ajoutez ce qui suit :

```
 ServerSideEncryptionMethod = ServerSideEncryptionMethod.AES256
```

Pour obtenir un exemple pratique sur la façon de copier un objet, consultez [À l'aide du AWS SDKs](copy-object.md#CopyingObjectsUsingSDKs). 

L’exemple suivant permet de charger un objet. Dans la demande, l’exemple indique à Amazon S3 de chiffrer l’objet. L’exemple récupère ensuite les métadonnées de l’objet et vérifie la méthode de chiffrement utilisée. Pour plus d'informations sur la configuration et l'exécution des exemples de code, consultez [Getting Started with the AWS SDK for](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/net-dg-setup.html) .NET dans *AWS le Guide du développeur du SDK pour* .NET. 

```
using Amazon;
using Amazon.S3;
using Amazon.S3.Model;
using System;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
    class SpecifyServerSideEncryptionTest
    {
        private const string bucketName = "*** bucket name ***";
        private const string keyName = "*** key name for object created ***";
        // Specify your bucket region (an example region is shown).
        private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
        private static IAmazonS3 client;

        public static void Main()
        {
            client = new AmazonS3Client(bucketRegion);
            WritingAnObjectAsync().Wait();
        }

        static async Task WritingAnObjectAsync()
        {
            try
            {
                var putRequest = new PutObjectRequest
                {
                    BucketName = bucketName,
                    Key = keyName,
                    ContentBody = "sample text",
                    ServerSideEncryptionMethod = ServerSideEncryptionMethod.AES256
                };

                var putResponse = await client.PutObjectAsync(putRequest);

                // Determine the encryption state of an object.
                GetObjectMetadataRequest metadataRequest = new GetObjectMetadataRequest
                {
                    BucketName = bucketName,
                    Key = keyName
                };
                GetObjectMetadataResponse response = await client.GetObjectMetadataAsync(metadataRequest);
                ServerSideEncryptionMethod objectEncryption = response.ServerSideEncryptionMethod;

                Console.WriteLine("Encryption method used: {0}", objectEncryption.ToString());
            }
            catch (AmazonS3Exception e)
            {
                Console.WriteLine("Error encountered ***. Message:'{0}' when writing an object", e.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message);
            }
        }
    }
}
```

------
#### [ PHP ]

Cette rubrique explique comment utiliser les classes de la version 3 de AWS SDK pour PHP pour ajouter SSE-S3 aux objets que vous chargez sur Amazon S3. Pour plus d'informations sur l'API AWS SDK for Ruby, consultez [AWS SDK for Ruby](https://docs.aws.amazon.com/sdkforruby/api/index.html) - Version 2.

Pour charger un objet dans Amazon S3, utilisez la méthode [Aws\$1S3\$1S3Client::putObject()](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#putobject). Pour ajouter l’en-tête de demande `x-amz-server-side-encryption` à votre demande de chargement, spécifiez le paramètre `ServerSideEncryption` avec la valeur `AES256` comme illustré dans l’exemple de code suivant. Pour plus d’informations sur les demandes de chiffrement côté serveur, consultez [Utilisation de l'API REST](#SSEUsingRESTAPI).

```
 require 'vendor/autoload.php';

use Aws\S3\S3Client;

$bucket = '*** Your Bucket Name ***';
$keyname = '*** Your Object Key ***';

// $filepath should be an absolute path to a file on disk.
$filepath = '*** Your File Path ***';

$s3 = new S3Client([
    'version' => 'latest',
    'region'  => 'us-east-1'
]);

// Upload a file with server-side encryption.
$result = $s3->putObject([
    'Bucket'               => $bucket,
    'Key'                  => $keyname,
    'SourceFile'           => $filepath,
    'ServerSideEncryption' => 'AES256',
]);
```

En réponse, Amazon S3 renvoie l’en-tête `x-amz-server-side-encryption` avec la valeur de l’algorithme de chiffrement qui a été utilisé pour chiffrer les données de l’objet. 

Lorsque vous chargez des objets volumineux à l’aide de l’opération d’API de chargement partitionné, vous pouvez spécifier SSE-S3 pour les objets que vous chargez, comme suit : 
+ Lorsque vous utilisez l'opération d'API de téléchargement partitionné de bas niveau, spécifiez le chiffrement côté serveur lorsque vous appelez la méthode [Aws \$1 S3 \$1 S3Client](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#createmultipartupload) : : (). createMultipartUpload Pour ajouter l’en-tête `x-amz-server-side-encryption` à la demande, spécifiez le paramètre `array` avec la clé `ServerSideEncryption` en lui donnant la valeur `AES256`. Pour plus d’informations sur l’opération d’API de chargement partitionné de bas niveau, consultez [Utilisation de AWS SDKs (API de bas niveau)](mpu-upload-object.md#mpu-upload-low-level).
+ Lorsque vous utilisez l'opération d'API de téléchargement partitionné de haut niveau, spécifiez le chiffrement côté serveur à l'aide du `ServerSideEncryption` paramètre de l'[CreateMultipartUpload](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#createmultipartupload)opération d'API. Pour obtenir un exemple d’utilisation de la méthode `setOption()` avec l’opération d’API de chargement partitionné de haut niveau, consultez [Chargement d’un objet à l’aide du chargement partitionné](mpu-upload-object.md).

Pour déterminer l’état de chiffrement d’un objet existant, récupérez les métadonnées d’objet en appelant la méthode [Aws\$1S3\$1S3Client::headObject()](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#headobject) comme illustré dans l’exemple de code PHP suivant.

```
 require 'vendor/autoload.php';

use Aws\S3\S3Client;

$bucket = '*** Your Bucket Name ***';
$keyname = '*** Your Object Key ***';

$s3 = new S3Client([
    'version' => 'latest',
    'region'  => 'us-east-1'
]);

// Check which server-side encryption algorithm is used.
$result = $s3->headObject([
    'Bucket' => $bucket,
    'Key'    => $keyname,
]);
echo $result['ServerSideEncryption'];
```

Pour changer l’état de chiffrement d’un objet existant, faites une copie de l’objet grâce à la méthode [Aws\$1S3\$1S3Client::copyObject()](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#copyobject) et supprimez l’objet source. Par défaut, `copyObject()` ne chiffre pas la cible, sauf si vous demandez explicitement un chiffrement côté serveur de l’objet de destination à l’aide du paramètre `ServerSideEncryption` avec la valeur `AES256`. L’exemple de code PHP suivant fait une copie d’un objet et ajoute un chiffrement côté serveur à l’objet copié.

```
 require 'vendor/autoload.php';

use Aws\S3\S3Client;

$sourceBucket = '*** Your Source Bucket Name ***';
$sourceKeyname = '*** Your Source Object Key ***';

$targetBucket = '*** Your Target Bucket Name ***';
$targetKeyname = '*** Your Target Object Key ***';

$s3 = new S3Client([
    'version' => 'latest',
    'region'  => 'us-east-1'
]);

// Copy an object and add server-side encryption.
$s3->copyObject([
    'Bucket'               => $targetBucket,
    'Key'                  => $targetKeyname,
    'CopySource'           => "$sourceBucket/$sourceKeyname",
    'ServerSideEncryption' => 'AES256',
]);
```

Pour plus d’informations, consultez les rubriques suivantes :
+ [AWS SDK pour PHP pour la classe Amazon S3 Aws \$1 S3 \$1 S3Client](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.S3.S3Client.html) 
+ [Documentation AWS SDK pour PHP](https://aws.amazon.com/documentation/sdk-for-php/)

------
#### [ Ruby ]

Lorsque vous utilisez le AWS SDK pour Ruby pour télécharger un objet, vous pouvez spécifier que l'objet doit être stocké chiffré au repos avec SSE-S3. Lorsque vous relisez l’objet, il est automatiquement déchiffré.

L'exemple de AWS SDK pour Ruby version 3 suivant montre comment spécifier qu'un fichier chargé sur Amazon S3 soit chiffré au repos.

```
require 'aws-sdk-s3'

# Wraps Amazon S3 object actions.
class ObjectPutSseWrapper
  attr_reader :object

  # @param object [Aws::S3::Object] An existing Amazon S3 object.
  def initialize(object)
    @object = object
  end

  def put_object_encrypted(object_content, encryption)
    @object.put(body: object_content, server_side_encryption: encryption)
    true
  rescue Aws::Errors::ServiceError => e
    puts "Couldn't put your content to #{object.key}. Here's why: #{e.message}"
    false
  end
end

# Example usage:
def run_demo
  bucket_name = "amzn-s3-demo-bucket"
  object_key = "my-encrypted-content"
  object_content = "This is my super-secret content."
  encryption = "AES256"

  wrapper = ObjectPutSseWrapper.new(Aws::S3::Object.new(bucket_name, object_content))
  return unless wrapper.put_object_encrypted(object_content, encryption)

  puts "Put your content into #{bucket_name}:#{object_key} and encrypted it with #{encryption}."
end

run_demo if $PROGRAM_NAME == __FILE__
```

L’exemple de code suivant montre comment déterminer l’état de chiffrement d’un objet existant.

```
require 'aws-sdk-s3'

# Wraps Amazon S3 object actions.
class ObjectGetEncryptionWrapper
  attr_reader :object

  # @param object [Aws::S3::Object] An existing Amazon S3 object.
  def initialize(object)
    @object = object
  end

  # Gets the object into memory.
  #
  # @return [Aws::S3::Types::GetObjectOutput, nil] The retrieved object data if successful; otherwise nil.
  def object
    @object.get
  rescue Aws::Errors::ServiceError => e
    puts "Couldn't get object #{@object.key}. Here's why: #{e.message}"
  end
end

# Example usage:
def run_demo
  bucket_name = "amzn-s3-demo-bucket"
  object_key = "my-object.txt"

  wrapper = ObjectGetEncryptionWrapper.new(Aws::S3::Object.new(bucket_name, object_key))
  obj_data = wrapper.get_object
  return unless obj_data

  encryption = obj_data.server_side_encryption.nil? ? 'no' : obj_data.server_side_encryption
  puts "Object #{object_key} uses #{encryption} encryption."
end

run_demo if $PROGRAM_NAME == __FILE__
```

Si un chiffrement côté serveur n’est pas utilisé pour l’objet stocké dans Amazon S3, la méthode renvoie `null`.

Pour modifier l’état de chiffrement d’un objet existant, effectuez une copie de l’objet et supprimez l’objet source. Par défaut, les méthodes de copie ne chiffrent la cible que si vous demandez explicitement un chiffrement côté serveur. Vous pouvez demander le chiffrement de l’objet cible en spécifiant la valeur `server_side_encryption` dans l’argument de hachage d’options, comme illustré dans l’exemple de code Ruby suivant. L’exemple de code montre comment copier un objet et chiffrer la copie avec SSE-S3. 

```
require 'aws-sdk-s3'

# Wraps Amazon S3 object actions.
class ObjectCopyEncryptWrapper
  attr_reader :source_object

  # @param source_object [Aws::S3::Object] An existing Amazon S3 object. This is used as the source object for
  #                                        copy actions.
  def initialize(source_object)
    @source_object = source_object
  end

  # Copy the source object to the specified target bucket, rename it with the target key, and encrypt it.
  #
  # @param target_bucket [Aws::S3::Bucket] An existing Amazon S3 bucket where the object is copied.
  # @param target_object_key [String] The key to give the copy of the object.
  # @return [Aws::S3::Object, nil] The copied object when successful; otherwise, nil.
  def copy_object(target_bucket, target_object_key, encryption)
    @source_object.copy_to(bucket: target_bucket.name, key: target_object_key, server_side_encryption: encryption)
    target_bucket.object(target_object_key)
  rescue Aws::Errors::ServiceError => e
    puts "Couldn't copy #{@source_object.key} to #{target_object_key}. Here's why: #{e.message}"
  end
end

# Example usage:
def run_demo
  source_bucket_name = "amzn-s3-demo-bucket1"
  source_key = "my-source-file.txt"
  target_bucket_name = "amzn-s3-demo-bucket2"
  target_key = "my-target-file.txt"
  target_encryption = "AES256"

  source_bucket = Aws::S3::Bucket.new(source_bucket_name)
  wrapper = ObjectCopyEncryptWrapper.new(source_bucket.object(source_key))
  target_bucket = Aws::S3::Bucket.new(target_bucket_name)
  target_object = wrapper.copy_object(target_bucket, target_key, target_encryption)
  return unless target_object

  puts "Copied #{source_key} from #{source_bucket_name} to #{target_object.bucket_name}:#{target_object.key} and "\
       "encrypted the target with #{target_object.server_side_encryption} encryption."
end

run_demo if $PROGRAM_NAME == __FILE__
```

------

## À l'aide du AWS CLI
<a name="sse-s3-aws-cli"></a>

Pour spécifier SSE-S3 lorsque vous chargez un objet à l'aide du AWS CLI, utilisez l'exemple suivant.

```
aws s3api put-object --bucket amzn-s3-demo-bucket1 --key object-key-name --server-side-encryption AES256  --body file path
```

Pour plus d’informations, consultez [put-object](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/put-object.html) dans la *Référence de la AWS CLI *. [Pour spécifier SSE-S3 lorsque vous copiez un objet à l'aide du AWS CLI, voir copy-object.](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/copy-object.html)

## En utilisant CloudFormation
<a name="ss3-s3-cfn"></a>

Pour des exemples de configuration du chiffrement à l'aide [d'un exemple CloudFormation, reportez-vous aux sections Création d'un compartiment avec chiffrement par défaut](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-serversideencryptionrule.html#aws-properties-s3-bucket-serversideencryptionrule--examples--Create_a_bucket_with_default_encryption) [et Création d'un compartiment en utilisant le chiffrement AWS KMS côté serveur avec une clé de compartiment S3](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-s3-bucket-serversideencryptionrule.html#aws-properties-s3-bucket-serversideencryptionrule--examples--Create_a_bucket_using_AWS_KMS_server-side_encryption_with_an_S3_Bucket_Key) dans la `AWS::S3::Bucket ServerSideEncryptionRule` rubrique du Guide de l'*AWS CloudFormation utilisateur*. 