

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.

# Migration du client de chiffrement Amazon S3 (V1 vers V2)
<a name="s3-encryption-migration-v1-v2"></a>

**Note**  
Si vous utilisez la version V2 du client de chiffrement Amazon S3 et que vous souhaitez migrer vers la version 3, consultez[Migration du client de chiffrement Amazon S3 (V2 vers V3)](s3-encryption-migration-v2-v3.md).

Cette rubrique explique comment migrer vos applications de la version 1 (V1) du client de chiffrement Amazon Simple Storage Service (Amazon S3) vers la version 2 (V2) et comment garantir la disponibilité des applications tout au long du processus de migration.

## Présentation de la migration
<a name="migration-overview-v1-v2"></a>

Cette migration s'effectue en deux phases :

1. **Mettez à jour les clients existants pour lire les nouveaux formats.** Déployez d'abord une version mise AWS SDK pour C\+\+ à jour du dans votre application. Cela permet aux clients de chiffrement V1 existants de déchiffrer les objets écrits par les nouveaux clients V2. Si votre application en utilise plusieurs AWS SDKs, vous devez mettre à niveau chaque SDK séparément.

2. **Migrez les clients de chiffrement et de déchiffrement vers la version V2.** Une fois que tous vos clients de chiffrement V1 peuvent lire les nouveaux formats, vous pouvez migrer vos clients de chiffrement et de déchiffrement existants vers leurs versions V2 respectives.

## Mettre à jour les clients existants pour lire les nouveaux formats
<a name="update-existing-clients-to-read-new-formats-v1-v2"></a>

Vous devez d'abord mettre à jour vos clients existants avec la dernière version du SDK. Une fois cette étape terminée, les clients V1 de votre application seront en mesure de déchiffrer les objets chiffrés par les clients de chiffrement V2 sans mettre à jour le code de base de votre application.

### Créez et installez la dernière version du AWS SDK pour C\+\+
<a name="build-and-install-the-latest-version-of-the-sdk-cpp-v1-v2"></a>

 **Applications consommant le SDK à la source** 

Si vous créez et installez la source AWS SDK pour C\+\+ à partir de la source, téléchargez ou clonez la source du SDK à partir [`aws/aws-sdk-cpp`](https://github.com/aws/aws-sdk-cpp)de GitHub. Répétez ensuite les étapes habituelles de compilation et d'installation.

Si vous effectuez une mise à niveau à AWS SDK pour C\+\+ partir d'une version antérieure à la version 1.8.x, consultez ce [CHANGELOG](https://github.com/aws/aws-sdk-cpp/blob/master/CHANGELOG.md) pour connaître les principales modifications apportées à chaque version majeure. Pour plus d'informations sur la création et l'installation du AWS SDK pour C\+\+, consultez[Obtenir AWS SDK pour C\+\+ le code source](sdk-from-source.md).

 **Applications consommant le SDK depuis Vcpkg** 

Si votre application utilise [Vcpkg](https://github.com/microsoft/vcpkg) pour suivre les mises à jour du SDK, utilisez simplement votre méthode de mise à niveau Vcpkg existante pour mettre à niveau le SDK vers la dernière version. N'oubliez pas qu'il existe un délai entre le moment où une version est publiée et le moment où elle est disponible via un gestionnaire de packages. La version la plus récente est toujours disponible via l'[installation depuis le code source](sdk-from-source.md). 

Vous pouvez exécuter la commande suivante pour mettre à jour le package `aws-sdk-cpp` :

```
vcpkg upgrade aws-sdk-cpp
```

Et vérifiez la version du package `aws-sdk-cpp` :

```
vcpkg list aws-sdk-cpp
```

La version doit être au moins 1.8.24.

Pour plus d'informations sur l'utilisation de Vcpkg avec le AWS SDK pour C\+\+, consultez. [Obtenir le AWS SDK pour C\+\+ depuis un gestionnaire de packages](sdk-from-pm.md)

### Créez, installez et déployez vos applications
<a name="build-install-and-deploy-your-applications-v1-v2"></a>

Si votre application établit un lien statique avec le AWS SDK pour C\+\+, il n'est pas nécessaire de modifier le code de votre application, mais vous devez créer à nouveau votre application pour utiliser les dernières modifications du SDK. Cette étape n'est pas nécessaire pour les liens dynamiques.

Après avoir mis à niveau la version de dépendance de votre application et vérifié le fonctionnement de l'application, procédez au déploiement de votre application dans votre parc. Une fois le déploiement de l'application terminé, vous pouvez passer à la phase suivante de migration de votre application afin d'utiliser les clients de chiffrement et de déchiffrement V2.

## Migrer les clients de chiffrement et de déchiffrement vers la version V2
<a name="migrate-encryption-and-decryption-clients-to-v2-v1-v2"></a>

Les étapes suivantes vous montrent comment migrer avec succès votre code de la V1 à la V2 du client de chiffrement Amazon S3. Étant donné que des modifications de code sont nécessaires, vous devrez reconstruire votre application, qu'elle soit liée de manière statique ou dynamique au AWS SDK pour C\+\+.

### Utilisation de nouveaux matériaux de chiffrement
<a name="using-new-encryption-materials-v1-v2"></a>

Avec les clients de chiffrement Amazon S3 V2 et la configuration cryptographique V2, les supports de chiffrement suivants sont devenus obsolètes :
+  `SimpleEncryptionMaterials` 
+  `KMSEncryptionMaterials` 

Ils ont été remplacés par les supports de cryptage sécurisés suivants :
+  `SimpleEncryptionMaterialsWithGCMAAD` 
+  `KMSWithContextEncryptionMaterials` 

Les modifications de code suivantes sont nécessaires pour créer un client de chiffrement S3 V2 :
+   
**Si vous utilisez `KMSEncryptionMaterials` lors de la création d'un client de chiffrement S3 :**  
  + Lorsque vous créez un client de chiffrement V2 S3, remplacez-le `KMSEncryptionMaterials` par `KMSWithContextEncryptionMaterials` et spécifiez-le dans la configuration de chiffrement V2.
  + Lorsque vous placez un objet avec des clients de chiffrement Amazon S3 V2, vous devez fournir explicitement une carte de contexte de chaînes de caractères comme contexte KMS pour chiffrer le CEK. Il s'agit peut-être d'une carte vide.
+   
**Si vous utilisez `SimpleEncryptionMaterials` lors de la création d'un client de chiffrement S3 :**  
  + Lorsque vous créez un client de chiffrement Amazon S3 V2, remplacez-le `SimpleEncryptionMaterials` par `SimpleEncryptionMaterialsWithGCMAAD` et spécifiez-le dans la configuration de chiffrement V2.
  + Lorsque vous placez un objet avec des clients de chiffrement Amazon S3 V2, vous devez fournir explicitement une carte contextuelle de chaîne vide, sinon le SDK renverra une erreur.

 **Exemple : utilisation de l'algorithme KMS/KMSWithContext Key Wrap** 

 *Prémigration (emballage des clés KMS)* 

```
auto materials = Aws::MakeShared<KMSEncryptionMaterials>("s3Encryption", CUSTOMER_MASTER_KEY_ID);
CryptoConfiguration cryptoConfig;
S3EncryptionClient encryptionClient(materials, cryptoConfig);
// Code snippet here to setup the putObjectRequest object.
encryptionClient.PutObject(putObjectRequest);
```

 *Après la migration (encapsulation des touches KMSWith contextuelles)* 

```
auto materials = Aws::MakeShared<KMSWithContextEncryptionMaterials>("s3EncryptionV2", CUSTOMER_MASTER_KEY_ID);
CryptoConfigurationV2 cryptoConfig(materials);
S3EncryptionClientV2 encryptionClient(cryptoConfig);
// Code snippet here to setup the putObjectRequest object.
Aws::Map<Aws::String, Aws::String> kmsContextMap;
kmsContextMap.emplace("client", "aws-sdk-cpp");
kmsContextMap.emplace("version", "1.8.0");
encryptionClient.PutObject(putObjectRequest, kmsContextMap /* could be empty as well */);
```

 **Exemple : utilisation de l'algorithme Key Wrap AES/AES-GCM** 

 *Prémigration (clé AES)* 

```
auto materials = Aws::MakeShared<SimpleEncryptionMaterials>("s3Encryption", HashingUtils::Base64Decode(AES_MASTER_KEY_BASE64));
CryptoConfiguration cryptoConfig;
S3EncryptionClient encryptionClient(materials, cryptoConfig);
// Code snippet here to setup the putObjectRequest object.
encryptionClient.PutObject(putObjectRequest);
```

 *Après la migration (clé AES-GCM)* 

```
auto materials = Aws::MakeShared<SimpleEncryptionMaterialsWithGCMAAD>("s3EncryptionV2", HashingUtils::Base64Decode(AES_MASTER_KEY_BASE64));
CryptoConfigurationV2 cryptoConfig(materials);
S3EncryptionClientV2 encryptionClient(cryptoConfig);
// Code snippet here to setup the putObjectRequest object.
encryptionClient.PutObject(putObjectRequest, {} /* must be an empty map */);
```

## Exemples supplémentaires
<a name="additional-examples-v1-v2"></a>

Les exemples suivants montrent comment traiter des cas d'utilisation spécifiques liés à une migration de la V1 à la V2.

### Déchiffrez les objets chiffrés par les anciens clients de chiffrement Amazon S3
<a name="decrypt-objects-encrypted-by-legacy-amazon-s3-encryption-clients-v1-v2"></a>

Par défaut, vous ne pouvez pas utiliser le client de chiffrement Amazon S3 V2 pour déchiffrer des objets chiffrés à l'aide d'algorithmes d'encapsulation de clés ou de schémas de chiffrement de contenu obsolètes.

Les algorithmes d'encapsulation de touches suivants sont devenus obsolètes :
+  `KMS` 
+  `AES_KEY_WRAP` 

Et les schémas de chiffrement de contenu suivants sont devenus obsolètes :
+  `CBC` 
+  `CTR` 

Si vous utilisez d'anciens clients de chiffrement Amazon S3 AWS SDK pour C\+\+ pour chiffrer les objets, vous utilisez probablement les méthodes obsolètes si :
+ Tu as utilisé `SimpleEncryptionMaterials` ou`KMSEncryptionMaterials`.
+ Vous avez utilisé `ENCRYPTION_ONLY` comme `Crypto Mode` dans votre configuration cryptographique.

Pour utiliser le client de chiffrement Amazon S3 V2 afin de déchiffrer des objets chiffrés par des algorithmes d'encapsulation de clé obsolètes ou des schémas de chiffrement de contenu obsolètes, vous devez remplacer la valeur par défaut de dans la configuration de chiffrement V2 de `SecurityProfile` à. `V2` `V2_AND_LEGACY`

 **Exemple** 

 *Prémigration* 

```
auto materials = Aws::MakeShared<KMSEncryptionMaterials>("s3Encryption", CUSTOMER_MASTER_KEY_ID);
CryptoConfiguration cryptoConfig;
S3EncryptionClient encryptionClient(materials, cryptoConfig);
// Code snippet here to setup the getObjectRequest object.
encryptionClient.GetObject(getObjectRequest);
```

 *Après la migration* 

```
auto materials = Aws::MakeShared<KMSWithContextEncryptionMaterials>("s3EncryptionV2", CUSTOMER_MASTER_KEY_ID);
CryptoConfigurationV2 cryptoConfig(materials);
cryptoConfig.SetSecurityProfile(SecurityProfile::V2_AND_LEGACY);
S3EncryptionClientV2 encryptionClient(cryptoConfig);
// Code snippet here to setup the getObjectRequest object.
encryptionClient.GetObject(getObjectRequest);
```

### Déchiffrer des objets avec Range
<a name="decrypt-objects-with-range-v1-v2"></a>

Avec les anciens clients de chiffrement Amazon S3, vous pouvez spécifier une plage d'octets à recevoir lors du déchiffrement d'un objet S3. Dans le client de chiffrement Amazon S3 V2, cette fonctionnalité est `DISABLED` disponible par défaut. Par conséquent, vous devez remplacer la valeur par défaut `RangeGetMode` de `DISABLED` to `ALL` dans la configuration cryptographique V2.

 **Exemple** 

 *Prémigration* 

```
auto materials = Aws::MakeShared<KMSEncryptionMaterials>("s3Encryption", CUSTOMER_MASTER_KEY_ID);
CryptoConfiguration cryptoConfig;
S3EncryptionClient encryptionClient(materials, cryptoConfig);
// Code snippet here to setup the getObjectRequest object.
getObjectRequest.WithRange("bytes=38-75");
encryptionClient.GetObject(getObjectRequest);
```

 *Après la migration* 

```
auto materials = Aws::MakeShared<KMSWithContextEncryptionMaterials>("s3EncryptionV2", CUSTOMER_MASTER_KEY_ID);
CryptoConfigurationV2 cryptoConfig(materials);
cryptoConfig.SetUnAuthenticatedRangeGet(RangeGetMode::ALL);
S3EncryptionClientV2 encryptionClient(cryptoConfig);
// Code snippet here to setup the getObjectRequest object.
getObjectRequest.WithRange("bytes=38-75");
encryptionClient.GetObject(getObjectRequest);
```

### Déchiffrez des objets avec n'importe quelle clé CMK
<a name="decrypt-objects-with-any-cmk-v1-v2"></a>

Lors du déchiffrement d'objets chiffrés avec`KMSWithContextEncryptionMaterials`, les clients de chiffrement Amazon S3 V2 sont capables de permettre à KMS de trouver la clé CMK appropriée en fournissant une clé principale vide. Cette fonctionnalité est disponible `DISABLED` par défaut. Vous devez le configurer explicitement en `SetKMSDecryptWithAnyCMK(true)` demandant votre matériel de chiffrement KMS.

 **Exemple** 

 *Prémigration* 

```
auto materials = Aws::MakeShared<KMSEncryptionMaterials>("s3Encryption", ""/* provide an empty KMS Master Key*/);
CryptoConfiguration cryptoConfig;
S3EncryptionClient encryptionClient(materials, cryptoConfig);
// Code snippet here to setup the getObjectRequest object.
encryptionClient.GetObject(getObjectRequest);
```

 *Après la migration* 

```
auto materials = Aws::MakeShared<KMSWithContextEncryptionMaterials>("s3EncryptionV2", ""/* provide an empty KMS Master Key*/);
materials.SetKMSDecryptWithAnyCMK(true);
CryptoConfigurationV2 cryptoConfig(materials);
S3EncryptionClientV2 encryptionClient(cryptoConfig);
// Code snippet here to setup the getObjectRequest object.
encryptionClient.GetObject(getObjectRequest);
```

Pour obtenir le code complet pour tous ces scénarios de migration, consultez l'[exemple de chiffrement Amazon S3](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/s3encryption) sur Github.