Migrazione del client di crittografia Amazon S3 - AWS SDK for .NET

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

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.

Gli oggetti crittografati con il client V2 non possono essere decrittografati con il client V1. Per facilitare la migrazione al nuovo client senza dover ricrittografare tutti gli oggetti contemporaneamente, è stato fornito un client «V1-transitional». Questo client può decrittografare gli oggetti crittografati V1 e V2, ma crittografa gli oggetti solo in formato compatibile con V1. Il client V2 può decrittografare gli oggetti crittografati V1 e V2 (se abilitato per gli oggetti V1), ma crittografa gli oggetti solo in formato compatibile con V2.

Panoramica sulla migrazione

Questa migrazione avviene in tre fasi. Queste fasi vengono introdotte qui e descritte in dettaglio più avanti. Ogni fase deve essere completata per tutti i client che utilizzano oggetti condivisi prima di iniziare la fase successiva.

  1. Aggiorna i client esistenti ai client di transizione V1 per leggere nuovi formati. Innanzitutto, aggiorna le tue applicazioni in modo che dipendano dal client di transizione V1 anziché dal client V1. Il client di transizione V1 consente al codice esistente di decrittografare gli oggetti scritti dai nuovi client V2 e gli oggetti scritti in formato compatibile con V1.

    Nota

    Il client v1-Transitional viene fornito solo a scopo di migrazione. Procedi all'aggiornamento al client V2 dopo il passaggio al client v1-Transitional.

  2. Migra i client di transizione V1 ai client V2 per scrivere nuovi formati. Quindi, sostituisci tutti i client di transizione V1 nelle tue applicazioni con client V2 e imposta il profilo di sicurezza su. V2AndLegacy L'impostazione di questo profilo di sicurezza sui client V2 consente a tali client di decrittografare gli oggetti crittografati in un formato compatibile con V1.

  3. Aggiorna i client V2 in modo che non leggano più i formati V1. Infine, dopo che tutti i client sono stati migrati alla V2 e tutti gli oggetti sono stati crittografati o ricrittografati in un formato compatibile con V2, imposta il profilo di sicurezza V2 su invece di. V2 V2AndLegacy Ciò impedisce la decrittografia di oggetti in formato compatibile con V1.

Aggiorna i client esistenti ai client di transizione V1 per leggere nuovi formati

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

Il client di transizione V1 consente alle applicazioni di decrittografare oggetti crittografati V1 e V2. Questo client fa parte del pacchetto Amazon.Extensions.S3.Encryption. NuGet Esegui i seguenti passaggi su ciascuna delle tue applicazioni per utilizzare il client di transizione v1.

  1. Assumi una nuova dipendenza dal pacchetto Amazon.Extensions.S3.Encryption. Se il tuo progetto dipende direttamente dal file .S3 o. AWSSDK AWSSDK KeyManagementServicepacchetti, è necessario aggiornare tali dipendenze o rimuoverle in modo che le loro versioni aggiornate vengano inserite in questo nuovo pacchetto.

  2. Modificate l'usingistruzione appropriata da Amazon.S3.Encryption aAmazon.Extensions.S3.Encryption, come segue:

    // using Amazon.S3.Encryption; using Amazon.Extensions.S3.Encryption;
  3. Ricostruisci e ridistribuisci l'applicazione.

Il client di transizione V1 è completamente compatibile con l'API con il client V1, quindi non sono necessarie altre modifiche al codice.

Esegui la migrazione dei client di transizione V1 ai client V2 per scrivere nuovi formati

Il client V2 fa parte del pacchetto Amazon.Extensions.S3.Encryption. NuGet Consente alle applicazioni di decrittografare gli oggetti crittografati V1 e V2 (se configurato per tale operazione), ma crittografa gli oggetti solo in formato compatibile con V2.

Dopo aver aggiornato i client esistenti per leggere il nuovo formato di crittografia, è possibile procedere all'aggiornamento sicuro delle applicazioni ai client di crittografia e decrittografia V2. Esegui i seguenti passaggi su ciascuna delle tue applicazioni per utilizzare il client V2:

  1. Passare da EncryptionMaterials a EncryptionMaterialsV2.

    1. Quando si utilizza KMS:

      1. Fornisci un ID chiave KMS.

      2. Dichiara il metodo di crittografia che stai utilizzando, ovvero. KmsType.KmsContext

      3. Fornisci a KMS un contesto di crittografia da associare a questa chiave dati. Puoi inviare un dizionario vuoto (il contesto di crittografia Amazon verrà comunque inserito), ma è consigliabile fornire un contesto aggiuntivo.

    2. Quando si utilizzano metodi di key wrap forniti dall'utente (crittografia simmetrica o asimmetrica):

      1. Fornisci un'istanza AES o un'RSAistanza che contenga i materiali di crittografia.

      2. Dichiara quale algoritmo di crittografia utilizzare; ovvero, SymmetricAlgorithmType.AesGcm oAsymmetricAlgorithmType.RsaOaepSha1.

  2. Passa AmazonS3CryptoConfiguration a AmazonS3CryptoConfigurationV2 con la SecurityProfile proprietà impostata su. SecurityProfile.V2AndLegacy

  3. Passare da AmazonS3EncryptionClient a AmazonS3EncryptionClientV2. Questo client utilizza gli EncryptionMaterialsV2 oggetti appena convertiti AmazonS3CryptoConfigurationV2 e quelli dei passaggi precedenti.

Esempio: da KMS a KMS+Context

Pre-migrazione

using System.Security.Cryptography; using Amazon.S3.Encryption; var encryptionMaterial = new EncryptionMaterials("1234abcd-12ab-34cd-56ef-1234567890ab"); var configuration = new AmazonS3CryptoConfiguration() { StorageMode = CryptoStorageMode.ObjectMetadata }; var encryptionClient = new AmazonS3EncryptionClient(configuration, encryptionMaterial);

Post-migrazione

using System.Security.Cryptography; using Amazon.Extensions.S3.Encryption; using Amazon.Extensions.S3.Encryption.Primitives; var encryptionContext = new Dictionary<string, string>(); var encryptionMaterial = new EncryptionMaterialsV2("1234abcd-12ab-34cd-56ef-1234567890ab", KmsType.KmsContext, encryptionContext); var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2AndLegacy) { StorageMode = CryptoStorageMode.ObjectMetadata }; var encryptionClient = new AmazonS3EncryptionClientV2(configuration, encryptionMaterial);

Esempio: algoritmo simmetrico (portachiavi da AES-CBC a AES-GCM)

StorageMode può essere ObjectMetadata o InstructionFile.

Pre-migrazione

using System.Security.Cryptography; using Amazon.S3.Encryption; var symmetricAlgorithm = Aes.Create(); var encryptionMaterial = new EncryptionMaterials(symmetricAlgorithm); var configuration = new AmazonS3CryptoConfiguration() { StorageMode = CryptoStorageMode.ObjectMetadata }; var encryptionClient = new AmazonS3EncryptionClient(configuration, encryptionMaterial);

Post-migrazione

using System.Security.Cryptography; using Amazon.Extensions.S3.Encryption; using Amazon.Extensions.S3.Encryption.Primitives; var symmetricAlgorithm = Aes.Create(); var encryptionMaterial = new EncryptionMaterialsV2(symmetricAlgorithm, SymmetricAlgorithmType.AesGcm); var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2AndLegacy) { StorageMode = CryptoStorageMode.ObjectMetadata }; var encryptionClient = new AmazonS3EncryptionClientV2(configuration, encryptionMaterial);
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.

Esempio: algoritmo asimmetrico (Key Wrap da RSA a RSA-OAEP-SHA1)

StorageMode può essere ObjectMetadata o InstructionFile.

Pre-migrazione

using System.Security.Cryptography; using Amazon.S3.Encryption; var asymmetricAlgorithm = RSA.Create(); var encryptionMaterial = new EncryptionMaterials(asymmetricAlgorithm); var configuration = new AmazonS3CryptoConfiguration() { StorageMode = CryptoStorageMode.ObjectMetadata }; var encryptionClient = new AmazonS3EncryptionClient(configuration, encryptionMaterial);

Post-migrazione

using System.Security.Cryptography; using Amazon.Extensions.S3.Encryption; using Amazon.Extensions.S3.Encryption.Primitives; var asymmetricAlgorithm = RSA.Create(); var encryptionMaterial = new EncryptionMaterialsV2(asymmetricAlgorithm, AsymmetricAlgorithmType.RsaOaepSha1); var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2AndLegacy) { StorageMode = CryptoStorageMode.ObjectMetadata }; var encryptionClient = new AmazonS3EncryptionClientV2(configuration, encryptionMaterial);

Aggiorna i client V2 in modo che non leggano più i formati V1

Alla fine, tutti gli oggetti saranno stati crittografati o ricrittografati utilizzando un client V2. Al termine di questa conversione, è possibile disabilitare la compatibilità V1 nei client V2 impostando la SecurityProfile proprietà suSecurityProfile.V2, come mostrato nel frammento seguente.

//var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2AndLegacy); var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2);