AWS SDK for PHP バージョン 3 を使用した AWS KMS データキーの暗号化および復号化 - AWS SDK for PHP

AWS SDK for PHP バージョン 3 を使用した AWS KMS データキーの暗号化および復号化

データキーは、大量のデータや他のデータ暗号化キーといったデータを暗号化するための暗号化キーです。

AWS Key Management Service (AWS KMS) AWS KMS key を使用して、データキーを生成、暗号化、復号できます。

以下の例では、次の方法を示しています。

  • Encrypt を使用してデータキーを暗号化する。

  • Decrypt を使用してデータキーを復号化する。

  • ReEncrypt を使用して新しい KMS キーでデータキーを再暗号化します。

AWS SDK for PHP 用のすべてのサンプルコードは GitHub で入手できます。

認証情報

サンプルコードを実行する前に、AWS の認証情報を設定します (AWS SDK for PHP バージョン 3 を使用した AWS での認証 を参照)。AWS SDK for PHP からのインポート (AWS SDK for PHP バージョン 3 のインストール を参照)。

AWS Key Management Service (AWS KMS) の使用の詳細については、「AWS KMS デベロッパーガイド」を参照してください。

Encrypt

Encrypt オペレーションは、データキーを暗号化するように設計されていますが、頻繁には使用されていません。GenerateDataKey および GenerateDataKeyWithoutPlaintext オペレーションは、暗号化されたデータキーを返します。暗号化されたデータを新しい AWS リージョンに移動し、その新しいリージョンで KMS キーを使用してデータキーを暗号化するときに Encypt メソッドを使用できます。

インポート

require 'vendor/autoload.php'; use Aws\Exception\AwsException;

サンプルコード

$KmsClient = new Aws\Kms\KmsClient([ 'profile' => 'default', 'version' => '2014-11-01', 'region' => 'us-east-2' ]); $keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'; $message = pack('c*', 1, 2, 3, 4, 5, 6, 7, 8, 9, 0); try { $result = $KmsClient->encrypt([ 'KeyId' => $keyId, 'Plaintext' => $message, ]); var_dump($result); } catch (AwsException $e) { // output error message if fails echo $e->getMessage(); echo "\n"; }

Decrypt

データキーを復号するには、Decrypt オペレーションを使用します。

指定する ciphertextBlob は、GenerateDataKeyGenerateDataKeyWithoutPlaintext、または Encrypt レスポンスからの CiphertextBlob フィールド値である必要があります。

インポート

require 'vendor/autoload.php'; use Aws\Exception\AwsException;

サンプルコード

$KmsClient = new Aws\Kms\KmsClient([ 'profile' => 'default', 'version' => '2014-11-01', 'region' => 'us-east-2' ]); $ciphertext = 'Place your cipher text blob here'; try { $result = $KmsClient->decrypt([ 'CiphertextBlob' => $ciphertext, ]); $plaintext = $result['Plaintext']; var_dump($plaintext); } catch (AwsException $e) { // Output error message if fails echo $e->getMessage(); echo "\n"; }

再暗号化

暗号化されたデータキーを復号し、続いてすぐに異なる KMS キーでデータキーを再暗号化するには、ReEncrypt オペレーションを使用します。このオペレーションは AWS KMS 内のサーバー側で完全に実行されるため、プレーンテキストが AWS KMS の外部に公開されることはありません。

指定する ciphertextBlob は、GenerateDataKeyGenerateDataKeyWithoutPlaintext、または Encrypt レスポンスからの CiphertextBlob フィールド値である必要があります。

インポート

require 'vendor/autoload.php'; use Aws\Exception\AwsException;

サンプルコード

$KmsClient = new Aws\Kms\KmsClient([ 'profile' => 'default', 'version' => '2014-11-01', 'region' => 'us-east-2' ]); $keyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'; $ciphertextBlob = 'Place your cipher text blob here'; try { $result = $KmsClient->reEncrypt([ 'CiphertextBlob' => $ciphertextBlob, 'DestinationKeyId' => $keyId, ]); var_dump($result); } catch (AwsException $e) { // output error message if fails echo $e->getMessage(); echo "\n"; }