翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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とスクリプトで必要です。このセクションの例では、コードの更新方法について説明します。
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-partition
と discovery-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 .