

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)
<a name="s3-encryption-migration-v1-v2"></a>

**Nota**  
Se utilizzi la versione 2 del client di crittografia Amazon S3 e desideri migrare alla versione 3, consulta. [Migrazione del client di crittografia Amazon S3 (da V2 a V3)](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 sulla 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 di nella AWS SDK per C\+\+ tua applicazione. Ciò consente ai client di crittografia V1 esistenti di decrittografare gli oggetti scritti dai nuovi client V2. Se l'applicazione ne utilizza più AWS SDKs, è necessario aggiornare ogni SDK separatamente.

2. **Migra i client di crittografia e decrittografia alla versione 2.** Una volta che tutti i client di crittografia V1 sono in grado di leggere 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>

Devi prima aggiornare i client esistenti all'ultima versione dell'SDK. Dopo aver completato questo passaggio, i client V1 dell'applicazione saranno in grado di decrittografare gli oggetti crittografati dai client di crittografia V2 senza aggiornare la base di codice dell'applicazione.

### Compila e installa la versione più recente di AWS SDK per C\+\+
<a name="build-and-install-the-latest-version-of-the-sdk-cpp-v1-v2"></a>

 **Applicazioni che utilizzano l'SDK dal codice sorgente** 

Se compili e installi il codice sorgente, scarica o clona il codice sorgente dell'SDK AWS SDK per C\+\+ da on. [`aws/aws-sdk-cpp`](https://github.com/aws/aws-sdk-cpp) GitHub Quindi ripeti i normali passaggi di compilazione e installazione.

Se state effettuando l'aggiornamento AWS SDK per C\+\+ da una versione precedente alla 1.8.x, consultate questo [CHANGELOG](https://github.com/aws/aws-sdk-cpp/blob/master/CHANGELOG.md) per conoscere le modifiche introdotte in ogni versione principale. Per ulteriori informazioni su come creare e installare, consulta. AWS SDK per C\+\+[Ottenere AWS SDK per C\+\+ il codice sorgente](sdk-from-source.md)

 **Applicazioni che utilizzano l'SDK di Vcpkg** 

Se l'applicazione utilizza [Vcpkg](https://github.com/microsoft/vcpkg) per tenere traccia degli aggiornamenti SDK, è sufficiente utilizzare il metodo di aggiornamento Vcpkg esistente per aggiornare l'SDK alla versione più recente. Tieni presente che c'è un ritardo tra il rilascio di una versione e il momento in cui è disponibile tramite un gestore di pacchetti. La versione più recente è sempre disponibile tramite l'[installazione dal codice sorgente](sdk-from-source.md). 

È possibile eseguire il seguente comando per aggiornare il pacchetto`aws-sdk-cpp`:

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

E verifica la versione del pacchetto`aws-sdk-cpp`:

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

La versione deve essere almeno la 1.8.24.

Per ulteriori informazioni sull'utilizzo di Vcpkg con, vedere. AWS SDK per C\+\+[Ottenere il AWS SDK per C\+\+ file da un gestore di pacchetti](sdk-from-pm.md)

### Crea, installa e distribuisci le tue applicazioni
<a name="build-install-and-deploy-your-applications-v1-v2"></a>

Se l'applicazione si collega staticamente a AWS SDK per C\+\+, non sono necessarie modifiche al codice nell'applicazione, ma è necessario creare nuovamente l'applicazione per utilizzare le ultime modifiche dell'SDK. Questo passaggio non è necessario per il collegamento dinamico.

Dopo aver aggiornato la versione dipendente dell'applicazione e verificato la funzionalità dell'applicazione, procedi con la distribuzione dell'applicazione nel tuo parco macchine. Una volta completata la distribuzione dell'applicazione, è possibile procedere con la fase successiva di migrazione dell'applicazione per utilizzare i client di crittografia e decrittografia V2.

## Esegui la migrazione dei client di crittografia e decrittografia alla V2
<a name="migrate-encryption-and-decryption-clients-to-v2-v1-v2"></a>

I passaggi seguenti mostrano come migrare correttamente il codice dalla versione 1 alla versione 2 del client di crittografia Amazon S3. Poiché sono necessarie modifiche al codice, dovrai ricostruire l'applicazione indipendentemente dal fatto che si colleghi staticamente o dinamicamente a. AWS SDK per C\+\+

### Utilizzo di nuovi materiali di crittografia
<a name="using-new-encryption-materials-v1-v2"></a>

Con i client di crittografia Amazon S3 V2 e la configurazione crittografica V2, i seguenti materiali di crittografia sono obsoleti:
+  `SimpleEncryptionMaterials` 
+  `KMSEncryptionMaterials` 

Sono stati sostituiti con i seguenti materiali di crittografia sicuri:
+  `SimpleEncryptionMaterialsWithGCMAAD` 
+  `KMSWithContextEncryptionMaterials` 

Le seguenti modifiche al codice sono necessarie per creare un client di crittografia V2 S3:
+   
**Se si utilizza `KMSEncryptionMaterials` durante la creazione di un client di crittografia S3:**  
  + Quando crei un client di crittografia V2 S3, sostituiscilo `KMSEncryptionMaterials` con `KMSWithContextEncryptionMaterials` e specificalo nella configurazione di crittografia V2.
  + Quando inserisci un oggetto con i client di crittografia Amazon S3 V2, devi fornire esplicitamente una mappa di contesto stringa-stringa come contesto KMS per la crittografia del CEK. Potrebbe trattarsi di una mappa vuota.
+   
**Se si utilizza `SimpleEncryptionMaterials` durante la creazione di un client di crittografia S3:**  
  + Quando crei un client di crittografia Amazon S3 V2, `SimpleEncryptionMaterials` `SimpleEncryptionMaterialsWithGCMAAD` sostituiscilo e specificalo nella configurazione di crittografia V2.
  + Quando inserisci un oggetto con i client di crittografia Amazon S3 V2, devi fornire esplicitamente una mappa di contesto stringa-stringa vuota, altrimenti l'SDK restituirà un errore.

 **Esempio: utilizzo dell'algoritmo Key Wrap KMS/KMSWithContext ** 

 *Premigrazione (KMS key wrap)* 

```
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);
```

 *Post-migrazione (KMSWithContext key wrap)* 

```
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 */);
```

 **Esempio: utilizzo dell'algoritmo Key Wrap AES/AES-GCM** 

 *Premigrazione (key wrap 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);
```

 *Dopo la migrazione (portachiavi 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 */);
```

## Esempi aggiuntivi
<a name="additional-examples-v1-v2"></a>

Gli esempi seguenti mostrano come affrontare casi d'uso specifici relativi a una migrazione dalla V1 alla V2.

### Decrittografa gli oggetti crittografati dai client di crittografia Amazon S3 legacy
<a name="decrypt-objects-encrypted-by-legacy-amazon-s3-encryption-clients-v1-v2"></a>

Per impostazione predefinita, non puoi utilizzare il client di crittografia Amazon S3 V2 per decrittografare oggetti crittografati con algoritmi di key wrap obsoleti o schemi di crittografia dei contenuti obsoleti.

I seguenti algoritmi di key wrap sono obsoleti:
+  `KMS` 
+  `AES_KEY_WRAP` 

Inoltre, i seguenti schemi di crittografia dei contenuti sono obsoleti:
+  `CBC` 
+  `CTR` 

Se utilizzi client di crittografia Amazon S3 legacy AWS SDK per C\+\+ per crittografare gli oggetti, probabilmente stai utilizzando i metodi obsoleti se:
+ `SimpleEncryptionMaterials`Hai `KMSEncryptionMaterials` usato o.
+ L'hai `ENCRYPTION_ONLY` usato `Crypto Mode` nella tua configurazione crittografica.

Per utilizzare il client di crittografia Amazon S3 V2 per decrittografare oggetti crittografati mediante algoritmi di key wrap obsoleti o schemi di crittografia dei contenuti obsoleti, devi sovrascrivere il valore predefinito di nella configurazione di crittografia V2 da a. `SecurityProfile` `V2` `V2_AND_LEGACY`

 **Esempio** 

 *Prima della migrazione* 

```
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);
```

 *Post-migrazione* 

```
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);
```

### Decrittografa oggetti con Range
<a name="decrypt-objects-with-range-v1-v2"></a>

Con i client di crittografia Amazon S3 legacy, puoi specificare un intervallo di byte da ricevere durante la decrittografia di un oggetto S3. Nel client di crittografia Amazon S3 V2, questa funzionalità `DISABLED` è predefinita. Pertanto è necessario sovrascrivere il valore predefinito di `RangeGetMode` from `DISABLED` to `ALL` nella configurazione crittografica V2.

 **Esempio** 

 *Pre-migrazione* 

```
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);
```

 *Post-migrazione* 

```
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);
```

### Decrittografa gli oggetti con qualsiasi CMK
<a name="decrypt-objects-with-any-cmk-v1-v2"></a>

Durante la decrittografia di oggetti che sono stati crittografati con`KMSWithContextEncryptionMaterials`, i client di crittografia Amazon S3 V2 sono in grado di consentire a KMS di trovare la CMK corretta fornendo una chiave master vuota. `DISABLED`Questa funzionalità è di default. È necessario configurarla in modo esplicito richiamando `SetKMSDecryptWithAnyCMK(true)` i materiali di crittografia KMS.

 **Esempio** 

 *Pre-migrazione* 

```
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);
```

 *Post-migrazione* 

```
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);
```

Per il codice completo per tutti questi scenari di migrazione, consulta l'[esempio di crittografia Amazon S3](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/s3encryption) su Github.