AWS KMS マスターキープロバイダーの更新 - AWS Encryption SDK

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

AWS KMS マスターキープロバイダーの更新

最新バージョンの 1.x に移行し AWS Encryption SDK、その後バージョン 2.0.x 以降に移行するには、レガシー AWS KMS マスターキープロバイダーを、厳密なモードまたは検出モードで明示的に作成されたマスターキープロバイダーに置き換える必要があります。レガシーマスターキープロバイダーは、バージョン 1.7.x で非推奨となり、バージョン 2.0.x で削除されます。この変更は、AWS Encryption SDK for Java、、および AWS Encryption CLIを使用するアプリケーションAWS Encryption SDK for Pythonとスクリプトで必要です。このセクションの例では、コードの更新方法について説明します。

注記

Python では、非推奨の警告をオンにしてください。コードの更新が必要な部分を特定できるようになります。

AWS KMS マスターキー (マスターキープロバイダーではない) を使用している場合は、このステップをスキップできます。 AWS KMS マスターキーは廃止または削除されません。このマスターキーでは、指定したラッピングキーでのみ暗号化および復号化が行われます。

このセクションの例では、変更する必要があるコードの要素に焦点を当てています。更新されたコードの完全な例については、プログラミング言語 の GitHubリポジトリの例セクションを参照してください。また、これらの例では、通常ARNs、 キーを使用して を表します AWS KMS keys。暗号化用のマスターキープロバイダーを作成するときは、任意の有効な AWS KMS キー識別子を使用して を表すことができます AWS KMS key 。復号用のマスターキープロバイダーを作成するときは、キー を使用する必要がありますARN。

移行の詳細

すべての AWS Encryption SDK ユーザーについて、 でのコミットメントポリシーの設定について説明しますコミットメントポリシーの設定

AWS Encryption SDK for C および AWS Encryption SDK for JavaScript ユーザーについては、 のキーリングへのオプションの更新について説明しますAWS KMS キーリングの更新

Strict モードへの移行

を最新の 1.x バージョンに更新したら AWS Encryption SDK、レガシーマスターキープロバイダーを厳格なモードでマスターキープロバイダーに置き換えます。Strict モードでは、暗号化時および復号化時に使用するラッピングキーを指定する必要があります。は、指定したラッピングキーのみ AWS Encryption SDK を使用します。非推奨のマスターキープロバイダーは、 AWS KMS keys さまざまな AWS アカウント や リージョンなど、データキーを暗号化 AWS KMS key した を使用してデータを復号できます。

厳密なモードのマスターキープロバイダーは、 AWS Encryption SDK バージョン 1.7.x で導入されます。1.7.x で非推奨となって 2.0.x で削除されるレガシーマスターキープロバイダーは置き換えられます。厳格なモードでマスターキープロバイダーを使用することが AWS Encryption SDK ベストプラクティスです。

次のコードでは Strict モードでマスターキープロバイダーを作成し、暗号化と復号に使用できるようにしています。

Java

この例は、 AWS Encryption SDK for Javaのバージョン 1.6.2 以前を使用するアプリケーションのコードを表しています。

このコードは、 KmsMasterKeyProvider.builder()メソッドを使用して、ラッピングキー AWS KMS key として使用する AWS KMS マスターキープロバイダーをインスタンス化します。

// Create a master key provider // Replace the example key ARN with a valid one String awsKmsKey = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; KmsMasterKeyProvider masterKeyProvider = KmsMasterKeyProvider.builder() .withKeysForEncryption(awsKmsKey) .build();

この例は、 AWS Encryption SDK for Java のバージョン 1.7.x 以降を使用するアプリケーションのコードを表しています。完全な例については、BasicEncryptionExample.java を参照してください。

前の例で使用した Builder.build() および Builder.withKeysForEncryption() メソッドは、バージョン 1.7.x で非推奨となり、バージョン 2.0.x で削除されます。

Strict モードのマスターキープロバイダーに更新するため、このコードでは非推奨メソッドの呼び出しを新しい Builder.buildStrict() メソッドの呼び出しに置き換えます。この例では、1 つをラッピングキー AWS KMS key として指定しますが、 Builder.buildStrict() メソッドは複数の のリストを取得できます AWS KMS keys。

// Create a master key provider in strict mode // Replace the example key ARN with a valid one from your AWS アカウント. String awsKmsKey = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; KmsMasterKeyProvider masterKeyProvider = KmsMasterKeyProvider.builder() .buildStrict(awsKmsKey);
Python

この例は、 AWS Encryption SDK for Pythonのバージョン 1.4.1 を使用するアプリケーションのコードを表しています。このコードでは KMSMasterKeyProvider を使用しますが、これはバージョン 1.7.x で非推奨となり、バージョン 2.0.x から削除されます。復号時には、 AWS KMS keys 指定した に関係なく、データキーを暗号化 AWS KMS key した が使用されます。

KMSMasterKey は非推奨にならず、削除されません。暗号化および復号化では、 AWS KMS key 指定した のみが使用されます。

# Create a master key provider # Replace the example key ARN with a valid one key_1 = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" key_2 = "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321" aws_kms_master_key_provider = KMSMasterKeyProvider( key_ids=[key_1, key_2] )

この例は、 AWS Encryption SDK for Pythonのバージョン 1.7.x を使用するアプリケーションのコードを表しています。詳しい例については、「basic_encryption.py」を参照してください。

Strict モードのマスターキープロバイダーに更新するため、このコードでは KMSMasterKeyProvider() の呼び出しを StrictAwsKmsMasterKeyProvider() の呼び出しに置き換えます。

# Create a master key provider in strict mode # Replace the example key ARNs with valid values from your AWS アカウント key_1 = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" key_2 = "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321" aws_kms_master_key_provider = StrictAwsKmsMasterKeyProvider( key_ids=[key_1, key_2] )
AWS Encryption CLI

この例では、暗号化CLIバージョン 1.1.7 以前を使用して AWS 暗号化および復号する方法を示しています。

バージョン 1.1.7 以前では、暗号化時に AWS KMS keyなどの 1 つ以上のマスターキー (ラッピングキー) を指定します。復号化時には、カスタムのマスターキープロバイダーを使用していない限り、ラッピングキーを指定することはできません。 AWS 暗号化ではCLI、データキーを暗号化したラッピングキーを使用できます。

\\ Replace the example key ARN with a valid one $ keyArn=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab \\ Encrypt your plaintext data $ aws-encryption-cli --encrypt \ --input hello.txt \ --master-keys key=$keyArn \ --metadata-output ~/metadata \ --encryption-context purpose=test \ --output . \\ Decrypt your ciphertext $ aws-encryption-cli --decrypt \ --input hello.txt.encrypted \ --encryption-context purpose=test \ --metadata-output ~/metadata \ --output .

この例では、Encryption CLIバージョン 1.7.x 以降を使用して AWS 暗号化および復号する方法を示しています。完全な例については、「AWS Encryption CLI の例」を参照してください。

--master-keys パラメータはバージョン 1.7.x で非推奨となり、バージョン 2.0.x で削除されます。これは --wrapping-keys パラメータに置き換わり、すべての暗号化コマンドと復号コマンドに必要となります。このパラメータでは、Strict モードと Discovery モードがサポートされます。ストリクトモードは、意図したラッピングキーを確実に使用する AWS Encryption SDK ベストプラクティスです。

Strict モードにアップグレードするには、--wrapping-keysパラメータの key 属性を使用して、暗号化時および復号時のラッピングキーを指定します。

\\ Replace the example key ARN with a valid value $ keyArn=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab \\ Encrypt your plaintext data $ aws-encryption-cli --encrypt \ --input hello.txt \ --wrapping-keys key=$keyArn \ --metadata-output ~/metadata \ --encryption-context purpose=test \ --output . \\ Decrypt your ciphertext $ aws-encryption-cli --decrypt \ --input hello.txt.encrypted \ --wrapping-keys key=$keyArn \ --encryption-context purpose=test \ --metadata-output ~/metadata \ --output .

Discovery モードへの移行

バージョン 1.7.x 以降では、マスターキープロバイダーに AWS KMS 厳密なモードを使用する、つまり暗号化と復号時にラッピングキーを指定する AWS Encryption SDK ことがベストプラクティスです。暗号化するときは、常にラッピングキーを指定する必要があります。ただし、復号 AWS KMS keys のために ARNs のキーを指定するのは実用的ではない場合があります。例えば、エイリアスを使用して暗号化 AWS KMS keys 時に を識別している場合、復号ARNs時にキーを一覧表示する必要がある場合、エイリアスの利点が失われます。また、Discovery モードのマスターキープロバイダーは元のマスターキープロバイダーと同様に動作するため、移行戦略の一部として一時的にそれを使用し、後で Strict モードのマスターキープロバイダーにアップグレードできます。

このような場合は、マスターキープロバイダーを Discovery モードで使用できます。これらのマスターキープロバイダーではラッピングキーを指定できないため、暗号化には使用できません。復号時には、データキーを暗号化したラッピングキーを使用できます。ただし、同じ動作をするレガシーマスターキープロバイダーとは異なり、Discovery モードで明示的に作成します。Discovery モードでマスターキープロバイダーを使用する場合、使用できるラッピングキーを特に AWS アカウントのものに制限できます。この検出フィルターはオプションですが、お勧めのベストプラクティスです。 AWS パーティションとアカウントの詳細については、「AWS 全般のリファレンス」の「Amazon リソースネーム」を参照してください。

次の例では、暗号化用の厳格なモードで AWS KMS マスターキープロバイダーを作成し、復号用の検出モードで AWS KMS マスターキープロバイダーを作成します。Discovery モードのマスターキープロバイダーは、検出フィルターを使用して、復号に使用するラッピングキーを aws パーティションと特定の AWS アカウント例に制限します。この単純な例ではアカウントフィルターは必要ありませんが、あるアプリケーションがデータを暗号化し、別のアプリケーションがデータを復号化する場合に非常に有益なベストプラクティスです。

Java

この例は、 AWS Encryption SDK for Javaのバージョン 1.7.x 以降を使用するアプリケーションのコードを表しています。完全な例については、DiscoveryDecryptionExample.java を参照してください。

暗号化では Strict モードでマスターキープロバイダーをインスタンス化するために、この例では Builder.buildStrict() メソッドを使用します。復号では Discovery モードでマスターキープロバイダーをインスタンス化するため、Builder.buildDiscovery() メソッドを使用します。Builder.buildDiscovery() メソッドはDiscoveryFilter、指定された AWS パーティションとアカウント AWS KMS keys で AWS Encryption SDK を に制限する を取得します。

// Create a master key provider in strict mode for encrypting // Replace the example alias ARN with a valid one from your AWS アカウント. String awsKmsKey = "arn:aws:kms:us-west-2:111122223333:alias/ExampleAlias"; KmsMasterKeyProvider encryptingKeyProvider = KmsMasterKeyProvider.builder() .buildStrict(awsKmsKey); // Create a master key provider in discovery mode for decrypting // Replace the example account IDs with valid values. DiscoveryFilter accounts = new DiscoveryFilter("aws", Arrays.asList("111122223333", "444455556666")); KmsMasterKeyProvider decryptingKeyProvider = KmsMasterKeyProvider.builder() .buildDiscovery(accounts);
Python

この例は、 AWS Encryption SDK for Python のバージョン 1.7.x 以降を使用するアプリケーションのコードを表しています。詳しい例については、discovery_kms_provider.py を参照してください。

暗号化では Strict モードでマスターキープロバイダーを作成するために、この例では StrictAwsKmsMasterKeyProvider を使用します。復号用の検出モードでマスターキープロバイダーを作成するには、 DiscoveryAwsKmsMasterKeyProviderを使用して、指定された AWS パーティションとアカウント AWS KMS keys で AWS Encryption SDK を DiscoveryFilter に制限します。

# Create a master key provider in strict mode # Replace the example key ARN and alias ARNs with valid values from your AWS アカウント. key_1 = "arn:aws:kms:us-west-2:111122223333:alias/ExampleAlias" key_2 = "arn:aws:kms:us-west-2:444455556666:key/1a2b3c4d-5e6f-1a2b-3c4d-5e6f1a2b3c4d" aws_kms_master_key_provider = StrictAwsKmsMasterKeyProvider( key_ids=[key_1, key_2] ) # Create a master key provider in discovery mode for decrypting # Replace the example account IDs with valid values accounts = DiscoveryFilter( partition="aws", account_ids=["111122223333", "444455556666"] ) aws_kms_master_key_provider = DiscoveryAwsKmsMasterKeyProvider( discovery_filter=accounts )
AWS Encryption CLI

この例では、Encryption CLIバージョン 1.7.x 以降を使用して AWS 暗号化および復号する方法を示しています。バージョン 1.7.x 以降は、--wrapping-keys パラメータが暗号化および復号化時に必要となります。--wrapping-keys パラメータでは、Strict モードと Discovery モードがサポートされます。完全な例については、「AWS Encryption CLI の例」を参照してください。

この例では、暗号化時に必須のラッピングキーを指定します。復号化時には、--wrapping-keys パラメータの discovery 属性の値を true にして、Discovery モードを明示的に選択します。

が検出モードで AWS Encryption SDK 使用できるラッピングキーを特定の に制限するには AWS アカウント、この例では --wrapping-keysパラメータの discovery-partitiondiscovery-account 属性を使用します。これらのオプションの属性は、discovery 属性を true に設定しているときに限って有効です。discovery-partition 属性と discovery-account 属性は一緒に使用する必要があります。単独では有効ではありません。

\\ Replace the example key ARN with a valid value $ keyAlias=arn:aws:kms:us-west-2:111122223333:alias/ExampleAlias \\ Encrypt your plaintext data $ aws-encryption-cli --encrypt \ --input hello.txt \ --wrapping-keys key=$keyAlias \ --metadata-output ~/metadata \ --encryption-context purpose=test \ --output . \\ Decrypt your ciphertext \\ Replace the example account IDs with valid values $ aws-encryption-cli --decrypt \ --input hello.txt.encrypted \ --wrapping-keys discovery=true \ discovery-partition=aws \ discovery-account=111122223333 \ discovery-account=444455556666 \ --encryption-context purpose=test \ --metadata-output ~/metadata \ --output .