Amazon S3 暗号化クライアントの移行 - AWS SDK for PHP

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon S3 暗号化クライアントの移行

このトピックでは、アプリケーションで使用している Amazon Simple Storage Service (Amazon S3) 暗号化クライアントをバージョン 1 (V1) からバージョン 2 (V2) に移行し、移行プロセス全体でアプリケーションの可用性を確保する方法について説明します。

移行の概要

この移行は 2 つのフェーズから構成されます。

1. 新しいフォーマットを読み取るために既存のクライアントを更新します。まず、更新されたバージョンのAWS SDK for PHPアプリケーションに追加します。これにより、既存の V1 暗号化クライアントが、新しい V2 クライアントによって書き込まれたオブジェクトを復号できるようになります。アプリケーションで複数の AWS SDK を使用する場合は、各 SDK を個別にアップグレードする必要があります。

2. 暗号化および復号クライアントを V2 に移行します。すべての V1 暗号化クライアントが新しいフォーマットを読み取ることができるようになったら、既存の暗号化および復号化クライアントをそれぞれの V2 バージョンに移行できます。

新しいフォーマットを読み取るために既存のクライアントを更新する

V2 暗号化クライアントは、古いバージョンのクライアントではサポートされていない暗号化アルゴリズムを使用します。移行の最初のステップとして、V1 復号化クライアントを最新の SDK リリースに更新します。このステップを完了すると、アプリケーションの V1 クライアントが V2 暗号化クライアントによって暗号化されたオブジェクトを復号できるようになります。の各メジャーバージョンについては、以下の詳細を参照してください。AWS SDK for PHP。

アップグレードAWS SDK for PHPバージョン 3

バージョン 3 は、の最新バージョンのAWS SDK for PHP。この移行を完了するには、バージョン 3.148.0 以降の aws/aws-sdk-php パッケージを使用する必要があります。

コマンドラインからインストールする

Composer を使用してインストールされたプロジェクトについては、Composer ファイルで SDK パッケージを SDK のバージョン 3.148.0 に更新し、次のコマンドを実行します。

composer update aws/aws-sdk-php

Phar または Zip ファイルを使用したインストール

次のいずれかの方法を使用します。更新された SDK ファイルは、必ず require ステートメントによって決定されるコードで求められる場所に配置してください。

Phar ファイルを使用してインストールされたプロジェクトについては、更新されたファイル (aws.phar) をダウンロードします。

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

Zip ファイルを使用してインストールされたプロジェクトについては、更新されたファイル () をダウンロードします。

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

暗号化および復号化クライアントを V2 に移行する

クライアントを更新して新しい暗号化形式を読み取るようにした後で、V2 暗号化および復号化クライアントを使用するようにアプリケーションを更新できます。次の手順は、コードを V1 から V2 に正常に移行する方法を示しています。

V2 クライアントへの更新の要件

1. AWS KMS 暗号化コンテキストは、S3EncryptionClientV2::putObject および S3EncryptionClientV2::putObjectAsync メソッドに渡す必要があります。AWS KMS 暗号化コンテキストは、キーと値のペアの連想配列で、AWS KMS キー暗号化のために暗号化コンテキストに追加する必要があります。追加のコンテキストが必要ない場合は、空の配列を渡すことができます。

2. @SecurityProfileS3EncryptionClientV2getObject および getObjectAsync メソッドに渡す必要があります。@SecurityProfilegetObject... メソッドの新しい必須パラメータです。‘V2’ に設定すると、V2 互換形式で暗号化されたオブジェクトのみ復号化できます。また、このパラメータを ‘V2_AND_LEGACY’ に設定すると、V1 互換形式で暗号化されたオブジェクトを復号化することができます。移行をサポートするために、@SecurityProfile‘V2_AND_LEGACY’ に設定します。‘V2’ は、新しいアプリケーションの開発でのみ使用します。

3. (オプション) @KmsAllowDecryptWithAnyCmk パラメータを S3EncryptionClientV2::getObjectS3EncryptionClientV2::getObjectAsync* methods. に含め、@KmsAllowDecryptWithAnyCmk という新しいパラメータを追加しました。このパラメータを true に設定すると、KMS キーを指定することなく復号化が可能になります。デフォルト値は false です。

4. V2 クライアントで復号化する場合、“getObject...” メソッド呼び出しで @KmsAllowDecryptWithAnyCmk パラメータが true に設定されていない場合、KmsMaterialsProviderV2 のコンストラクタに kms-key-id を指定する必要があります。

移行の例

例 1: V2 クライアントへの移行

移行前

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

移行後

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

例 2: KMS の使用方法 kms-key-id

注記

これらの例では、例 1 で定義されたインポートと変数を使用しています。例: $encryptionClient

移行前

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

移行後

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