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 SDKs, Anda harus memutakhirkan masing-masing 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 terbaru. SDK 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 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
Menginstal dari baris perintah
Untuk proyek yang diinstal menggunakan Composer, dalam file Composer, perbarui SDK paket 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 SDK file 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 kepada Anda bagaimana 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. @SecurityProfile
harus diteruskan ke dalam getObject
dan getObjectAsync
metode diS3EncryptionClientV2
. @SecurityProfile
adalah 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, ]);