Migrasi klien enkripsi Amazon S3 - AWS SDK for PHP

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Migrasi klien enkripsi Amazon S3

Topik ini menunjukkan cara memigrasikan aplikasi Anda dari klien enkripsi Amazon Simple Storage Service (Amazon S3) ke Versi 1 (V1) Amazon Simple Storage Service (Amazon S3) ke Versi 2 (V2), dan memastikan ketersediaan aplikasi selama proses migrasi.

Ikhtisar migrasi

Migrasi ini terjadi dalam dua fase:

1. Perbarui klien yang ada untuk membaca format baru. Pertama, gunakan versi terbaru dari aplikasi AWS SDK for PHP Anda. Ini memungkinkan klien enkripsi V1 yang ada untuk mendekripsi objek yang ditulis oleh klien V2 baru. Jika aplikasi Anda menggunakan beberapa AWS SDK, Anda harus memutakhirkan setiap SDK secara terpisah.

2. Migrasikan enkripsi dan dekripsi klien ke V2. Setelah semua klien enkripsi V1 Anda dapat membaca format baru, Anda dapat memigrasikan klien enkripsi dan dekripsi yang ada ke versi V2 masing-masing.

Perbarui klien yang ada untuk membaca format baru

Klien enkripsi V2 menggunakan algoritma enkripsi yang tidak didukung oleh versi klien yang lebih lama. Langkah pertama dalam migrasi adalah memperbarui klien dekripsi V1 Anda ke rilis SDK terbaru. Setelah menyelesaikan langkah ini, klien V1 aplikasi Anda akan dapat mendekripsi objek yang dienkripsi oleh klien enkripsi V2. Lihat detail di bawah untuk setiap versi utama dari AWS SDK for PHP.

Upgrade AWS SDK for PHP Versi 3

Versi 3 adalah versi terbaru dari AWS SDK for PHP. Untuk menyelesaikan migrasi ini, Anda harus menggunakan versi 3.148.0 atau yang lebih baru dari paket. aws/aws-sdk-php

Instalasi dari Command Line

Untuk proyek yang diinstal menggunakan Composer, dalam file Composer, perbarui paket SDK ke versi 3.148.0 SDK dan kemudian jalankan perintah berikut.

composer update aws/aws-sdk-php

Menginstal Menggunakan File Phar atau Zip

Gunakan salah satu metode berikut. Pastikan untuk menempatkan file SDK yang diperbarui di lokasi yang diperlukan oleh kode Anda, yang ditentukan oleh pernyataan require.

Untuk proyek yang diinstal menggunakan file Phar, unduh file yang diperbarui: aws.phar.

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

Untuk proyek yang diinstal menggunakan file Zip, unduh file yang diperbarui: .

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

Migrasikan enkripsi dan dekripsi klien ke V2

Setelah memperbarui klien Anda untuk membaca format enkripsi baru, Anda dapat memperbarui aplikasi Anda ke klien enkripsi dan dekripsi V2. Langkah-langkah berikut menunjukkan cara berhasil memigrasikan kode Anda dari V1 ke V2.

Persyaratan untuk Memperbarui ke Klien V2

1. Konteks AWS KMS enkripsi harus diteruskan ke dalam S3EncryptionClientV2::putObject dan S3EncryptionClientV2::putObjectAsync metode. AWS KMS konteks enkripsi adalah array asosiatif pasangan kunci-nilai, yang harus Anda tambahkan ke konteks enkripsi untuk enkripsi kunci. AWS KMS Jika tidak ada konteks tambahan yang diperlukan, Anda dapat meneruskan array kosong.

2. @SecurityProfileharus diteruskan ke dalam getObject dan getObjectAsync metode diS3EncryptionClientV2. @SecurityProfileadalah parameter wajib baru dari getObject... metode ini. Jika disetel ke‘V2’, hanya objek yang dienkripsi dalam format yang kompatibel dengan V2 yang dapat didekripsi. Menyetel parameter ini ‘V2_AND_LEGACY’ juga memungkinkan objek yang dienkripsi dalam format yang kompatibel dengan V1 untuk didekripsi. Untuk mendukung migrasi, setel @SecurityProfile ke‘V2_AND_LEGACY’. Gunakan ‘V2’ hanya untuk pengembangan aplikasi baru.

3. (opsional) Sertakan @KmsAllowDecryptWithAnyCmk parameter dalam S3EncryptionClientV2::getObject dan S3EncryptionClientV2::getObjectAsync* methods. Parameter baru telah ditambahkan dipanggil@KmsAllowDecryptWithAnyCmk. Mengatur parameter ini untuk true mengaktifkan dekripsi tanpa memasok kunci KMS. Nilai default-nya adalah false.

4. Untuk dekripsi dengan klien V2, jika @KmsAllowDecryptWithAnyCmk parameter tidak disetel ke true untuk panggilan “getObject...” metode, a kms-key-id harus diberikan ke konstruktor. KmsMaterialsProviderV2

Contoh migrasi

Contoh 1: Migrasi ke klien V2

Pra-migrasi

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

Pasca-migrasi

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

Contoh 2: Menggunakan AWS KMS dengan kms-key-id

catatan

Contoh-contoh ini menggunakan impor dan variabel yang didefinisikan dalam Contoh 1. Misalnya, $encryptionClient.

Pra-migrasi

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

Pasca-migrasi

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