

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

# AWS KMS マスターキープロバイダーの更新
<a name="migrate-mkps-v2"></a>

の最新の 1.*x* バージョンに移行し AWS Encryption SDK、次にバージョン 2.0.*x* 以降に移行するには、レガシー AWS KMS マスターキープロバイダーを、[*厳格モード*または*検出モードで*](about-versions.md#changes-to-mkps)明示的に作成されたマスターキープロバイダーに置き換える必要があります。レガシーマスターキープロバイダーは、バージョン 1.7.*x* で非推奨となり、バージョン 2.0.*x* で削除されます。この変更は、[AWS Encryption SDK for Java](java.md)、[AWS Encryption SDK for Python](python.md)、[AWS Encryption CLI](crypto-cli.md) を使用するアプリケーションとスクリプトで必要となります。このセクションの例では、コードの更新方法について説明します。

**注記**  
Python では、[非推奨の警告をオンにしてください](https://docs.python.org/3/library/warnings.html)。コードの更新が必要な部分を特定できるようになります。

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

このセクションの例では、変更する必要があるコードの要素に焦点を当てています。更新されたコードの完全な例については、使用している[プログラミング言語](programming-languages.md)の GitHub リポジトリの例セクションを参照してください。また、これらの例では、通常、キー ARNsを使用して表現します AWS KMS keys。暗号化用のマスターキープロバイダーを作成するときは、任意の有効な AWS KMS [キー識別子](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id)を使用して を表すことができます AWS KMS key 。復号用のマスターキープロバイダーを作成するときは、キー ARN を使用する必要があります。

**移行の詳細**

すべての AWS Encryption SDK ユーザーについて、 でのコミットメントポリシーの設定について説明します[コミットメントポリシーの設定](migrate-commitment-policy.md)。

 AWS Encryption SDK for C および AWS Encryption SDK for JavaScript ユーザーについては、「」のキーリングのオプションの更新について説明します[AWS KMS キーリングの更新](migrate-keyrings-v2.md)。

**Topics**
+ [Strict モードへの移行](#migrate-mkp-strict-mode)
+ [Discovery モードへの移行](#migrate-mkp-discovery-mode)

## Strict モードへの移行
<a name="migrate-mkp-strict-mode"></a>

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

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

次のコードでは 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](https://github.com/aws/aws-encryption-sdk-java/blob/master/src/examples/java/com/amazonaws/crypto/examples/v2/BasicEncryptionExample.java)」を参照してください。

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

Strict モードのマスターキープロバイダーに更新するため、このコードでは非推奨メソッドの呼び出しを新しい `Builder.buildStrict()` メソッドの呼び出しに置き換えます。この例では、ラッピングキー AWS KMS key として 1 つを指定しますが、 `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\$1encryption.py](https://github.com/aws/aws-encryption-sdk-python/blob/master/examples/src/legacy/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 ]

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

バージョン 1.1.7 以前では、暗号化時に AWS KMS keyなどの 1 つ以上のマスターキー (*ラッピングキー*) を指定します。復号化時には、カスタムのマスターキープロバイダーを使用していない限り、ラッピングキーを指定することはできません。 AWS Encryption 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 以降を使用して暗号化および復号する方法を示します。完全な例については、「[Encryption AWS CLI の例](crypto-cli-examples.md)」を参照してください。

`--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 モードへの移行
<a name="migrate-mkp-discovery-mode"></a>

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

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

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

------
#### [ Java ]

この例は、 AWS Encryption SDK for Javaのバージョン 1.7.*x* 以降を使用するアプリケーションのコードを表しています。詳しい例については、[DiscoveryDecryptionExample.java](https://github.com/aws/aws-encryption-sdk-java/blob/master/src/examples/java/com/amazonaws/crypto/examples/) を参照してください。

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

```
// 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\$1kms\$1provider.py](https://github.com/aws/aws-encryption-sdk-python/blob/master/examples/src/legacy/discovery_kms_provider.py) を参照してください。

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

```
# 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 モードがサポートされます。完全な例については、「[Encryption AWS CLI の例](crypto-cli-examples.md)」を参照してください。

この例では、暗号化時に必須のラッピングキーを指定します。復号化時には、`--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 .
```

------