

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) dans le AWS SDK pour PHP Version 3
<a name="s3-encryption-migration-v1-v2"></a>

**Note**  
Si vous utilisez la version 2 (V2) du client de chiffrement Amazon S3 et que vous souhaitez migrer vers la version 3 (V3), consultez[Migration du client de chiffrement Amazon S3 (V2 vers V3) dans le AWS SDK pour PHP Version 3](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 garantir la disponibilité des applications tout au long du processus de migration.

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

Cette migration s'effectue en deux phases :

1. **Mettez à jour les clients existants pour qu'ils puissent lire les nouveaux formats. ** Tout d'abord, déployez une version mise AWS SDK pour PHP à jour de celui-ci 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 utilise plusieurs AWS kits de développement logiciel, vous devez les mettre à niveau séparément.

2. **Migrez les clients de chiffrement et de déchiffrement vers la 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 prenaient pas en charge. La première étape de la migration consiste à mettre à jour vos clients de déchiffrement V1 vers 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. Voir les détails ci-dessous pour chaque version majeure du AWS SDK pour PHP.

### Mise à niveau AWS SDK pour PHP Version 3
<a name="upgrading-aws-sdk-for-php-version-3-v1-v2"></a>

La version 3 est la dernière version du AWS SDK pour PHP. Pour effectuer cette migration, vous devez utiliser la version 3.148.0 ou ultérieure du `aws/aws-sdk-php` package.

 **Installation depuis la ligne de commande ** 

Pour les projets installés à l'aide de Composer, dans le fichier Composer, mettez à jour le package SDK vers la version 3.148.0 du SDK, puis exécutez la commande suivante.

```
composer update aws/aws-sdk-php
```

 **Installation à l'aide du fichier Phar ou Zip ** 

Utilisez l’une des méthodes suivantes. Veillez à placer le fichier SDK mis à jour à l'emplacement requis par votre code, qui est déterminé par l'instruction require.

Pour les projets installés à l'aide du fichier Phar, téléchargez le fichier mis à jour : [`aws.phar`](https://docs.aws.amazon.com/aws-sdk-php/v3/download/aws.phar).

```
<?php
  require '/path/to/aws.phar';
?>
```

Pour les projets installés à l'aide du fichier Zip, téléchargez le fichier mis à jour : [``](https://docs.aws.amazon.com/aws-sdk-php/v3/download/aws.zip).

```
<?php
  require '/path/to/aws-autoloader.php';
?>
```

## 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 à jour vos clients pour lire les nouveaux formats de chiffrement, vous pouvez mettre à jour vos applications vers les clients de chiffrement et de déchiffrement V2. Les étapes suivantes vous montrent comment réussir la migration de votre code de la V1 vers la V2.

### Exigences relatives à la mise à jour vers les clients V2
<a name="requirements-for-updating-to-v2-clients-v1-v2"></a>

1. Le contexte de AWS KMS chiffrement doit être transmis aux `S3EncryptionClientV2::putObjectAsync` méthodes `S3EncryptionClientV2::putObject` et. AWS KMS Le contexte de chiffrement est un tableau associatif de paires clé-valeur, que vous devez ajouter au contexte de chiffrement pour AWS KMS le chiffrement par clé. Si aucun contexte supplémentaire n'est requis, vous pouvez transmettre un tableau vide.

2. `@SecurityProfile`doivent être transmis dans `getObject` et les `getObjectAsync` méthodes dans`S3EncryptionClientV2`. `@SecurityProfile`est un nouveau paramètre obligatoire des `getObject...` méthodes. Si ce paramètre est défini sur`'V2'`, seuls les objets dont le V2-compatible format est chiffré peuvent être déchiffrés. La définition de ce paramètre pour `'V2_AND_LEGACY'` autoriser également le déchiffrement des objets chiffrés V1-compatible au format. Pour prendre en charge la migration, définissez `@SecurityProfile` sur`'V2_AND_LEGACY'`. À utiliser `'V2'` uniquement pour le développement de nouvelles applications.

3. (facultatif) Incluez le `@KmsAllowDecryptWithAnyCmk` paramètre dans le `S3EncryptionClientV2::getObject` et `S3EncryptionClientV2::getObjectAsync* methods.` Un nouveau paramètre a été ajouté appelé`@KmsAllowDecryptWithAnyCmk`. La définition de ce paramètre `true` permet le déchiffrement sans fournir de clé KMS. La valeur par défaut est `false`.

4. Pour le déchiffrement avec un client V2, si le `@KmsAllowDecryptWithAnyCmk` paramètre n'est pas défini sur `true` pour les appels de `"getObject..."` méthode, un `kms-key-id` doit être fourni au `KmsMaterialsProviderV2` constructeur.

## Exemples de migration
<a name="migration-examples-v1-v2"></a>

### Exemple 1 : migration vers des clients V2
<a name="example-1-migrating-to-v2-clients-v1-v2"></a>

 **Pre-migration** 

```
use Aws\S3\Crypto\S3EncryptionClient;
use Aws\S3\S3Client;

$encryptionClient = new S3EncryptionClient(
    new S3Client([
        'profile' => 'default',
        'region' => 'us-east-1',
        'version' => 'latest',
    ])
);
```

 **Post-migration** 

```
use Aws\S3\Crypto\S3EncryptionClientV2;
use Aws\S3\S3Client;

$encryptionClient = new S3EncryptionClientV2(
    new S3Client([
        'profile' => 'default',
        'region' => 'us-east-1',
        'version' => 'latest',
    ])
);
```

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

**Note**  
Ces exemples utilisent les importations et les variables définies dans l'exemple 1. Par exemple, `$encryptionClient`.

 **Pre-migration** 

```
use Aws\Crypto\KmsMaterialsProvider;
use Aws\Kms\KmsClient;

$kmsKeyId = 'kms-key-id';
$materialsProvider = new KmsMaterialsProvider(
    new KmsClient([
        'profile' => 'default',
        'region' => 'us-east-1',
        'version' => 'latest',
    ]),
    $kmsKeyId
);

$bucket = 'the-bucket-name';
$key = 'the-file-name';
$cipherOptions = [
    'Cipher' => 'gcm',
    'KeySize' => 256,
];

$encryptionClient->putObject([
    '@MaterialsProvider' => $materialsProvider,
    '@CipherOptions' => $cipherOptions,
    'Bucket' => $bucket,
    'Key' => $key,
    'Body' => fopen('file-to-encrypt.txt', 'r'),
]);

$result = $encryptionClient->getObject([
    '@MaterialsProvider' => $materialsProvider,
    '@CipherOptions' => $cipherOptions,
    'Bucket' => $bucket,
    'Key' => $key,
]);
```

 **Post-migration** 

```
use Aws\Crypto\KmsMaterialsProviderV2;
use Aws\Kms\KmsClient;

$kmsKeyId = 'kms-key-id';
$materialsProvider = new KmsMaterialsProviderV2(
    new KmsClient([
        'profile' => 'default',
        'region' => 'us-east-1',
        'version' => 'latest',
    ]),
    $kmsKeyId
);

$bucket = 'the-bucket-name';
$key = 'the-file-name';
$cipherOptions = [
    'Cipher' => 'gcm',
    'KeySize' => 256,
];

$encryptionClient->putObject([
    '@MaterialsProvider' => $materialsProvider,
    '@CipherOptions' => $cipherOptions,
    '@KmsEncryptionContext' => ['context-key' => 'context-value'],
    'Bucket' => $bucket,
    'Key' => $key,
    'Body' => fopen('file-to-encrypt.txt', 'r'),
]);
$result = $encryptionClient->getObject([
    '@KmsAllowDecryptWithAnyCmk' => true,
    '@SecurityProfile' => 'V2_AND_LEGACY',
    '@MaterialsProvider' => $materialsProvider,
    '@CipherOptions' => $cipherOptions,
    'Bucket' => $bucket,
    'Key' => $key,
]);
```