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 V3)
Nota
Se si utilizza la versione 1 del client di crittografia S3, è necessario eseguire la migrazione alla versione 2 prima di passare alla versione 3. Consulta le istruzioni sulla Migrazione del client di crittografia Amazon S3 (da V1 a V2) migrazione dalla V1 alla V2.
Questo argomento mostra come migrare le applicazioni dalla versione 2 (V2) del client di crittografia Amazon Simple Storage Service (Amazon S3) alla versione 3 (V3) e garantire la disponibilità delle applicazioni durante tutto il processo di migrazione. V3 introduce AES GCM con Key Commitment and Commitment Policies per migliorare la sicurezza e proteggere dalla manomissione delle chiavi di dati.
Panoramica sulla migrazione
La versione 3 del client di crittografia Amazon S3 introduce AES GCM con Key Commitment per una maggiore sicurezza. Questo nuovo algoritmo di crittografia fornisce protezione contro la manomissione delle chiavi dei dati e garantisce l'integrità dei dati crittografati. La migrazione alla V3 richiede un'attenta pianificazione per mantenere la disponibilità delle applicazioni e l'accessibilità dei dati durante l'intero processo.
Questa migrazione avviene in due fasi:
1. Aggiorna i client esistenti per leggere nuovi formati. Innanzitutto, distribuisci una versione aggiornata dell' AWS SDK for Ruby nella tua applicazione. Ciò consentirà ai client di crittografia V2 esistenti di decrittografare gli oggetti scritti dai nuovi client V3. Se l'applicazione ne utilizza più AWS SDKs, è necessario aggiornare ogni SDK separatamente.
2. Migra i client di crittografia e decrittografia alla V3. Una volta che tutti i client di crittografia V2 saranno in grado di leggere nuovi formati, sarà possibile migrare i client di crittografia e decrittografia esistenti alle rispettive versioni V3. Ciò include la configurazione delle politiche di impegno e l'aggiornamento del codice per utilizzare le nuove opzioni di configurazione del client.
Se non hai ancora effettuato la migrazione dalla V1 alla V2, devi prima completare la migrazione. Consulta Migrazione del client di crittografia Amazon S3 (da V1 a V2) le istruzioni dettagliate sulla migrazione dalla V1 alla V2.
Comprensione delle funzionalità della V3
La versione 3 del client di crittografia Amazon S3 introduce due funzionalità di sicurezza chiave: Commitment Policies e AES GCM con Key Commitment. La comprensione di queste funzionalità è essenziale per pianificare la strategia di migrazione e garantire la sicurezza dei dati crittografati.
Politiche di impegno
Le politiche di impegno controllano il modo in cui il client di crittografia gestisce l'impegno delle chiavi durante le operazioni di crittografia e decrittografia. Key Commitment garantisce che i dati crittografati possano essere decrittografati solo con la chiave esatta utilizzata per crittografarli, proteggendoli da determinati tipi di attacchi crittografici.
Il client di crittografia V3 supporta tre opzioni di Commitment Policy:
FORBID_ENCRYPT_ALLOW_DECRYPT
Questa politica crittografa gli oggetti senza impegno di chiave e consente la decrittografia di entrambi gli oggetti con e senza impegno chiave.
-
Comportamento di crittografia: gli oggetti vengono crittografati senza impegno di chiave, utilizzando la stessa suite di algoritmi della versione V2.
-
Comportamento di decrittografia: può decrittografare oggetti crittografati con o senza impegno di chiave.
-
Implicazioni sulla sicurezza: questa politica non impone l'impegno fondamentale e può consentire la manomissione. Gli oggetti crittografati con questa politica non beneficiano delle protezioni di sicurezza avanzate di Key Commitment. Utilizzate questa policy solo durante la migrazione quando è necessario mantenere la compatibilità con il comportamento di crittografia V2.
-
Compatibilità delle versioni: gli oggetti crittografati con questa politica possono essere letti da tutte le implementazioni V2 e V3 del client di crittografia S3.
REQUIRE_ENCRYPT_ALLOW_DECRYPT
Questa policy crittografa gli oggetti con impegno chiave e consente la decrittografia di entrambi gli oggetti con e senza impegno chiave.
-
Comportamento di crittografia: gli oggetti vengono crittografati con impegno chiave utilizzando AES GCM con Key Commitment.
-
Comportamento di decrittografia: può decrittografare oggetti crittografati con o senza impegno chiave, garantendo la compatibilità con le versioni precedenti.
-
Implicazioni sulla sicurezza: i nuovi oggetti traggono vantaggio dalla protezione con impegno chiave, mentre gli oggetti esistenti senza impegno chiave possono ancora essere letti. Ciò fornisce un equilibrio tra sicurezza e compatibilità con le versioni precedenti durante la migrazione.
-
Compatibilità delle versioni: gli oggetti crittografati con questa politica possono essere letti solo dalle implementazioni V3 e V2 più recenti del client di crittografia S3.
REQUIRE_ENCRYPT_REQUIRE_DECRYPT
Questa politica crittografa gli oggetti con impegno chiave e consente la decrittografia solo degli oggetti che sono stati crittografati con impegno chiave.
-
Comportamento di crittografia: gli oggetti vengono crittografati con impegno chiave utilizzando AES GCM con Key Commitment.
-
Comportamento di decrittografia: può decrittografare solo gli oggetti che sono stati crittografati con l'impegno della chiave. I tentativi di decrittografare gli oggetti senza l'impegno di una chiave falliranno.
-
Implicazioni sulla sicurezza: questa politica offre il massimo livello di sicurezza imponendo un impegno fondamentale per tutte le operazioni. Utilizzate questa policy solo dopo che tutti gli oggetti sono stati ricrittografati con key commitment e tutti i client sono stati aggiornati alla V3.
-
Compatibilità delle versioni: gli oggetti crittografati con questa policy possono essere letti solo dalle implementazioni V3 e V2 più recenti del client di crittografia S3. Questa politica impedisce inoltre la lettura di oggetti crittografati dai client V2 o V1.
Nota
Quando pianificate la migrazione, iniziate REQUIRE_ENCRYPT_ALLOW_DECRYPT a mantenere la compatibilità con le versioni precedenti, ottenendo al contempo i vantaggi in termini di sicurezza derivanti dall'impegno chiave per i nuovi oggetti. Passa a questa versione solo REQUIRE_ENCRYPT_REQUIRE_DECRYPT dopo che tutti gli oggetti sono stati ricrittografati e tutti i client sono stati aggiornati alla V3.
AES GCM con impegno chiave
AES GCM with Key Commitment (ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY) è un nuovo algoritmo di crittografia introdotto nella V3 che offre una maggiore sicurezza proteggendo dalla manomissione delle chiavi di dati. Comprendere come funziona questo algoritmo e quando viene applicato è importante per pianificare la migrazione.
In che modo ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY si differenzia dagli algoritmi precedenti
Le versioni precedenti del client di crittografia S3 utilizzavano AES CBC o AES GCM senza impegno chiave per crittografare la chiave dei dati nei file di istruzioni. ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEYaggiunge un impegno crittografico al processo di crittografia, che associa i dati crittografati a una chiave specifica. Ciò impedisce a un utente malintenzionato di manomettere la chiave di dati crittografata nel file di istruzioni e di indurre il client a decrittografare i dati con una chiave errata.
Senza un impegno chiave, un utente malintenzionato può modificare la chiave di dati crittografata in un file di istruzioni in modo che venga decrittografata su una chiave diversa, permettendo potenzialmente l'accesso non autorizzato o il danneggiamento dei dati. ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEYpreviene questo attacco assicurando che la chiave dati crittografata possa essere decrittografata solo sulla chiave originale utilizzata durante la crittografia.
Compatibilità delle versioni
Gli oggetti crittografati con ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY possono essere decrittografati solo dalle implementazioni V3 del client di crittografia S3 e da alcune versioni di transizione di V2 che includono il supporto per la lettura dei formati V3. I client V2 senza questo supporto per la transizione non possono decrittografare i file di istruzioni crittografati con. ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY
avvertimento
Prima di abilitare la crittografia con ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY (utilizzando REQUIRE_ENCRYPT_ALLOW_DECRYPT o REQUIRE_ENCRYPT_REQUIRE_DECRYPT impegnando le politiche), assicuratevi che tutti i client che devono leggere gli oggetti crittografati siano stati aggiornati alla V3 o a una versione di transizione che supporti i formati V3. Se un client V2 senza supporto di transizione tenta di leggere oggetti crittografati conALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY, la decrittografia avrà esito negativo.
Durante la migrazione, è possibile utilizzare la policy di commit per continuare a crittografare senza consentire ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY comunque ai client V3 di leggere gli oggetti crittografati con l'FORBID_ENCRYPT_ALLOW_DECRYPTimpegno della chiave. Ciò fornisce un percorso di migrazione sicuro in cui si aggiornano prima tutti i lettori, quindi si passa alla crittografia con impegno chiave.
Aggiorna i client esistenti per leggere nuovi formati
Il client di crittografia V3 utilizza algoritmi di crittografia e funzionalità di impegno chiave che i client V2 non supportano di default. Il primo passo della migrazione consiste nell'aggiornare i client di decrittografia V2 a una versione dell'SDK for AWS Ruby in grado di leggere gli oggetti crittografati V3. Dopo aver completato questo passaggio, i client V2 dell'applicazione saranno in grado di decrittografare gli oggetti crittografati dai client di crittografia V3.
Per leggere gli oggetti crittografati dai client V3 (quelli che utilizzano REQUIRE_ENCRYPT_ALLOW_DECRYPT o rispettano le politicheREQUIRE_ENCRYPT_REQUIRE_DECRYPT), è necessario utilizzare la versione 1.93.0 o successiva del gem. aws-sdk-s3 Questa versione include il supporto per la decrittografia degli oggetti crittografati con AES GCM con Key Commitment.
Installazione dalla riga di comando
Per i progetti che installano il aws-sdk-s3 gem dalla riga di comando, usa l'opzione version per verificare che sia installata la versione minima di 1.208.0.
gem install aws-sdk-s3 -v '>= 1.208.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.208.0. Esempio:
gem 'aws-sdk-s3', '>= 1.208.0'
-
Modifica il tuo Gemfile per specificare la versione minima.
-
Esegui
bundle update aws-sdk-s3per aggiornare la gemma. -
Per verificare la tua versione,
bundle info aws-sdk-s3esegui.
Nota
Dopo l'aggiornamento alla versione più recente, i client di crittografia V2 esistenti saranno in grado di decrittografare gli oggetti crittografati dai client V3. Tuttavia, continueranno a crittografare nuovi oggetti utilizzando algoritmi V2 fino a quando non li migrerai alla V3 come descritto nella sezione successiva.
Migrazione dei client di crittografia e decrittografia alla V3
Dopo aver aggiornato i client per leggere i nuovi formati di crittografia, è possibile aggiornare le applicazioni ai client di crittografia e decrittografia V3. I passaggi seguenti mostrano come migrare correttamente il codice da V2 a V3.
Prima di aggiornare il codice per utilizzare il client di crittografia V3, assicurati di aver seguito i passaggi precedenti e di utilizzare la versione aws-sdk-s3 gem 1.93.0 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 V3
Il client di crittografia V3 introduce nuove opzioni di configurazione che controllano il comportamento degli impegni chiave e la compatibilità con le versioni precedenti. La comprensione di queste opzioni è essenziale per una migrazione di successo.
politica_di impegno
Il commitment_policy parametro controlla il modo in cui il client di crittografia gestisce l'impegno delle chiavi durante le operazioni di crittografia e decrittografia. Questa è l'opzione di configurazione più importante per i client V3.
-
:require_encrypt_allow_decrypt- Crittografa nuovi oggetti con impegno chiave e consente la decrittografia degli oggetti con o senza impegno chiave. Questa è l'impostazione consigliata per la migrazione, in quanto offre una maggiore sicurezza per i nuovi oggetti mantenendo al contempo la compatibilità con le versioni precedenti con gli oggetti V2 esistenti. -
:forbid_encrypt_allow_decrypt- Crittografa nuovi oggetti senza impegno chiave (utilizzando algoritmi V2) e consente la decrittografia degli oggetti con o senza impegno chiave. Utilizzate questa impostazione solo se è necessario mantenere il comportamento di crittografia V2 durante la migrazione, ad esempio quando alcuni client non sono ancora in grado di leggere gli oggetti crittografati V3. -
:require_encrypt_require_decrypt- Crittografa i nuovi oggetti con impegno chiave e consente la decrittografia solo degli oggetti che sono stati crittografati con impegno chiave. Utilizzate questa impostazione solo dopo che tutti gli oggetti sono stati ricrittografati con key commitment e tutti i client sono stati aggiornati alla V3.
profilo_sicurezza
Il security_profile parametro determina il supporto per la lettura di oggetti scritti da versioni precedenti dei client di crittografia. Questo parametro è essenziale per mantenere la compatibilità con le versioni precedenti durante la migrazione.
-
:v3_and_legacy- Consente al client V3 di decrittografare gli oggetti crittografati dai client di crittografia V1 e V2. Utilizzate questa impostazione durante la migrazione per assicurarvi che i client V3 possano leggere tutti gli oggetti crittografati esistenti. -
:v3- Consente al client V3 di decrittografare gli oggetti crittografati solo dai client di crittografia V2. Utilizzate questa impostazione se avete già migrato tutti gli oggetti V1 al formato V2. -
Se non specificato, il client decrittograferà solo gli oggetti crittografati dai client V3. Utilizzatelo solo per lo sviluppo di nuove applicazioni in cui non esistono oggetti legacy.
envelope_location
Il envelope_location parametro determina dove vengono archiviati i metadati di crittografia (inclusa la chiave di dati crittografata). Questo parametro influisce sugli oggetti protetti da AES GCM con Key Commitment.
-
:metadata(Impostazione predefinita): archivia i metadati di crittografia nelle intestazioni dei metadati dell'oggetto S3. Questo è il comportamento predefinito ed è consigliato per la maggior parte dei casi d'uso. Quando si utilizza l'archiviazione dei metadati, non si applica AES GCM con Key Commitment. -
:instruction_file- Memorizza i metadati di crittografia in un oggetto S3 separato (file di istruzioni) con un suffisso configurabile. Quando si utilizzano i file di istruzioni, AES GCM con Key Commitment protegge la chiave dati crittografata dalla manomissione. Utilizza questa impostazione se hai bisogno della sicurezza aggiuntiva fornita da Key Commitment per la chiave dati stessa.
Quando si utilizza:instruction_file, è possibile specificare facoltativamente il instruction_file_suffix parametro per personalizzare il suffisso utilizzato per gli oggetti Instruction File. Il suffisso predefinito è. .instruction
Quando utilizzare ciascuna opzione di configurazione
Durante la migrazione, seguite questa strategia di configurazione consigliata:
-
Migrazione iniziale: imposta
commitment_policy: :require_encrypt_allow_decryptesecurity_profile: :v3_and_legacy. Ciò consente ai client V3 di crittografare nuovi oggetti con impegno chiave, pur essendo in grado di decrittografare tutti gli oggetti V1 e V2 esistenti. -
Dopo l'aggiornamento di tutti i client: continua a utilizzare
commitment_policy: :require_encrypt_allow_decryptesecurity_profile: :v3_and_legacyfino a quando non avrai ricrittografato tutti gli oggetti che richiedono una protezione con impegno chiave. -
Applicazione V3 completa: solo dopo che tutti gli oggetti sono stati ricrittografati con key commit e non è più necessario leggere gli oggetti V1/V2, è possibile facoltativamente passare al
security_profileparametrocommitment_policy: :require_encrypt_require_decrypte rimuoverlo (o impostarlo su se gli oggetti V2 esistono ancora).:v2
Ad esempioenvelope_location, continuate a utilizzare il metodo di archiviazione esistente (:metadatao:instruction_file) a meno che non abbiate un motivo specifico per modificarlo. Se attualmente utilizzi l'archiviazione dei metadati e desideri la sicurezza aggiuntiva di AES GCM con Key Commitment per la chiave dati, puoi passare a:instruction_file, ma tieni presente che ciò richiederà l'aggiornamento di tutti i client che leggono questi oggetti.
Esegui la migrazione dei client di crittografia e decrittografia alla V3
Dopo aver aggiornato i client per leggere i nuovi formati di crittografia, è possibile aggiornare le applicazioni ai client di crittografia e decrittografia V3. Gli esempi seguenti mostrano come migrare correttamente il codice da V2 a V3.
Utilizzo dei client di crittografia V3
Premigrazione (V2)
require 'aws-sdk-s3' # Create V2 encryption client with KMS client = Aws::S3::EncryptionV2::Client.new( kms_key_id: kms_key_id, key_wrap_schema: :kms_context, content_encryption_schema: :aes_gcm_no_padding, security_profile: :v2_and_legacy, commitment_policy: :forbid_encrypt_allow_decrypt ) # Encrypt and upload object client.put_object(bucket: 'my-bucket', key: 'my-object', body: 'secret data') # Download and decrypt object resp = client.get_object(bucket: 'my-bucket', key: 'my-object') decrypted_data = resp.body.read
Durante la migrazione (V3 con compatibilità con le versioni precedenti)
require 'aws-sdk-s3' # Create V3 encryption client with KMS client = Aws::S3::EncryptionV3::Client.new( kms_key_id: kms_key_id, key_wrap_schema: :kms_context, content_encryption_schema: :aes_gcm_no_padding, security_profile: :v3_and_legacy, commitment_policy: :require_encrypt_allow_decrypt ) # Encrypt and upload object client.put_object(bucket: 'my-bucket', key: 'my-object', body: 'secret data') # Download and decrypt object resp = client.get_object(bucket: 'my-bucket', key: 'my-object') decrypted_data = resp.body.read
Dopo la migrazione (V3)
require 'aws-sdk-s3' # Create V3 encryption client with KMS client = Aws::S3::EncryptionV3::Client.new( kms_key_id: kms_key_id, key_wrap_schema: :kms_context, content_encryption_schema: :aes_gcm_no_padding, security_profile: :v3, # Use the commitment policy (REQUIRE_ENCRYPT_REQUIRE_DECRYPT) # This encrypts with key commitment and does not decrypt V2 objects commitment_policy: :require_encrypt_require_decrypt ) # Encrypt and upload object client.put_object(bucket: 'my-bucket', key: 'my-object', body: 'secret data') # Download and decrypt object resp = client.get_object(bucket: 'my-bucket', key: 'my-object') decrypted_data = resp.body.read
La differenza fondamentale in V3 è l'aggiunta del parametro. commitment_policy Impostandolo in :require_encrypt_require_decrypt modo da garantire che i nuovi oggetti siano crittografati con l'impegno della chiave e che il client decifri solo gli oggetti crittografati con l'impegno della chiave, garantendo una maggiore sicurezza contro la manomissione delle chiavi di dati.
La put_object chiamata stessa rimane invariata. Tutti i miglioramenti della sicurezza sono configurati a livello di client.
Esempi aggiuntivi
Questa sezione fornisce esempi aggiuntivi per scenari di migrazione e opzioni di configurazione specifici che possono essere utili durante la migrazione da V2 a V3.
File di istruzioni e archiviazione dei metadati
Il client di crittografia S3 può archiviare i metadati di crittografia (inclusa la chiave dei dati crittografati) in due posizioni diverse: nelle intestazioni dei metadati dell'oggetto S3 o in un file di istruzioni separato. La scelta del metodo di archiviazione influisce sugli oggetti che beneficiano della protezione AES GCM con Key Commitment.
Archiviazione dei metadati (impostazione predefinita)
Per impostazione predefinita, il client di crittografia archivia i metadati di crittografia nelle intestazioni dei metadati dell'oggetto S3. Questo è l'approccio consigliato per la maggior parte dei casi d'uso perché mantiene i metadati di crittografia con l'oggetto e non richiede la gestione di oggetti separati del file di istruzioni.
require 'aws-sdk-s3' # Create V3 encryption client with metadata storage (default) client = Aws::S3::EncryptionV3::Client.new( kms_key_id: kms_key_id, key_wrap_schema: :kms_context, content_encryption_schema: :aes_gcm_no_padding, security_profile: :v3_and_legacy, commitment_policy: :require_encrypt_allow_decrypt, envelope_location: :metadata # Explicitly set to metadata (this is the default) ) # Encrypt and upload object # Encryption metadata is stored in the object's metadata headers client.put_object(bucket: 'my-bucket', key: 'my-object',body: 'secret data')
Quando si utilizza l'archiviazione dei metadati, AES GCM con Key Commitment non si applica alla chiave dati crittografata. Tuttavia, la crittografia dei contenuti beneficia ancora dell'impegno chiave quando si utilizza commitment_policy: :require_encrypt_allow_decrypt o. :require_encrypt_require_decrypt
Archiviazione dei file di istruzioni
In alternativa, puoi configurare il client di crittografia per archiviare i metadati di crittografia in un oggetto S3 separato chiamato file di istruzioni. Quando si utilizzano Instruction Files with V3, la chiave dati crittografata è protetta da AES GCM con Key Commitment, che fornisce una sicurezza aggiuntiva contro la manomissione delle chiavi di dati.
require 'aws-sdk-s3' # Create V3 encryption client with instruction file storage client = Aws::S3::EncryptionV3::Client.new( kms_key_id: kms_key_id, key_wrap_schema: :kms_context, content_encryption_schema: :aes_gcm_no_padding, security_profile: :v3_and_legacy, commitment_policy: :require_encrypt_allow_decrypt, envelope_location: :instruction_file, # Store metadata in separate instruction file instruction_file_suffix: '.instruction' # Optional: customize the suffix (default is '.instruction') ) # Encrypt and upload object # Encryption metadata is stored in a separate object: 'my-object.instruction' client.put_object(bucket: 'my-bucket', key: 'my-object', body: 'secret data') # When retrieving the object, the client automatically reads the instruction file resp = client.get_object(bucket: 'my-bucket', key: 'my-object') decrypted_data = resp.body.read
Quando viene utilizzatoenvelope_location: :instruction_file, il client di crittografia crea due oggetti S3:
-
L'oggetto di dati crittografato (ad esempio,
my-object) -
Il file di istruzioni contenente i metadati di crittografia (ad es.)
my-object.instruction
Il instruction_file_suffix parametro consente di personalizzare il suffisso utilizzato per i file di istruzioni. Il valore predefinito è .instruction.
Quando utilizzare ciascun metodo di archiviazione
-
Utilizza l'archiviazione dei metadati per la maggior parte degli scenari. Semplifica la gestione degli oggetti poiché i metadati di crittografia viaggiano con l'oggetto.
-
Utilizzate Instruction File Storage quando la dimensione dei metadati degli oggetti è un problema o quando è necessario separare i metadati di crittografia dall'oggetto crittografato. Tieni presente che l'utilizzo dei file di istruzioni richiede la gestione di due oggetti S3 (l'oggetto crittografato e il relativo file di istruzioni) anziché uno.
avvertimento
Se passi dalla memorizzazione dei metadati alla memorizzazione dei file di istruzioni (o viceversa), gli oggetti esistenti crittografati con il vecchio metodo di archiviazione non saranno leggibili dai client configurati con il nuovo metodo di archiviazione. Pianificate attentamente il metodo di archiviazione e mantenete la coerenza in tutta l'applicazione.