

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 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 à jour du AWS SDK pour Ruby dans votre application. Cela permettra 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>

Le client de chiffrement V2 utilise des algorithmes de chiffrement que les anciennes versions du client ne prennent pas en charge. La première étape de la migration consiste à mettre à jour vos clients de déchiffrement V1 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. Consultez les détails ci-dessous pour chaque version majeure du AWS SDK pour Ruby.

### Mettre à jour le AWS SDK pour Ruby Version 3
<a name="update-aws-sdk-for-ruby-version-3-v1-v2"></a>

La version 3 est la dernière version du AWS SDK pour Ruby. Pour terminer cette migration, vous devez utiliser la version 1.76.0 ou ultérieure de la `aws-sdk-s3` gem.

 **Installation depuis la ligne de commande** 

Pour les projets qui installent la `aws-sdk-s3` gem, utilisez l'option de version pour vérifier que la version minimale de 1.76.0 est installée.

```
gem install aws-sdk-s3 -v '>= 1.76.0'
```

 **Utilisation de Gemfiles** 

Pour les projets qui utilisent un Gemfile pour gérer les dépendances, définissez la version minimale du `aws-sdk-s3` gem sur 1.76.0. Par exemple :

```
gem 'aws-sdk-s3', '>= 1.76.0'
```

1. Modifiez votre Gemfile.

1. Exécutez `bundle update aws-sdk-s3`. Pour vérifier votre version, exécutez`bundle info aws-sdk-s3`.

### AWS SDK de mise à niveau pour Ruby version 2
<a name="upgdate-aws-sdk-for-ruby-version-2-v1-v2"></a>

La version 2 du AWS SDK pour Ruby passera en [mode maintenance](https://aws.amazon.com/blogs/developer/deprecation-schedule-for-aws-sdk-for-ruby-v2/) le 21 novembre 2021. Pour terminer cette migration, vous devez utiliser la version 2.11.562 ou ultérieure de la gem aws-sdk.

 **Installation depuis la ligne de commande** 

Pour les projets qui installent la `aws-sdk` gem, depuis la ligne de commande, utilisez l'option de version pour vérifier que la version minimale de 2.11.562 est installée.

```
gem install aws-sdk -v '>= 2.11.562'
```

 **Utilisation de Gemfiles** 

Pour les projets qui utilisent un Gemfile pour gérer les dépendances, définissez la version minimale du `aws-sdk` gem sur 2.11.562. Par exemple :

```
gem 'aws-sdk', '>= 2.11.562'
```

1. Modifiez votre Gemfile. Si vous avez un fichier Gemfile.lock, supprimez-le ou mettez-le à jour.

1. Exécutez `bundle update aws-sdk`. Pour vérifier votre version, exécutez`bundle info aws-sdk`.

## 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>

Après avoir mis vos clients à jour pour qu'ils lisent les nouveaux formats de chiffrement, vous pouvez mettre à jour vos applications avec les clients de chiffrement et de déchiffrement V2. Les étapes suivantes vous montrent comment migrer avec succès votre code de la V1 à la V2.

Avant de mettre à jour votre code pour utiliser le client de chiffrement V2, assurez-vous d'avoir suivi les étapes précédentes et d'utiliser la version 2.11.562 ou ultérieure de la `aws-sdk-s3` gem.

**Note**  
Lorsque vous déchiffrez avec AES-GCM, lisez l'objet dans son intégralité 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é.

### Configuration des clients de chiffrement V2
<a name="configuring-v2-encryption-clients-v1-v2"></a>

Le *EncryptionV2 : :Client nécessite une configuration supplémentaire*. Pour des informations de configuration détaillées, consultez la [documentation d'EncryptionV2 : :Client](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/EncryptionV2/Client.html#initialize-instance_method) ou les exemples fournis plus loin dans cette rubrique.

1. **La méthode d'encapsulation des clés et l'algorithme de chiffrement du contenu doivent être spécifiés lors de la construction du client.** Lorsque vous en créez un nouveau`EncryptionV2::Client`, vous devez fournir des valeurs pour `key_wrap_schema` et`content_encryption_schema`.

 `key_wrap_schema`- Si vous utilisez AWS KMS, ce paramètre doit être réglé sur`:kms_context`. Si vous utilisez une clé symétrique (AES), elle doit être réglée sur. `:aes_gcm` Si vous utilisez une clé asymétrique (RSA), elle doit être définie sur. `:rsa_oaep_sha1`

 `content_encryption_schema`*- Cela doit être défini sur:aes\_gcm\_no\_padding.*

2. **security\_profile doit être spécifié lors de la construction du client.** Lorsque vous en créez un nouveau`EncryptionV2::Client`, vous devez fournir une valeur pour`security_profile`. Le paramètre *security\_profile* détermine la prise en charge de la lecture d'objets écrits à l'aide de l'ancienne version V1. `Encryption::Client` **Il existe deux valeurs ::v2 et:v2\_and\_legacy.** *Pour prendre en charge la migration, définissez le paramètre `security_profile` to:v2\_and\_legacy.* Utilisez : v2 *uniquement pour le développement* de nouvelles applications.

3. **AWS KMS key L'ID est appliqué par défaut.** Dans la version 1`Encryption::Client`, le `kms_key_id` fichier utilisé pour créer le client n'était pas fourni au AWS KMS `Decrypt call`. AWS KMS peut obtenir ces informations à partir des métadonnées et les ajouter au blob de texte chiffré symétrique. Dans la version 2, EncryptionV2 : :Client`, le *kms\_key\_id* est transmis à l'appel AWS KMS Decrypt, et l'appel échoue s'il ne correspond pas à la clé utilisée pour chiffrer l'objet. Si votre code reposait auparavant sur le fait de ne pas définir un paramètre spécifique`kms_key_id`, définissez-le `kms_key_id: :kms_allow_decrypt_with_any_cmk` lors de la création du client ou `kms_allow_decrypt_with_any_cmk: true` définissez-le lors `get_object` des appels.

### Exemple : utilisation d'une clé symétrique (AES)
<a name="example-using-a-symmetric-aes-key-v1-v2"></a>

 **Prémigration** 

```
client = Aws::S3::Encryption::Client.new(encryption_key: aes_key)
client.put_object(bucket: bucket, key: key, body: secret_data)
resp = client.get_object(bucket: bucket, key: key)
```

 **Après la migration** 

```
client = Aws::S3::EncryptionV2::Client.new(
  encryption_key: rsa_key,
  key_wrap_schema: :rsa_oaep_sha1, # the key_wrap_schema must be rsa_oaep_sha1 for asymmetric keys
  content_encryption_schema: :aes_gcm_no_padding,
  security_profile: :v2_and_legacy # to allow reading/decrypting objects encrypted by the V1 encryption client
 )
client.put_object(bucket: bucket, key: key, body: secret_data)  # No changes
resp = client.get_object(bucket: bucket, key: key) # No changes
```

### Exemple : utilisation AWS KMS avec kms\_key\_id
<a name="example-using-aws-kms-with-kms-key-id-v1-v2"></a>

 **Prémigration** 

```
client = Aws::S3::Encryption::Client.new(kms_key_id: kms_key_id)
client.put_object(bucket: bucket, key: key, body: secret_data)
resp = client.get_object(bucket: bucket, key: key)
```

 **Après la migration** 

```
client = Aws::S3::EncryptionV2::Client.new(
  kms_key_id: kms_key_id,
  key_wrap_schema: :kms_context, # the key_wrap_schema must be kms_context for KMS keys
  content_encryption_schema: :aes_gcm_no_padding,
  security_profile: :v2_and_legacy # to allow reading/decrypting objects encrypted by the V1 encryption client
)
client.put_object(bucket: bucket, key: key, body: secret_data)  # No changes
resp = client.get_object(bucket: bucket, key: key) # No change
```

### Exemple : utilisation AWS KMS sans kms\_key\_id
<a name="example-using-aws-kms-without-kms-key-id-v1-v2"></a>

 **Prémigration** 

```
client = Aws::S3::Encryption::Client.new(kms_key_id: kms_key_id)
client.put_object(bucket: bucket, key: key, body: secret_data)
resp = client.get_object(bucket: bucket, key: key)
```

 **Après la migration** 

```
client = Aws::S3::EncryptionV2::Client.new(
  kms_key_id: kms_key_id,
  key_wrap_schema: :kms_context, # the key_wrap_schema must be kms_context for KMS keys
  content_encryption_schema: :aes_gcm_no_padding,
  security_profile: :v2_and_legacy # to allow reading/decrypting objects encrypted by the V1 encryption client
)
client.put_object(bucket: bucket, key: key, body: secret_data)  # No changes
resp = client.get_object(bucket: bucket, key: key, kms_allow_decrypt_with_any_cmk: true) # To allow decrypting with any cmk
```

 **Alternative après la migration** 

Si vous lisez et déchiffrez uniquement (n'écrivez jamais et ne chiffrez jamais) des objets à l'aide du client de chiffrement S2, utilisez ce code.

```
client = Aws::S3::EncryptionV2::Client.new(
  kms_key_id: :kms_allow_decrypt_with_any_cmk, # set kms_key_id to allow all get_object requests to use any cmk
  key_wrap_schema: :kms_context, # the key_wrap_schema must be kms_context for KMS keys
  content_encryption_schema: :aes_gcm_no_padding,
  security_profile: :v2_and_legacy # to allow reading/decrypting objects encrypted by the V1 encryption client
)
resp = client.get_object(bucket: bucket, key: key) # No change
```