View a markdown version of this page

Migrasi Klien Enkripsi Amazon S3 (V1 ke V2) di AWS SDK untuk PHP Versi 3 - AWS SDK untuk 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 (V1 ke V2) di AWS SDK untuk PHP Versi 3

catatan

Jika Anda menggunakan Versi 2 (V2) dari klien enkripsi Amazon S3 dan ingin bermigrasi ke Versi 3 (V3), lihatMigrasi Klien Enkripsi Amazon S3 (V2 ke V3) di AWS SDK untuk PHP Versi 3.

Topik ini menunjukkan cara memigrasi aplikasi Anda dari versi 1 (V1) klien enkripsi 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, terapkan versi terbaru AWS SDK untuk PHP ke aplikasi Anda. Hal 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 klien enkripsi dan dekripsi 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 lama klien. 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 AWS SDK untuk PHP.

Meningkatkan AWS SDK untuk PHP Versi 3

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

Menginstal dari Baris Perintah

Untuk proyek yang diinstal menggunakan Composer, di file Composer, perbarui paket SDK ke versi 3.148.0 dari 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 klien enkripsi dan dekripsi 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. Kon AWS KMS teks enkripsi harus diteruskan ke S3EncryptionClientV2::putObjectAsync metode S3EncryptionClientV2::putObject dan. 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 getObjectAsync metode getObject dan diS3EncryptionClientV2. @SecurityProfileadalah parameter wajib baru dari getObject... metode. Jika disetel ke'V2', hanya objek yang dienkripsi dalam V2-compatible format yang dapat didekripsi. Mengatur parameter ini untuk 'V2_AND_LEGACY' juga memungkinkan objek yang dienkripsi dalam V1-compatible format untuk didekripsi. Untuk mendukung migrasi, setel @SecurityProfile ke'V2_AND_LEGACY'. Gunakan 'V2' hanya untuk pengembangan aplikasi baru.

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

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

Contoh migrasi

Contoh 1: Bermigrasi ke klien V2

Pre-migration

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

Post-migration

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.

Pre-migration

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-migration

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