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 stai utilizzando la versione 1 del client di crittografia S3, devi prima migrare alla V2 prima di migrare alla V3. Consulta le istruzioni sulla Migrazione del client di crittografia Amazon S3 (da V1 a V2) migrazione da V1 a 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 di 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 per Ruby nella tua applicazione. Ciò consentirà ai client di crittografia V2 esistenti di decrittografare gli oggetti scritti dai nuovi client V3. Se l'applicazione utilizza più AWS SDK, è necessario aggiornare ciascun SDK separatamente.
2. Esegui la migrazione dei client di crittografia e decrittografia alla V3. Una volta che tutti i client di crittografia V2 sono in grado di leggere i nuovi formati, è possibile migrare i client di crittografia e decrittografia esistenti alle rispettive versioni V3. Ciò include la configurazione delle Commitment Policies e l'aggiornamento del codice per utilizzare le nuove opzioni di configurazione del client.
Se non hai ancora eseguito 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 with 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. L'impegno delle chiavi 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 della chiave e consente la decrittografia di entrambi gli oggetti con e senza impegno della chiave.
-
Comportamento della crittografia: gli oggetti vengono crittografati senza impegno di chiave, utilizzando la stessa suite di algoritmi della V2.
-
Comportamento di decrittografia: può decrittografare oggetti crittografati con o senza impegno di chiave.
-
Implicazioni sulla sicurezza: questa politica non impone l'impegno delle chiavi e può consentire la manomissione. Gli oggetti crittografati con questa policy non beneficiano delle protezioni di sicurezza avanzate di Key Commitment. Utilizza questa policy solo durante la migrazione quando devi mantenere la compatibilità con il comportamento di crittografia V2.
-
Compatibilità delle versioni: gli oggetti crittografati con questa policy possono essere letti da tutte le implementazioni V2 e V3 del client di crittografia S3.
REQUIRE_ENCRYPT_ALLOW_DECRYPT
Questa politica crittografa gli oggetti con impegno di chiave e consente la decrittografia di entrambi gli oggetti con e senza impegno di chiave.
-
Comportamento della crittografia: gli oggetti vengono crittografati con Key Commitment utilizzando AES GCM con Key Commitment.
-
Comportamento di decrittografia: può decrittografare oggetti crittografati con o senza impegno di chiave, garantendo la compatibilità con le versioni precedenti.
-
Implicazioni sulla sicurezza: i nuovi oggetti traggono vantaggio dalla protezione basata sull'impegno delle chiavi, mentre gli oggetti esistenti senza impegno chiave possono comunque 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 policy possono essere letti solo dalla V3 e dalle più recenti implementazioni V2 del client di crittografia S3.
REQUIRE_ENCRYPT_REQUIRE_DECRYPT
Questa policy crittografa gli oggetti con key commitment e consente la decrittografia solo degli oggetti crittografati con key commitment.
-
Comportamento della crittografia: gli oggetti vengono crittografati con Key Commitment utilizzando AES GCM con Key Commitment.
-
Comportamento di decrittografia: è possibile decrittografare solo oggetti crittografati con key commit. I tentativi di decrittografare gli oggetti senza l'impegno della chiave falliranno.
-
Implicazioni sulla sicurezza: questa politica fornisce il massimo livello di sicurezza applicando un impegno chiave per tutte le operazioni. Utilizza questa policy solo dopo che tutti gli oggetti sono stati nuovamente crittografati 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 dalla V3 e dalle ultime implementazioni V2 del client di crittografia S3. Questa politica impedisce inoltre la lettura di oggetti crittografati dai client V2 o V1.
Nota
Quando pianifichi la migrazione, inizia con l'obiettivo di REQUIRE_ENCRYPT_ALLOW_DECRYPT mantenere la compatibilità con le versioni precedenti, ottenendo allo stesso tempo i vantaggi in termini di sicurezza derivanti da un impegno chiave per i nuovi oggetti. Passa a questa versione solo REQUIRE_ENCRYPT_REQUIRE_DECRYPT dopo che tutti gli oggetti sono stati nuovamente crittografati e tutti i client sono stati aggiornati alla V3.
AES GCM con Key Commitment
AES GCM with Key Commitment (ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY) è un nuovo algoritmo di crittografia introdotto nella V3 che fornisce 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 cosa ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY differisce dagli algoritmi precedenti
Le versioni precedenti del client di crittografia S3 utilizzavano AES CBC o AES GCM senza l'impegno della chiave per crittografare la chiave di dati nei file di istruzioni. ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEYaggiunge un impegno crittografico al processo di crittografia, che lega 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 l'impegno della chiave, è possibile che un utente malintenzionato modifichi la chiave di dati crittografata in un file di istruzioni in modo da decifrarla in una chiave diversa, consentendo potenzialmente l'accesso non autorizzato o il danneggiamento dei dati. ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEYpreviene questo attacco assicurando che la chiave di dati crittografata possa essere decrittografata solo con la 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 (tramite utilizzo REQUIRE_ENCRYPT_ALLOW_DECRYPT o policy di REQUIRE_ENCRYPT_REQUIRE_DECRYPT impegno), assicurati che tutti i client che devono leggere i tuoi oggetti crittografati siano stati aggiornati alla versione V3 o a una versione di transizione che supporti i formati V3. Se un client V2 senza supporto per la transizione tenta di leggere oggetti crittografati conALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY, la decrittografia avrà esito negativo.
Durante la migrazione, puoi utilizzare la FORBID_ENCRYPT_ALLOW_DECRYPT policy di commit per continuare la crittografia senza consentire ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY comunque ai tuoi client V3 di leggere gli oggetti crittografati con key commit. Ciò fornisce un percorso di migrazione sicuro in cui è necessario innanzitutto aggiornare tutti i lettori, quindi passare alla crittografia con key commit.
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 per impostazione predefinita. Il primo passo della migrazione consiste nell'aggiornare i client di decrittografia V2 a una versione dell' AWS SDK per Ruby in grado di leggere 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 le nostre policy di REQUIRE_ENCRYPT_REQUIRE_DECRYPT impegno), è necessario utilizzare la versione 1.93.0 REQUIRE_ENCRYPT_ALLOW_DECRYPT o successiva del gem. aws-sdk-s3 Questa versione include il supporto per la decrittografia di oggetti crittografati con AES GCM con Key Commitment.
Installazione dalla riga di comando
Per i progetti che installano aws-sdk-s3 gem dalla riga di comando, usate 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. Ad esempio:
gem 'aws-sdk-s3', '>= 1.208.0'
-
Modifica il tuo Gemfile per specificare la versione minima.
-
Corri
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 i nuovi oggetti utilizzando gli algoritmi V2 fino a quando non li migrerai alla V3 come descritto nella sezione successiva.
Esegui la migrazione dei client di crittografia e decrittografia su 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 dalla V2 alla 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 di attivazione delle chiavi e la compatibilità con le versioni precedenti. La comprensione di queste opzioni è essenziale per una migrazione di successo.
commitment_policy
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 i nuovi oggetti con l'impegno della chiave e consente la decrittografia degli oggetti con o senza impegno della chiave. Questa è l'impostazione consigliata per la migrazione, in quanto fornisce una maggiore sicurezza per i nuovi oggetti mantenendo la compatibilità con le versioni precedenti con gli oggetti V2 esistenti. -
:forbid_encrypt_allow_decrypt- Crittografa i nuovi oggetti senza impegno della chiave (utilizzando algoritmi V2) e consente la decrittografia degli oggetti con o senza impegno della chiave. Utilizzate questa impostazione solo se avete bisogno di mantenere il comportamento di crittografia V2 durante la migrazione, ad esempio quando alcuni client non sono ancora in grado di leggere oggetti crittografati con V3. -
:require_encrypt_require_decrypt- Crittografa i nuovi oggetti con key commit e consente la decrittografia solo degli oggetti crittografati con key commit. Utilizza questa impostazione solo dopo che tutti gli oggetti sono stati nuovamente crittografati con key commit e tutti i client sono stati aggiornati alla V3.
security_profile
Il security_profile parametro determina il supporto per la lettura di oggetti scritti da versioni precedenti del 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. Usa questa impostazione se hai già migrato tutti gli oggetti V1 nel formato V2. -
Se non specificato, il client decrittograferà solo gli oggetti crittografati dai client V3. Usalo 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): memorizza 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, AES GCM con Key Commitment non si applica. -
: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 di dati crittografata da eventuali manomissioni. Utilizzate questa impostazione se avete bisogno della sicurezza aggiuntiva fornita da key commitment per la chiave di 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, segui 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 key commit pur essendo in grado di decrittografare tutti gli oggetti V1 e V2 esistenti. -
Dopo l'aggiornamento di tutti i client: continuate a utilizzare
commitment_policy: :require_encrypt_allow_decryptesecurity_profile: :v3_and_legacyfino a quando non avrete nuovamente crittografato tutti gli oggetti che necessitano della protezione tramite key commit. -
Applicazione completa della versione V3: solo dopo che tutti gli oggetti sono stati nuovamente crittografati con key commit e non è più necessario leggere V1/V2 gli oggetti, è possibile facoltativamente passare al
security_profileparametrocommitment_policy: :require_encrypt_require_decrypte rimuoverlo (o impostarlo su:v2se esistono ancora oggetti V2).
Perenvelope_location, continua a utilizzare il metodo di archiviazione esistente (:metadatao:instruction_file) a meno che tu non abbia un motivo specifico per modificarlo. Se stai attualmente utilizzando l'archiviazione dei metadati e desideri la sicurezza aggiuntiva di AES GCM con Key Commitment per la chiave di 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 dalla V2 alla V3.
Utilizzo dei client di crittografia V3
Pre-migration (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
Post-migration (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 commitment_policy parametro. Impostandolo in :require_encrypt_require_decrypt modo da garantire che i nuovi oggetti vengano crittografati con key commit e che il client decifri solo gli oggetti crittografati con key commit, fornendo 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 specifici e opzioni di configurazione 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 di dati crittografata) 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 memorizza 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 Instruction File separati.
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 with Key Commitment non si applica alla chiave di dati crittografata. Tuttavia, la crittografia dei contenuti trae ancora vantaggio dall'impegno chiave quando si utilizza o. commitment_policy: :require_encrypt_allow_decrypt :require_encrypt_require_decrypt
Memorizzazione dei file di istruzioni
In alternativa, è possibile configurare il client di crittografia per archiviare i metadati di crittografia in un oggetto S3 separato chiamato file di istruzioni. Quando si utilizzano i file di istruzioni con V3, la chiave dati crittografata è protetta da AES GCM con Key Commitment, che fornisce una protezione aggiuntiva contro la manomissione della chiave 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
Durante l'utilizzoenvelope_location: :instruction_file, il client di crittografia crea due oggetti S3:
-
L'oggetto dati crittografato (ad es.)
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
-
Usa 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. Nota 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 si passa dall'archiviazione dei metadati all'archiviazione 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. Pianifica attentamente il metodo di archiviazione e mantieni la coerenza in tutta l'applicazione.