

La version 4 (V4) du AWS SDK pour .NET est sortie \!

Pour plus d'informations sur l'interruption des modifications et la migration de vos applications, consultez la rubrique [ sur la ](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html) migration.

 [![Orange button with text "Click here for details".](https://docs.aws.amazon.com/fr_fr/sdk-for-net/v4/developer-guide/images/BannerButton_less-round.png)](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html)

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 S3 (V1 vers V2)
<a name="s3-encryption-migration-v1-v2"></a>

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

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

Les objets chiffrés avec le client V2 ne peuvent pas être déchiffrés avec le client V1. Afin de faciliter la migration vers le nouveau client sans avoir à rechiffrer tous les objets en même temps, un client « V1-transitional » a été fourni. Ce client peut * déchiffrer * à la fois la V1 et V2-encrypted les objets, mais ne * chiffre les * objets qu'au V1-compatible format. Le client V2 peut * déchiffrer à la * fois la V1 et les V2-encrypted objets (lorsque cette option est activée pour les objets V1), mais ne * chiffre les * objets qu'au V2-compatible format.

## Aperçu de la migration
<a name="s3-encryption-migration-v1-v2-overview"></a>

Cette migration se déroule en trois phases. Ces phases sont présentées ici et décrites en détail ultérieurement. Chaque phase doit être terminée pour * tous les * clients qui utilisent des objets partagés avant le début de la phase suivante.

1. **Mettez à jour les clients existants pour V1-transitional qu'ils lisent les nouveaux formats. ** Tout d'abord, mettez à jour vos applications pour qu'elles dépendent du V1-transitional client plutôt que du client V1. Le V1-transitional client permet à votre code existant de déchiffrer les objets écrits par les nouveaux clients V2 et les objets écrits au V1-compatible format.
**Note**  
Le V1-transitional client est fourni à des fins de migration uniquement. Procédez à la mise à niveau vers le client V2 après avoir migré vers le V1-transitional client.

1. **Migrez V1-transitional les clients vers les clients V2 pour écrire de nouveaux formats. ** Ensuite, remplacez tous les V1-transitional clients de vos applications par des clients V2 et définissez le profil de sécurité sur`V2AndLegacy`. La définition de ce profil de sécurité sur les clients V2 permet à ces clients de déchiffrer les objets dont le V1-compatible format était chiffré.

1. **Mettez à jour les clients V2 pour qu'ils ne lisent plus les formats V1. ** Enfin, une fois que tous les clients ont été migrés vers la V2 et que tous les objets ont été chiffrés ou rechiffrés au V2-compatible format, définissez le profil de sécurité V2 sur `V2` plutôt que. `V2AndLegacy` Cela empêche le déchiffrement des objets V1-compatible formatés.

## Mettre à jour les clients existants en V1-transitional clients pour lire les nouveaux formats
<a name="s3-encryption-migration-v1-v2-to-v1n"></a>

Le client de chiffrement V2 utilise des algorithmes de chiffrement que les anciennes versions du client ne prenaient pas en charge. La première étape de la migration consiste à mettre à jour vos clients de déchiffrement V1 afin qu'ils puissent lire le nouveau format.

Le V1-transitional client permet à vos applications de déchiffrer à la fois la V1 et les V2-encrypted objets. Ce client fait partie du [ Amazon.Extensions.S3.Encryption ](https://www.nuget.org/packages/Amazon.Extensions.S3.Encryption) NuGet package. Effectuez les étapes suivantes sur chacune de vos applications pour utiliser le V1-transitional client.

1. Créez une nouvelle dépendance vis-à-vis du [ Amazon.Extensions.S3.Encryption ](https://www.nuget.org/packages/Amazon.Extensions.S3.Encryption) package. Si votre projet dépend directement des ** AWSSDK.KeyManagementService ** packages ** AWSSDK.S3 ** ou, vous devez soit mettre à jour ces dépendances, soit les supprimer afin que leurs versions mises à jour soient intégrées à ce nouveau package.

1. Remplacez l'`using`instruction appropriée par « `Amazon.S3.Encryption` à »`Amazon.Extensions.S3.Encryption`, comme suit : 

   ```
   // using Amazon.S3.Encryption;
     using Amazon.Extensions.S3.Encryption;
   ```

1. Reconstruisez et redéployez votre application.

Le V1-transitional client est entièrement intégré API-compatible au client V1, aucune autre modification de code n'est donc requise.

## Migrer V1-transitional des clients vers des clients V2 pour écrire de nouveaux formats
<a name="s3-encryption-migration-v1-v2-v1n-to-v2"></a>

Le client V2 fait partie du [ Amazon.Extensions.S3.Encryption ](https://www.nuget.org/packages/Amazon.Extensions.S3.Encryption) NuGet package. Il permet à vos applications de déchiffrer à la fois la V1 et V2-encrypted les objets (si elle est configurée pour le faire), mais ne chiffre les objets qu'au V2-compatible format.

Après avoir mis à jour vos clients existants pour lire le nouveau format de chiffrement, vous pouvez procéder à la mise à jour sécurisée de vos applications vers les clients de chiffrement et de déchiffrement V2. Effectuez les étapes suivantes sur chacune de vos applications pour utiliser le client V2 :

1. Remplacez `EncryptionMaterials` par `EncryptionMaterialsV2`

   1. Lorsque vous utilisez KMS :

      1. Fournissez un identifiant de clé KMS.

      1. Déclarez la méthode de cryptage que vous utilisez, c'est-à-dire`KmsType.KmsContext`.

      1. Fournissez un contexte de chiffrement à KMS à associer à cette clé de données. Vous pouvez envoyer un dictionnaire vide (le contexte de chiffrement Amazon sera toujours fusionné), mais il est recommandé de fournir un contexte supplémentaire.

   1. Lorsque vous utilisez des méthodes d'encapsulation de clés fournies par l'utilisateur (chiffrement symétrique ou asymétrique) :

      1. Fournissez un `AES` ou une `RSA` instance contenant le matériel de chiffrement.

      1. Déclarez l'algorithme de chiffrement à utiliser, c'est-à-dire `SymmetricAlgorithmType.AesGcm` ou`AsymmetricAlgorithmType.RsaOaepSha1`.

1. Passez `AmazonS3CryptoConfiguration` à `AmazonS3CryptoConfigurationV2` avec la `SecurityProfile` propriété définie sur`SecurityProfile.V2AndLegacy`.

1. Remplacez `AmazonS3EncryptionClient` par `AmazonS3EncryptionClientV2` Ce client prend les objets récemment convertis `AmazonS3CryptoConfigurationV2` et `EncryptionMaterialsV2` les objets des étapes précédentes.

### Exemple : KMS vers KMS\+Context
<a name="s3-encryption-migration-v1-v2-ex-kms"></a>

**Pre-migration**

```
using System.Security.Cryptography;
using Amazon.S3.Encryption;

var encryptionMaterial = new EncryptionMaterials("1234abcd-12ab-34cd-56ef-1234567890ab");
var configuration = new AmazonS3CryptoConfiguration()
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
var encryptionClient = new AmazonS3EncryptionClient(configuration, encryptionMaterial);
```

**Post-migration**

```
using System.Security.Cryptography;
using Amazon.Extensions.S3.Encryption;
using Amazon.Extensions.S3.Encryption.Primitives;

var encryptionContext = new Dictionary<string, string>();
var encryptionMaterial = new EncryptionMaterialsV2("1234abcd-12ab-34cd-56ef-1234567890ab", KmsType.KmsContext, encryptionContext);
var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2AndLegacy)
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
var encryptionClient = new AmazonS3EncryptionClientV2(configuration, encryptionMaterial);
```

### Exemple : algorithme symétrique (AES-CBC vers AES-GCM Key Wrap)
<a name="s3-encryption-migration-v1-v2-ex-aes"></a>

`StorageMode` peut avoir la valeur `ObjectMetadata` ou `InstructionFile`.

**Pre-migration**

```
using System.Security.Cryptography;
using Amazon.S3.Encryption;

var symmetricAlgorithm = Aes.Create();
var encryptionMaterial = new EncryptionMaterials(symmetricAlgorithm);
var configuration = new AmazonS3CryptoConfiguration()
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
var encryptionClient = new AmazonS3EncryptionClient(configuration, encryptionMaterial);
```

**Post-migration**

```
using System.Security.Cryptography;
using Amazon.Extensions.S3.Encryption;
using Amazon.Extensions.S3.Encryption.Primitives;

var symmetricAlgorithm = Aes.Create();
var encryptionMaterial = new EncryptionMaterialsV2(symmetricAlgorithm, SymmetricAlgorithmType.AesGcm);
var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2AndLegacy)
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
var encryptionClient = new AmazonS3EncryptionClientV2(configuration, encryptionMaterial);
```

**Note**  
Lors du déchiffrement avec AES-GCM, lisez l'objet entier jusqu'à la fin avant de commencer à utiliser les données déchiffrées. Cela permet de vérifier que l'objet n'a pas été modifié depuis qu'il a été chiffré.

### Exemple : algorithme asymétrique (RSA vers RSA-OAEP-SHA1 Key Wrap)
<a name="s3-encryption-migration-v1-v2-ex-rsa"></a>

`StorageMode` peut avoir la valeur `ObjectMetadata` ou `InstructionFile`.

**Pre-migration**

```
using System.Security.Cryptography;
using Amazon.S3.Encryption;

var asymmetricAlgorithm = RSA.Create();
var encryptionMaterial = new EncryptionMaterials(asymmetricAlgorithm);
var configuration = new AmazonS3CryptoConfiguration()
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
var encryptionClient = new AmazonS3EncryptionClient(configuration, encryptionMaterial);
```

**Post-migration**

```
using System.Security.Cryptography;
using Amazon.Extensions.S3.Encryption;
using Amazon.Extensions.S3.Encryption.Primitives;

var asymmetricAlgorithm = RSA.Create();
var encryptionMaterial = new EncryptionMaterialsV2(asymmetricAlgorithm, AsymmetricAlgorithmType.RsaOaepSha1);
var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2AndLegacy)
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
var encryptionClient = new AmazonS3EncryptionClientV2(configuration, encryptionMaterial);
```

## Mettre à jour les clients V2 pour ne plus lire les formats V1
<a name="s3-encryption-migration-v1-v2-v2-cleanup"></a>

À terme, tous les objets auront été chiffrés ou rechiffrés à l'aide d'un client V2. *Une fois cette conversion terminée*, vous pouvez désactiver la compatibilité V1 dans les clients V2 en définissant la `SecurityProfile` propriété sur`SecurityProfile.V2`, comme indiqué dans l'extrait suivant.

```
//var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2AndLegacy);
var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2);
```