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à.

Client di crittografia Amazon S3

In questo argomento viene illustrato 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 il processo di migrazione.

Panoramica della migrazione in

Questa migrazione avviene in due fasi:

1. Aggiorna i client esistenti per leggere nuovi formati. Innanzitutto, distribuisci una versione aggiornata delAWS SDK for PHPalla tua applicazione. Ciò consente ai client di crittografia V1 esistenti di decrittografare gli oggetti scritti dai nuovi client V2. Se la tua applicazione utilizza piùAWSSDK, è necessario aggiornare ciascun SDK separatamente.

2. Migrazione dei client di crittografia e decrittografia a V2. 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 nella migrazione consiste nell'aggiornare i client di decrittografia V1 alla versione più recente 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 ogni versione principale delAWS SDK for PHP.

AggiornamentoAWS SDK for PHPVersione 3

La versione 3 è l'ultima versione delAWS SDK for PHP. Per completare questa migrazione, è necessario utilizzare la versione 3.148.0 o successiva delaws/aws-sdk-phpconfezione.

Installazione dalla riga di comando

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

composer update aws/aws-sdk-php

Installazione utilizzando il file Phar o Zip

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

Per i progetti installati utilizzando il file Phar, scarica il file aggiornato:aws.phar.

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

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

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

Migrazione dei client di crittografia e decrittografia a V2

Dopo aver aggiornato i client per leggere i nuovi formati di crittografia, è possibile aggiornare le applicazioni ai client di crittografia e decrittografia V2. Le fasi seguenti mostrano come eseguire la migrazione del codice da V1 a V2.

Requisiti per l'aggiornamento ai client V2

1. LaAWS KMSil contesto di crittografia deve essere passato nelS3EncryptionClientV2::putObjecteS3EncryptionClientV2::putObjectAsyncmetodi.AWS KMSil contesto di crittografia è un array associativo di coppie chiave-valore, che è necessario aggiungere al contesto di crittografia perAWS KMScrittografia delle chiavi. Se non è richiesto alcun contesto aggiuntivo, è possibile passare un array vuoto.

2.@SecurityProfiledeve essere passato nelgetObjectegetObjectAsyncmetodi inS3EncryptionClientV2.@SecurityProfileè un nuovo parametro obbligatorio delgetObject...metodi. Se impostato su‘V2’, solo gli oggetti crittografati in formato compatibile con V2 possono essere decrittografati. Impostazione di questo parametro su‘V2_AND_LEGACY’consente inoltre di decrittografare oggetti crittografati in formato compatibile con V1. Per supportare la migrazione, impostare@SecurityProfilea‘V2_AND_LEGACY’. Utilizza‘V2’solo per lo sviluppo di nuove applicazioni.

3. (facoltativo) Includi il@KmsAllowDecryptWithAnyCmkparametro nelS3EncryptionClientV2::getObjecteS3EncryptionClientV2::getObjectAsync* methods.È stato aggiunto un nuovo parametro denominato.@KmsAllowDecryptWithAnyCmk. Impostazione di questo parametro sutrueabilita la decrittografia senza fornire una chiave KMS. Il valore di default è false.

4. Per la decrittografia con un client V2, se@KmsAllowDecryptWithAnyCmkparametro non è impostato sutrueper“getObject...”chiamate al metodo, akms-key-iddeve essere fornito alKmsMaterialsProviderV2costruttore.

Esempi di migrazione

Esempio 1: Migrazione verso 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 di KMS con kms-key-id

Nota

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

Pre-migrazione

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, ]);