

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Migrazione del client di crittografia Amazon S3 (da V1 a V2) nel AWS SDK per PHP Versione 3
<a name="s3-encryption-migration-v1-v2"></a>

**Nota**  
Se stai utilizzando la versione 2 (V2) del client di crittografia Amazon S3 e desideri migrare alla versione 3 (V3), consulta. [Migrazione del client di crittografia Amazon S3 (da V2 a V3) nel AWS SDK per PHP Versione 3](s3-encryption-migration-v2-v3.md)

Questo argomento mostra come migrare le applicazioni dalla versione 1 (V1) del client di crittografia Amazon Simple Storage Service (Amazon S3) alla versione 2 (V2) e garantire la disponibilità delle applicazioni durante tutto il processo di migrazione.

## Panoramica della migrazione
<a name="migration-overview-v1-v2"></a>

Questa migrazione avviene in due fasi:

1. **Aggiorna i client esistenti per leggere nuovi formati. ** Innanzitutto, distribuisci una versione aggiornata dell' AWS SDK per PHP applicazione. Ciò consente ai client di crittografia V1 esistenti di decrittografare gli oggetti scritti dai nuovi client V2. Se l'applicazione utilizza più AWS SDK, è necessario aggiornare ciascun SDK separatamente.

2. **Esegui la migrazione dei client di crittografia e decrittografia alla V2. ** Una volta che tutti i client di crittografia V1 sono in grado di leggere i nuovi formati, è possibile migrare i client di crittografia e decrittografia esistenti alle rispettive versioni V2.

## Aggiorna i client esistenti per leggere nuovi formati
<a name="update-existing-clients-to-read-new-formats-v1-v2"></a>

Il client di crittografia V2 utilizza algoritmi di crittografia non supportati dalle versioni precedenti del client. Il primo passaggio della migrazione consiste nell'aggiornare i client di decrittografia V1 all'ultima versione SDK. Dopo aver completato questo passaggio, i client V1 dell'applicazione saranno in grado di decrittografare gli oggetti crittografati dai client di crittografia V2. Vedi i dettagli di seguito per ciascuna versione principale di. AWS SDK per PHP

### Aggiornamento AWS SDK per PHP Versione 3
<a name="upgrading-aws-sdk-for-php-version-3-v1-v2"></a>

La versione 3 è la versione più recente di AWS SDK per PHP. Per completare questa migrazione, è necessario utilizzare la versione 3.148.0 o successiva del pacchetto. `aws/aws-sdk-php`

 **Installazione dalla riga di comando ** 

Per i progetti installati tramite Composer, nel file Composer, aggiorna il pacchetto SDK alla versione 3.148.0 dell'SDK e quindi esegui il seguente comando.

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

 **Installazione utilizzando il file Phar o Zip ** 

Utilizzare uno dei seguenti metodi. Assicurati di inserire il file SDK aggiornato nella posizione richiesta dal codice, determinata dall'istruzione require.

Per i progetti installati utilizzando il file Phar, scarica il file aggiornato:. [`aws.phar`](https://docs.aws.amazon.com/aws-sdk-php/v3/download/aws.phar)

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

Per i progetti installati utilizzando il file Zip, scarica il file aggiornato: [``](https://docs.aws.amazon.com/aws-sdk-php/v3/download/aws.zip).

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

## Migra i client di crittografia e decrittografia su V2
<a name="migrate-encryption-and-decryption-clients-to-v2-v1-v2"></a>

Dopo aver aggiornato i client per leggere i nuovi formati di crittografia, è possibile aggiornare le applicazioni ai client di crittografia e decrittografia V2. I passaggi seguenti mostrano come migrare correttamente il codice dalla V1 alla V2.

### Requisiti per l'aggiornamento ai client V2
<a name="requirements-for-updating-to-v2-clients-v1-v2"></a>

1. Il contesto di AWS KMS crittografia deve essere passato ai `S3EncryptionClientV2::putObjectAsync` metodi `S3EncryptionClientV2::putObject` and. AWS KMS il contesto di crittografia è un array associativo di coppie chiave-valore, che è necessario aggiungere al contesto di crittografia per AWS KMS la crittografia delle chiavi. Se non è richiesto alcun contesto aggiuntivo, è possibile passare un array vuoto.

2. `@SecurityProfile`deve essere passato ai `getObjectAsync` metodi `getObject` e in`S3EncryptionClientV2`. `@SecurityProfile`è un nuovo parametro obbligatorio dei `getObject...` metodi. Se impostato su`'V2'`, solo gli oggetti crittografati in V2-compatible formato possono essere decrittografati. L'impostazione di questo parametro su consente `'V2_AND_LEGACY'` anche la decrittografia degli oggetti crittografati in V1-compatible formato. Per supportare la migrazione, imposta su`@SecurityProfile`. `'V2_AND_LEGACY'` Usare `'V2'` solo per lo sviluppo di nuove applicazioni.

3. (opzionale) Includi il `@KmsAllowDecryptWithAnyCmk` parametro in `S3EncryptionClientV2::getObject` e È stato aggiunto `S3EncryptionClientV2::getObjectAsync* methods.` un nuovo parametro chiamato`@KmsAllowDecryptWithAnyCmk`. L'impostazione di questo parametro su `true` abilita la decrittografia senza fornire una chiave KMS. Il valore predefinito è `false`.

4. Per la decrittografia con un client V2, se il `@KmsAllowDecryptWithAnyCmk` parametro non è impostato su `true` per le chiamate al `"getObject..."` metodo, è necessario fornire un `kms-key-id` valore al costruttore. `KmsMaterialsProviderV2`

## Esempi di migrazione
<a name="migration-examples-v1-v2"></a>

### Esempio 1: migrazione ai client 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',
    ])
);
```

### Esempio 2: utilizzo AWS KMS con kms-key-id
<a name="example-2-using-kms-with-kms-key-id-v1-v2"></a>

**Nota**  
Questi esempi utilizzano importazioni e variabili definite nell'Esempio 1. Ad esempio, `$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,
]);
```