View a markdown version of this page

Migrazione del client di crittografia Amazon S3 (da V1 a V2) - AWS SDK per Ruby

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)

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)

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

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

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

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.

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

Upgrade AWS SDK per Ruby versione 2

La versione 2 dell' AWS SDK per Ruby entrerà in modalità manutenzione il 21 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.

  2. Esegui bundle update aws-sdk. Per verificare la tua versione, eseguibundle info aws-sdk.

Migra i client di crittografia e decrittografia alla V2

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

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.

1. Il metodo key wrap e l'algoritmo di crittografia dei contenuti devono essere specificati durante la costruzione del client. Quando ne crei uno nuovoEncryptionV2::Client, devi fornire i valori per key_wrap_schema econtent_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 nuovoEncryptionV2::Client, devi fornire un valore persecurity_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_legacysecurity_profile. Utilizza:v2 solo per lo sviluppo di nuove applicazioni.

3. AWS KMS key L'ID viene applicato per impostazione predefinita. Nella V1Encryption::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)

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

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

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