

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 stai utilizzando la V2 del client di crittografia S3 e desideri migrare alla V3, 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 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 Ruby nella tua applicazione. Ciò consentirà 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 dell'SDK per Ruby. AWS 

### Aggiorna AWS SDK per Ruby versione 3
<a name="update-aws-sdk-for-ruby-version-3-v1-v2"></a>

La versione 3 è l'ultima versione dell' AWS SDK per Ruby. Per completare questa migrazione, è necessario utilizzare la versione 1.76.0 o successiva del gem. `aws-sdk-s3`

 **Installazione dalla riga di comando ** 

Per i progetti che installano la `aws-sdk-s3` gemma, usate l'opzione version per verificare che sia installata la versione minima di 1.76.0.

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

 **Usare Gemfiles ** 

Per i progetti che utilizzano un Gemfile per gestire le dipendenze, imposta la versione minima del `aws-sdk-s3` gem su 1.76.0. Ad esempio:

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

1. Modifica il tuo Gemfile.

1. Esegui `bundle update aws-sdk-s3`. Per verificare la tua versione, `bundle info aws-sdk-s3` esegui.

### Upgrade AWS SDK per Ruby versione 2
<a name="upgdate-aws-sdk-for-ruby-version-2-v1-v2"></a>

La versione 2 dell' AWS SDK per Ruby entrerà in modalità [ manutenzione il 21 ](https://aws.amazon.com/blogs/developer/deprecation-schedule-for-aws-sdk-for-ruby-v2/) novembre 2021. Per completare questa migrazione, è necessario utilizzare la versione 2.11.562 o successiva di aws-sdk gem.

 **Installazione dalla riga di comando ** 

Per i progetti che installano `aws-sdk` gem, dalla riga di comando, usate l'opzione version per verificare che sia installata la versione minima di 2.11.562.

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

 **Usare Gemfiles ** 

Per i progetti che utilizzano un Gemfile per gestire le dipendenze, imposta la versione minima del `aws-sdk` gem su 2.11.562. Ad esempio:

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

1. Modifica il tuo Gemfile. Se hai un Gemfile.lock file, cancellalo o aggiornalo.

1. Esegui `bundle update aws-sdk`. Per verificare la tua versione, esegui`bundle info aws-sdk`.

## Migra i client di crittografia e decrittografia alla 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.

Prima di aggiornare il codice per utilizzare il client di crittografia V2, assicurati di aver seguito i passaggi precedenti e di utilizzare la versione `aws-sdk-s3` gem 2.11.562 o successiva.

**Nota**  
Quando decifrate con AES-GCM, leggete l'intero oggetto fino alla fine prima di iniziare a utilizzare i dati decrittografati. Questo serve a verificare che l'oggetto non sia stato modificato da quando è stato crittografato.

### Configurazione dei client di crittografia V2
<a name="configuring-v2-encryption-clients-v1-v2"></a>

L'*EncryptionV2: :Client richiede una configurazione aggiuntiva. * Per informazioni dettagliate sulla configurazione, consulta la documentazione di [ EncryptionV2: :Client o gli esempi forniti più avanti in questo argomento. ](https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/S3/EncryptionV2/Client.html#initialize-instance_method)

1. **Il metodo key wrap e l'algoritmo di crittografia dei contenuti devono essere specificati durante la costruzione del client. ** Quando ne crei uno nuovo`EncryptionV2::Client`, devi fornire i valori per `key_wrap_schema` e`content_encryption_schema`.

 `key_wrap_schema`- Se si utilizza AWS KMS, questo valore deve essere impostato su`:kms_context`. Se si utilizza una chiave simmetrica (AES), deve essere impostata su. `:aes_gcm` Se si utilizza una chiave asimmetrica (RSA), deve essere impostata su. `:rsa_oaep_sha1`

 `content_encryption_schema`- Deve essere impostato su:aes\_gcm\_no\_padding. * *

2. **security\_profile deve essere specificato nella costruzione del cliente. ** Quando ne crei uno nuovo`EncryptionV2::Client`, devi fornire un valore per`security_profile`. Il * parametro * security\_profile determina il supporto per la lettura di oggetti scritti utilizzando la vecchia V1. `Encryption::Client` Esistono due valori ::v2 e:v2\_and\_legacy. * * * * Per supportare la migrazione, imposta su:v2\_and\_legacy`security_profile`. * * Utilizza:v2 solo per lo sviluppo di nuove applicazioni. * *

3. **AWS KMS key L'ID viene applicato per impostazione predefinita. ** Nella V1`Encryption::Client`, l'elemento `kms_key_id` utilizzato per creare il client non è stato fornito a. AWS KMS `Decrypt call` AWS KMS può ottenere queste informazioni dai metadati e aggiungerle al blob di testo cifrato simmetrico. In V2, E`ncryptionV2: :Client, * kms\_key\_id * viene passato alla chiamata Decrypt e la chiamata ha esito negativo se non corrisponde alla chiave utilizzata per crittografare l'oggetto. AWS KMS Se in precedenza il codice si basava sull'assenza di un'impostazione specifica, impostata sulla creazione del client o impostata sulle chiamate. `kms_key_id` `kms_key_id: :kms_allow_decrypt_with_any_cmk` `kms_allow_decrypt_with_any_cmk: true` `get_object`

### Esempio: utilizzo di una chiave simmetrica (AES)
<a name="example-using-a-symmetric-aes-key-v1-v2"></a>

 **Pre-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)
```

 **Post-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
```

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

 **Pre-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)
```

 **Post-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
```

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

 **Pre-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)
```

 **Post-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
```

 **Post-Migration Alternativa ** 

Se leggi e decifri solo oggetti (non scrivi e crittografi) utilizzando il client di crittografia S2, usa questo codice.

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