Migrazione del client di crittografia Amazon S3 - AWS SDK for PHP

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.

Panoramica della migrazione

Questa migrazione avviene in due fasi:

1. Aggiorna i client esistenti per leggere nuovi formati. Innanzitutto, distribuisci una versione aggiornata di nella AWS SDK for PHP tua applicazione. Ciò consente ai client di crittografia V1 esistenti di decrittografare gli oggetti scritti dai nuovi client V2. Se l'applicazione utilizza più AWS SDK, è necessario aggiornare ogni SDK separatamente.

2. Esegui la migrazione dei client di crittografia e decrittografia alla versione 2. Una volta che tutti i client di crittografia V1 sono in grado di leggere 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 che le versioni precedenti del client non supportano. Il primo passo della migrazione consiste nell'aggiornare i client di decrittografia V1 all'ultima versione dell'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 di. AWS SDK for PHP

Aggiornamento della versione 3 AWS SDK for PHP

La versione 3 è l'ultima versione di. AWS SDK for PHP Per completare questa migrazione, è necessario utilizzare la versione 3.148.0 o successiva del pacchetto. aws/aws-sdk-php

Installazione dalla riga di comando

Per i progetti installati utilizzando Composer, nel file Composer, aggiorna il pacchetto SDK alla versione 3.148.0 dell'SDK, quindi esegui il comando seguente.

composer update aws/aws-sdk-php

Installazione mediante il file Phar o Zip

Utilizzare uno dei seguenti metodi. Assicurati di inserire il file SDK aggiornato nella posizione richiesta dal codice, determinata dall'istruzione require.

Per i progetti che sono stati installati utilizzando il file Phar, scaricate il file aggiornato:. aws.phar

<?php require '/path/to/aws.phar'; ?>

Per i progetti che sono stati installati utilizzando il file Zip, scarica il file aggiornato: .

<?php require '/path/to/aws-autoloader.php'; ?>

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.

Requisiti per l'aggiornamento ai client V2

1. Il contesto di AWS KMS crittografia deve essere passato ai S3EncryptionClientV2::putObjectAsync metodi S3EncryptionClientV2::putObject and. AWS KMS il contesto di crittografia è un array associativo di coppie chiave-valore, che è necessario aggiungere al contesto di crittografia per AWS KMS la crittografia a chiave. Se non è richiesto alcun contesto aggiuntivo, è possibile passare un array vuoto.

2. @SecurityProfiledeve essere passato ai getObjectAsync metodi getObject e inS3EncryptionClientV2. @SecurityProfileè un nuovo parametro obbligatorio dei getObject... metodi. Se impostato su‘V2’, solo gli oggetti crittografati in un formato compatibile con V2 possono essere decrittografati. L'impostazione di questo parametro su consente ‘V2_AND_LEGACY’ inoltre di decrittografare gli oggetti crittografati in un formato compatibile con V1. Per supportare la migrazione, impostare su. @SecurityProfile ‘V2_AND_LEGACY’ Utilizzare ‘V2’ solo per lo sviluppo di nuove applicazioni.

3. (opzionale) Includi il @KmsAllowDecryptWithAnyCmk parametro in S3EncryptionClientV2::getObject ed è stato aggiunto S3EncryptionClientV2::getObjectAsync* methods. un nuovo parametro chiamato@KmsAllowDecryptWithAnyCmk. L'impostazione di questo parametro true consente la decrittografia senza fornire una chiave KMS. Il valore predefinito è false.

4. Per la decrittografia con un client V2, se il @KmsAllowDecryptWithAnyCmk parametro non è impostato su true per le chiamate al “getObject...” metodo, è necessario fornire un kms-key-id al costruttore. KmsMaterialsProviderV2

Esempi di migrazione

Esempio 1: migrazione ai client V2

Pre-migrazione

use Aws\S3\Crypto\S3EncryptionClient; use Aws\S3\S3Client; $encryptionClient = new S3EncryptionClient( new S3Client([ 'profile' => 'default', 'region' => 'us-east-1', 'version' => 'latest', ]) );

Post-migrazione

use Aws\S3\Crypto\S3EncryptionClientV2; use Aws\S3\S3Client; $encryptionClient = new S3EncryptionClientV2( new S3Client([ 'profile' => 'default', 'region' => 'us-east-1', 'version' => 'latest', ]) );

Esempio 2: utilizzo con AWS KMS kms-key-id

Nota

Questi esempi utilizzano importazioni e variabili definite nell'Esempio 1. Ad esempio, $encryptionClient.

Premigrazione

use Aws\Crypto\KmsMaterialsProvider; use Aws\Kms\KmsClient; $kmsKeyId = 'kms-key-id'; $materialsProvider = new KmsMaterialsProvider( new KmsClient([ 'profile' => 'default', 'region' => 'us-east-1', 'version' => 'latest', ]), $kmsKeyId ); $bucket = 'the-bucket-name'; $key = 'the-file-name'; $cipherOptions = [ 'Cipher' => 'gcm', 'KeySize' => 256, ]; $encryptionClient->putObject([ '@MaterialsProvider' => $materialsProvider, '@CipherOptions' => $cipherOptions, 'Bucket' => $bucket, 'Key' => $key, 'Body' => fopen('file-to-encrypt.txt', 'r'), ]); $result = $encryptionClient->getObject([ '@MaterialsProvider' => $materialsProvider, '@CipherOptions' => $cipherOptions, 'Bucket' => $bucket, 'Key' => $key, ]);

Post-migrazione

use Aws\Crypto\KmsMaterialsProviderV2; use Aws\Kms\KmsClient; $kmsKeyId = 'kms-key-id'; $materialsProvider = new KmsMaterialsProviderV2( new KmsClient([ 'profile' => 'default', 'region' => 'us-east-1', 'version' => 'latest', ]), $kmsKeyId ); $bucket = 'the-bucket-name'; $key = 'the-file-name'; $cipherOptions = [ 'Cipher' => 'gcm', 'KeySize' => 256, ]; $encryptionClient->putObject([ '@MaterialsProvider' => $materialsProvider, '@CipherOptions' => $cipherOptions, '@KmsEncryptionContext' => ['context-key' => 'context-value'], 'Bucket' => $bucket, 'Key' => $key, 'Body' => fopen('file-to-encrypt.txt', 'r'), ]); $result = $encryptionClient->getObject([ '@KmsAllowDecryptWithAnyCmk' => true, '@SecurityProfile' => 'V2_AND_LEGACY', '@MaterialsProvider' => $materialsProvider, '@CipherOptions' => $cipherOptions, 'Bucket' => $bucket, 'Key' => $key, ]);