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

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

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

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

移行の概要

この移行は、次の 2 つのフェーズで発生します。

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

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

既存のクライアントを更新して新しいフォーマットを読み込む

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

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

バージョン 3 は、AWSSDK 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.@SecurityProfileに渡さなければならないgetObjectおよびgetObjectAsyncのメソッドS3EncryptionClientV2@SecurityProfileの新しい必須パラメータですかgetObject...方法。に設定されている場合‘V2’では、V2 互換形式で暗号化されているオブジェクトのみを復号できます。このパラメータはに設定します。‘V2_AND_LEGACY’また、V1 互換フォーマットで暗号化されたオブジェクトを復号化することもできます。移行をサポートするには、@SecurityProfile‘V2_AND_LEGACY’。を使用する‘V2’新しいアプリケーション開発のためだけです。

3. (オプション) 含める@KmsAllowDecryptWithAnyCmkのパラメータS3EncryptionClientV2::getObjectおよびS3EncryptionClientV2::getObjectAsync* methods.新しいパラメータが追加されました。@KmsAllowDecryptWithAnyCmk。このパラメータはに設定します。trueKMS キーを指定せずに復号化を有効にします。デフォルト値は false です。

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

移行の例

例 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-key-id での KMS の使用

注記

これらの例では、例 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, ]);