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 SDKs、それぞれを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 ファイルでパッケージを のバージョン 3.148.0 SDKに更新しSDK、次のコマンドを実行します。

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 という新しいパラメータを追加しました。このパラメータを に設定すると、KMSキーを指定せずに復号化trueが有効になります。デフォルト値は 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: AWS 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, ]);