

La AWS SDK per .NET V3 è entrata in modalità manutenzione.

[Ti consigliamo di migrare alla V4.AWS SDK per .NET](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/welcome.html) Per ulteriori dettagli e informazioni su come eseguire la migrazione, consulta il nostro annuncio sulla modalità di [manutenzione](https://aws.amazon.com/blogs/developer/aws-sdk-for-net-v3-maintenance-mode-announcement/).

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

**Nota**  
Se si utilizza la V1 e si desidera migrare alla V4, è necessario prima migrare alla V2. Per informazioni, consulta [Migrazione del client di crittografia Amazon S3 (da V1 a V2)](s3-encryption-migration-v1-v2.md).

Questo argomento mostra come migrare le applicazioni dalla versione 2 (V2) del client di crittografia Amazon Simple Storage Service (Amazon S3) alla versione 4 (V4) e garantire la disponibilità delle applicazioni durante tutto il processo di migrazione. V4 utilizza AES-GCM con impegno fondamentale per la crittografia dei contenuti e introduce Commitment Policies per migliorare la sicurezza contro gli attacchi di sostituzione delle chiavi.

[Il client V4 è disponibile nel pacchetto Amazon.Extensions.S3.Encryption.](https://www.nuget.org/packages/Amazon.Extensions.S3.Encryption) NuGet 

**Importante**  
**Ultime modifiche: i** client V4 configurati con `REQUIRE_ENCRYPT_REQUIRE_DECRYPT` policy non possono decrittografare oggetti crittografati con client V1 o V2. Solo i client V2 più recenti possono decrittografare gli oggetti crittografati V4 con impegno chiave. Prima di passare alla `REQUIRE_ENCRYPT_REQUIRE_DECRYPT` policy, è necessario crittografare nuovamente tutti i dati esistenti utilizzando client V4 con key commit abilitato.

## Comprensione dei concetti della V4
<a name="s3-encryption-migration-v2-v4-concepts"></a>

V4 utilizza AES-GCM con un impegno fondamentale per la crittografia dei contenuti e introduce concetti chiave di sicurezza che migliorano la protezione dei dati crittografati:

### Politica di impegno
<a name="s3-encryption-migration-v2-v4-concepts-policy"></a>

La politica di impegno controlla il modo in cui il client di crittografia gestisce l'impegno delle chiavi durante le operazioni di crittografia e decrittografia. V4 supporta tre politiche di impegno:

`FORBID_ENCRYPT_ALLOW_DECRYPT`  
*Crittografia:* senza impegno  
*Decrittografia: consente oggetti senza* impegno  
*Sicurezza: non impone* l'impegno e può consentire la manomissione  
*Compatibilità:* tutte le implementazioni V2 e V4 possono leggere oggetti crittografati con questa politica

`REQUIRE_ENCRYPT_ALLOW_DECRYPT`  
*Crittografia:* con un impegno fondamentale  
*Decrittografia: consente il commit e il mancato conferimento* di oggetti  
*Sicurezza:* i nuovi oggetti sono protetti dagli attacchi di sostituzione delle chiavi, i vecchi oggetti sono ancora leggibili  
*Compatibilità:* solo la V4 supporta questa politica

`REQUIRE_ENCRYPT_REQUIRE_DECRYPT`(Impostazione predefinita per V4)  
*Crittografia:* con impegno chiave  
*Decrittografia: solo invio* di oggetti  
*Sicurezza:* applicazione del pieno impegno per la massima sicurezza  
*Compatibilità:* solo la versione V4 supporta questa politica

### AES GCM con impegno chiave
<a name="s3-encryption-migration-v2-v4-concepts-aesgcm"></a>

V4 utilizza AES-GCM con un impegno fondamentale per la crittografia dei contenuti, che offre una maggiore sicurezza:
+ *Protezione da manomissioni: protegge dagli attacchi di sostituzione delle chiavi legando* crittograficamente la chiave ai dati crittografati.
+ *Compatibilità delle versioni:* gli oggetti crittografati con l'impegno della chiave possono essere decrittografati solo dai client V4 e dalle versioni più recenti.

**avvertimento**  
Prima di abilitare la crittografia Key Commitment in produzione, assicuratevi che tutte le applicazioni che devono decrittografare gli oggetti siano state aggiornate alla versione 4 o successiva, poiché il client V2 è diventato obsoleto.

## Aggiorna i client esistenti per leggere i formati V4
<a name="s3-encryption-migration-v2-v4-update-clients"></a>

Il client di crittografia V4 utilizza algoritmi di crittografia che le versioni precedenti del client non supportano. Il primo passo della migrazione consiste nell'aggiornare i client V2 in modo che possano leggere il nuovo formato V4.

### Aggiorna le dipendenze dei NuGet pacchetti
<a name="s3-encryption-migration-v2-v4-update-nuget"></a>

Aggiorna le tue applicazioni per utilizzare la versione più recente del pacchetto [ NuGet Amazon.Extensions.S3.Encryption](https://www.nuget.org/packages/Amazon.Extensions.S3.Encryption) che include il supporto V4. Esegui i seguenti passaggi su ciascuna delle tue applicazioni:

1. Esegui l'aggiornamento al pacchetto [Amazon.Extensions.S3.Encryption](https://www.nuget.org/packages/Amazon.Extensions.S3.Encryption) più recente. **Se il tuo progetto dipende direttamente dal file.S3 o. AWSSDK AWSSDK** ** KeyManagementService**pacchetti, è necessario aggiornare tali dipendenze o rimuoverle in modo che le loro versioni aggiornate vengano inserite in questo nuovo pacchetto.

1. Assicurati che le tue `using` istruzioni facciano riferimento al namespace corretto:

   ```
   using Amazon.Extensions.S3.Encryption;
   using Amazon.Extensions.S3.Encryption.Primitives;
   ```

1. Ricostruisci e ridistribuisci l'applicazione.

I client V2 esistenti continueranno a funzionare con il pacchetto aggiornato e saranno in grado di decrittografare gli oggetti crittografati dai client V4 (a seconda della politica di impegno utilizzata).

### Crea e distribuisci applicazioni
<a name="s3-encryption-migration-v2-v4-build-deploy"></a>

Dopo aver aggiornato le dipendenze dei NuGet pacchetti:

1. Crea la tua applicazione per assicurarti che tutte le dipendenze vengano risolte correttamente.

1. Testa l'applicazione in un ambiente di sviluppo per verificare che le funzionalità esistenti continuino a funzionare.

1. Implementa l'applicazione aggiornata nel tuo ambiente di produzione.

Questo aggiornamento consente ai client V2 esistenti di decrittografare gli oggetti che verranno crittografati dai client V4, garantendo la compatibilità durante il processo di migrazione.

## Esegui la migrazione ai client V4
<a name="s3-encryption-migration-v2-v4-migrate"></a>

Dopo aver aggiornato i client esistenti per leggere il nuovo formato di crittografia, è possibile procedere all'aggiornamento sicuro delle applicazioni per utilizzare i client di crittografia e decrittografia V4. Il client V4 offre una maggiore sicurezza grazie all'impegno delle chiavi, pur mantenendo la compatibilità con gli oggetti crittografati esistenti.

### Processo di migrazione in 4 fasi
<a name="s3-encryption-migration-v2-v4-migrate-steps"></a>

La migrazione dalla V2 alla V4 segue un processo strutturato in 4 fasi per garantire compatibilità e sicurezza. Ogni passaggio rappresenta una configurazione specifica che deve essere implementata in tutte le applicazioni prima di procedere al passaggio successivo.

1. **Fase 0: Client V2 (punto di partenza)** - Implementazione V2 esistente

1. **Fase 1: compatibilità V4 con V2** - Migrazione al client V4 mantenendo un comportamento di crittografia compatibile con V2

1. **Fase 2: V4 con Key Commitment Writes - Inizia a crittografare con key** commit, permettendo al contempo la decrittografia degli oggetti legacy

1. **Fase 3: V4 con applicazione completa**: è necessario un impegno fondamentale sia per la crittografia che per la decrittografia

### Fase 0: V2 Client (punto di partenza)
<a name="s3-encryption-migration-v2-v4-step0"></a>

Rappresenta la configurazione del client V2 esistente. Questo passaggio dimostra lo stato iniziale prima della migrazione.

```
using Amazon.Extensions.S3.Encryption;
using Amazon.Extensions.S3.Encryption.Primitives;
using Amazon.S3.Model;

// Step 0: V2 Client - Starting configuration
var encryptionContext = new Dictionary<string, string>();
var encryptionMaterial = new EncryptionMaterialsV2(kmsKeyId, KmsType.KmsContext, encryptionContext);

#pragma warning disable 0618
var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2);
#pragma warning enable 0618

var encryptionClient = new AmazonS3EncryptionClientV2(configuration, encryptionMaterial);

// Use the client for PutObject and GetObject operations
await encryptionClient.PutObjectAsync(new PutObjectRequest
{
    BucketName = bucket,
    Key = objectKey,
    ContentBody = content
});
```

### Fase 1: compatibilità V4 con V2
<a name="s3-encryption-migration-v2-v4-step1"></a>

Esegui la migrazione al client V4 mantenendo un comportamento identico a quello della V2. Questo passaggio utilizza una `FORBID_ENCRYPT_ALLOW_DECRYPT` politica per crittografare senza impegno e consentire la decrittografia di tutti gli oggetti.

```
using Amazon.Extensions.S3.Encryption;
using Amazon.Extensions.S3.Encryption.Primitives;
using Amazon.S3.Model;

// Step 1: V4 Client with V2 compatibility
var encryptionContext = new Dictionary<string, string>();
var encryptionMaterial = new EncryptionMaterialsV4(kmsKeyId, KmsType.KmsContext, encryptionContext);

var configuration = new AmazonS3CryptoConfigurationV4(
    SecurityProfile.V4, 
    CommitmentPolicy.FORBID_ENCRYPT_ALLOW_DECRYPT, 
    ContentEncryptionAlgorithm.AesGcm);

var encryptionClient = new AmazonS3EncryptionClientV4(configuration, encryptionMaterial);

// Use the client for PutObject and GetObject operations
await encryptionClient.PutObjectAsync(new PutObjectRequest
{
    BucketName = bucket,
    Key = objectKey,
    ContentBody = content
});
```

**Comportamento:** cripta senza impegno, può decrittografare sia gli oggetti che effettuano il commit che quelli che non effettuano il commit. Identico al comportamento della V2.

### Fase 2: V4 con Key Commitment Writes
<a name="s3-encryption-migration-v2-v4-step2"></a>

Inizia a crittografare con un impegno chiave, mantenendo al contempo la compatibilità con le versioni precedenti per la decrittografia. Questo passaggio utilizza la politica. `REQUIRE_ENCRYPT_ALLOW_DECRYPT`

**avvertimento**  
Prima di implementare la Fase 2, assicuratevi che tutti i lettori siano stati aggiornati alla Fase 1 o a una versione successiva per gestire la crittografia con impegno chiave.

```
using Amazon.Extensions.S3.Encryption;
using Amazon.Extensions.S3.Encryption.Primitives;
using Amazon.S3.Model;

// Step 2: V4 Client with key commitment writes
var encryptionContext = new Dictionary<string, string>();
var encryptionMaterial = new EncryptionMaterialsV4(kmsKeyId, KmsType.KmsContext, encryptionContext);

var configuration = new AmazonS3CryptoConfigurationV4(
    SecurityProfile.V4, 
    CommitmentPolicy.REQUIRE_ENCRYPT_ALLOW_DECRYPT, 
    ContentEncryptionAlgorithm.AesGcmWithCommitment);

var encryptionClient = new AmazonS3EncryptionClientV4(configuration, encryptionMaterial);

// Use the client for PutObject and GetObject operations
await encryptionClient.PutObjectAsync(new PutObjectRequest
{
    BucketName = bucket,
    Key = objectKey,
    ContentBody = content
});
```

**Comportamento:** cripta con impegno, può decrittografare sia gli oggetti che effettuano il commit che quelli che non effettuano il commit. I nuovi oggetti sono protetti dagli attacchi di sostituzione delle chiavi.

### Fase 3: V4 con applicazione completa
<a name="s3-encryption-migration-v2-v4-step3"></a>

Richiede un impegno fondamentale sia per la crittografia che per la decrittografia. Questo passaggio utilizza una `REQUIRE_ENCRYPT_REQUIRE_DECRYPT` politica per la massima sicurezza.

**avvertimento**  
Prima di implementare la Fase 3, assicuratevi che tutti gli oggetti del sistema siano stati ricrittografati con Key Commitment (Fase 2). Questo passaggio non riuscirà a decrittografare gli oggetti crittografati senza impegno.

```
using Amazon.Extensions.S3.Encryption;
using Amazon.Extensions.S3.Encryption.Primitives;
using Amazon.S3.Model;

// Step 3: V4 Client with full key commitment enforcement
var encryptionContext = new Dictionary<string, string>();
var encryptionMaterial = new EncryptionMaterialsV4(kmsKeyId, KmsType.KmsContext, encryptionContext);

var configuration = new AmazonS3CryptoConfigurationV4(
    SecurityProfile.V4, 
    CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT, 
    ContentEncryptionAlgorithm.AesGcmWithCommitment);

var encryptionClient = new AmazonS3EncryptionClientV4(configuration, encryptionMaterial);

// Use the client for PutObject and GetObject operations
await encryptionClient.PutObjectAsync(new PutObjectRequest
{
    BucketName = bucket,
    Key = objectKey,
    ContentBody = content
});
```

**Comportamento:** crittografa con impegno, decrittografa solo gli oggetti crittografati con impegno. Massima sicurezza contro gli attacchi di sostituzione delle chiavi.

## Esempi di configurazione aggiuntivi
<a name="s3-encryption-migration-v2-v4-examples"></a>

Questa sezione fornisce esempi aggiuntivi per la configurazione dei client V4 con diverse opzioni durante la migrazione.

### Abilitazione del supporto Legacy
<a name="s3-encryption-migration-v2-v4-examples-legacy"></a>

Per consentire ai client V4 di leggere gli oggetti crittografati dai client V1 e V2, configura il client con una politica di impegno che consenta la decrittografia legacy:

```
using Amazon.Extensions.S3.Encryption;
using Amazon.Extensions.S3.Encryption.Primitives;

// Configure V4 client to read V1/V2 objects
var configuration = new AmazonS3CryptoConfigurationV4(CommitmentPolicy.REQUIRE_ENCRYPT_ALLOW_DECRYPT)
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};

// This configuration allows:
// - Encryption: With commitment (secure)
// - Decryption: Both V2 (non-committing) and V4 (committing) objects
```

Utilizza questa configurazione durante la migrazione quando devi decrittografare oggetti crittografati da client precedenti, garantendo al contempo che i nuovi oggetti siano crittografati con una maggiore sicurezza.

### Configurazione del metodo di archiviazione
<a name="s3-encryption-migration-v2-v4-examples-storage"></a>

V4 supporta due metodi di archiviazione per i metadati di crittografia. Scegli il metodo più adatto al tuo caso d'uso:

**Metadati degli oggetti (impostazione predefinita)**

```
var configuration = new AmazonS3CryptoConfigurationV4(CommitmentPolicy.REQUIRE_ENCRYPT_ALLOW_DECRYPT)
{
    StorageMode = CryptoStorageMode.ObjectMetadata
};
// Encryption metadata is stored in S3 object metadata
```

**File di istruzioni**

```
var configuration = new AmazonS3CryptoConfigurationV4(CommitmentPolicy.REQUIRE_ENCRYPT_ALLOW_DECRYPT)
{
    StorageMode = CryptoStorageMode.InstructionFile
};
// Encryption metadata is stored in a separate S3 object (instruction file)
```

Da utilizzare `InstructionFile` quando è necessario conservare i metadati degli oggetti per altri scopi o quando si lavora con oggetti con limitazioni di dimensione dei metadati.

### Configurazione della politica di impegno
<a name="s3-encryption-migration-v2-v4-examples-policy"></a>

Scegliete la politica di impegno appropriata in base ai requisiti di sicurezza e alla fase di migrazione:

**Fase di migrazione (compatibilità V2)**

```
// For migration: encrypt without commitment, allow all decryption
var migrationConfig = new AmazonS3CryptoConfigurationV4(CommitmentPolicy.FORBID_ENCRYPT_ALLOW_DECRYPT);
```

**Fase di transizione (consigliata)**

```
// For transition: encrypt with commitment, allow legacy decryption
var transitionConfig = new AmazonS3CryptoConfigurationV4(CommitmentPolicy.REQUIRE_ENCRYPT_ALLOW_DECRYPT);
```

**Fase di sicurezza completa**

```
// For maximum security: require commitment for both encryption and decryption
var secureConfig = new AmazonS3CryptoConfigurationV4(CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT);
```

Inizia con `FORBID_ENCRYPT_ALLOW_DECRYPT` la migrazione iniziale, passa alla fase `REQUIRE_ENCRYPT_ALLOW_DECRYPT` di transizione e infine utilizza `REQUIRE_ENCRYPT_REQUIRE_DECRYPT` quando tutti i client sono stati aggiornati e tutti gli oggetti sono stati ricrittografati con impegno.