Direct KMS マテリアルプロバイダー - AWS Database Encryption SDK

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

Direct KMS マテリアルプロバイダー

注記

クライアント側の暗号化ライブラリの名前が AWS Database Encryption SDK に変更されました。次のトピックには、DynamoDB Encryption Client for Java のバージョン 1.x~2.x および DynamoDB Encryption Client for Python のバージョン 1.x~3.x に関する情報が記載されています。詳細については、「AWS Database Encryption SDK for DynamoDB バージョンのサポート」を参照してください。

Direct KMS マテリアルプロバイダー (Direct KMS プロバイダー) は、AWS KMS key によってテーブル項目を保護しているため、AWS Key Management Service (AWS KMS) は必ず暗号化されます。この暗号化マテリアルプロバイダーより、テーブル項目ごとに一意の暗号化キーと署名キーが返ります。そのためには、項目を暗号化または復号する度に AWS KMS を呼び出します。

高頻度で大規模の DynamoDB 項目を処理している場合は、AWS KMS の 1 秒あたりのリクエスト数の制限を超過し、処理が遅延する可能性があります。制限を超過する必要がある場合は、AWS Support センターでケースを作成してください。また、最新プロバイダーなど、キーの再利用が制限された暗号化マテリアルプロバイダーの使用を検討することもできます。

Direct KMS プロバイダーを使用するには、呼び出し元に AWS アカウント、および少なくとも 1 つの AWS KMS key が必要であり、さらに、AWS KMS key で GenerateDataKey および Decrypt オペレーションを呼び出すためのアクセス許可も必要です。AWS KMS key は対称暗号化キーである必要があります。DynamoDB 暗号化クライアントは非対称暗号化をサポートしていません。DynamoDB グローバルテーブルを使用している場合、AWS KMSマルチリージョンキーを指定することもできます。詳細については、「使用方法」を参照してください。

注記

Direct KMS プロバイダーを使用する場合は、プライマリーキー属性の名前と値がプレーンテキストで AWS KMS 暗号化コンテキストおよび関連 AWS KMS オペレーションの AWS CloudTrail ログに表示されます。ただし、DynamoDB 暗号化クライアントが、暗号化された属性値をプレーンテキストで公開することはありません。

Direct KMS プロバイダーは、DynamoDB 暗号化クライアントがサポートしている複数の暗号化マテリアルプロバイダー (CMP) の 1 つです。他の CMP の詳細については、「暗号マテリアルプロバイダー」を参照してください。

サンプルコードについては、以下を参照してください。

使用方法

Direct KMS プロバイダーを作成するには、キー ID パラメータを使用して、アカウントに対称暗号化 KMS キーを指定します。キー ID パラメータの値は、キー ID、キー ARN、エイリアス名、または AWS KMS key のエイリアス ARN にすることができます。キー ID の詳細については、AWS Key Management Service デベロッパーガイドの「キー識別子」を参照してください。

Direct KMS プロバイダーでは、対称暗号化 KMS キーが必要です。非対称 KMS キーを使用することはできません。ただし、マルチリージョン KMS キー、インポートされたキーマテリアルを含む KMS キー、またはカスタムキーストア内の KMS キーを使用できます。KMS キーに kms:GenerateDataKey アクセス許可と kms:Decrypt アクセス許可がある必要があります。そのため、AWS が管理する KMS キーや AWS が所有する KMS キーではなく、カスタマー管理のキーを使用する必要があります。

Python 用 DynamoDB 暗号化クライアントは、キー ID パラメータ値でリージョンから AWS KMS を呼び出すためのリージョンを決定します (リージョンが含まれている場合)。リージョンが含まれていない場合、AWS KMS クライアントで指定されているリージョンを使用するか、AWS SDK for Python (Boto3) で設定されているリージョンを使用します。Python でのリージョンの選択の詳細については、AWS SDK for Python (Boto3) API リファレンスの「設定」を参照してください。

Java 用 DynamoDB 暗号化クライアントは、指定したクライアントにリージョンが含まれている場合、AWS KMS クライアントのリージョンから AWS KMS を呼び出すリージョンを決定します。リージョンが含まれていない場合、AWS SDK for Java で設定されたリージョンが使用されます。AWS SDK for Java でのリージョンの選択の詳細については、AWS SDK for Java デベロッパーガイドの「AWS リージョン の選択」を参照してください。

Java
// Replace the example key ARN and Region with valid values for your application final String keyArn = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' final String region = 'us-west-2' final AWSKMS kms = AWSKMSClientBuilder.standard().withRegion(region).build(); final DirectKmsMaterialProvider cmp = new DirectKmsMaterialProvider(kms, keyArn);
Python

次の例では、キー ARN を使用して AWS KMS key を指定しています。キー ID に AWS リージョン が含まれていない場合、DynamoDB 暗号化クライアントは、設定された Botocore セッションがある場合はそのセッションから、あるいは Boto デフォルトからリージョンを取得します。

# Replace the example key ID with a valid value kms_key = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' kms_cmp = AwsKmsCryptographicMaterialsProvider(key_id=kms_key)

Amazon DynamoDB グローバルテーブルを使用している場合は、AWS KMS マルチリージョンキーでデータを暗号化することをお勧めします。マルチリージョンキーとは、さまざまな AWS リージョン にある AWS KMS keys であり、キー ID とキーマテリアルが同じであるため、交換して使用できます。詳細については、AWS Key Management Service デベロッパーガイドの「マルチリージョンキーを使用する」を参照してください。

注記

グローバルテーブルのバージョン 2017.11.29 を使用している場合は、予約されたレプリケーションフィールドが暗号化または署名されないように属性アクションを設定する必要があります。詳細については、「古いバージョンのグローバルテーブルの問題」を参照してください。

DynamoDB 暗号化クライアントでマルチリージョンキーを使用するには、マルチリージョンキーを作成し、アプリケーションを実行するリージョンにレプリケートします。次に、DynamoDB 暗号化クライアントが AWS KMS を呼び出すリージョンでマルチリージョンキーを使用するように Direct KMS プロバイダーを設定します。

次の例では、マルチリージョンキーを使用して、米国東部 (バージニア北部) (us-east-1) リージョンのデータを暗号化し、米国西部 (オレゴン) (us-west-2) リージョンのデータを復号するように DynamoDB 暗号化クライアントを設定します。

Java

この例では、DynamoDB 暗号化クライアントは AWS KMS クライアントのリージョンから AWS KMS を呼び出すためのリージョンを取得します。keyArn 値は、同じリージョンのマルチリージョンキーを識別します。

// Encrypt in us-east-1 // Replace the example key ARN and Region with valid values for your application final String usEastKey = 'arn:aws:kms:us-east-1:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab' final String region = 'us-east-1' final AWSKMS kms = AWSKMSClientBuilder.standard().withRegion(region).build(); final DirectKmsMaterialProvider cmp = new DirectKmsMaterialProvider(kms, usEastKey);
// Decrypt in us-west-2 // Replace the example key ARN and Region with valid values for your application final String usWestKey = 'arn:aws:kms:us-west-2:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab' final String region = 'us-west-2' final AWSKMS kms = AWSKMSClientBuilder.standard().withRegion(region).build(); final DirectKmsMaterialProvider cmp = new DirectKmsMaterialProvider(kms, usWestKey);
Python

この例では、DynamoDB 暗号化クライアントはキー ARN のリージョンから AWS KMS を呼び出すためのリージョンを取得します。

# Encrypt in us-east-1 # Replace the example key ID with a valid value us_east_key = 'arn:aws:kms:us-east-1:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab' kms_cmp = AwsKmsCryptographicMaterialsProvider(key_id=us_east_key)
# Decrypt in us-west-2 # Replace the example key ID with a valid value us_west_key = 'arn:aws:kms:us-west-2:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab' kms_cmp = AwsKmsCryptographicMaterialsProvider(key_id=us_west_key)

使用方法

以下の図に示されているように、Direct KMS プロバイダーは、指定した AWS KMS key で保護されている暗号化キーおよび署名キーを返します。


        DynamoDB 暗号化クライアントでの Direct KMS プロバイダーの入力、処理、および出力
  • 暗号化マテリアルを生成するために、Direct KMS プロバイダーは AWS KMS に、ユーザーが指定した AWS KMS key を使用して項目ごとに一意のデータキーを生成するように要求します。これにより、データキーのプレーンテキストコピーから項目の暗号化キーと署名キーが導出され、暗号化データキーと一緒に返ります。このデータキーは、項目のマテリアル記述属性に保存されます。

    項目エンクリプタでは、この暗号化キーおよび署名キーを使用します。また、メモリから可能な限り早くそれらを削除します。導出されたデータキーの暗号化されたコピーのみ、暗号化された項目に保存されます。

  • 復号マテリアルを生成するには、Direct KMS プロバイダーは暗号化されたデータキーを復号するよう AWS KMS に求めます。これにより、プレーンテキストデータキーより検証キーおよび署名キーが導出され、項目エンクリプタに返されます。

    項目エンクリプタは項目を検証し、検証が成功すると、暗号化された値が復号されます。次に、可能な限り早く、メモリよりキーが削除されます。

暗号化マテリアルを取得する

このセクションでは、項目エンクリプタより暗号化マテリアルのリクエストを受け取るときの Direct KMS プロバイダーの入力、出力、処理の詳細について説明します。

入力 (アプリケーションから)

  • AWS KMS key のキー ID。

入力 (項目エンクリプタから)

出力 (項目エンクリプタへ)

  • 暗号化キー (プレーンテキスト)

  • 署名キー

  • 実際のマテリアル説明で、これらの値は、クライアントより項目に追加されるマテリアル説明属性に保存されます。

    • amzn-ddb-env-key: AWS KMS key によって暗号化されている Base64 エンコードのデータ

    • amzn-ddb-env-alg: 暗号化アルゴリズム。デフォルトは AES/256

    • amzn-ddb-sig-alg: 署名アルゴリズム。デフォルトは HmacSHA256/256

    • amzn-ddb-wrap-alg: kms

Processing

  1. Direct KMS プロバイダーは AWS KMS に、指定された AWS KMS key を使用して項目の一意のデータキーを生成するように要求します。このオペレーションによって、プレーンテキストキーと、AWS KMS key で暗号化されたコピーが返ります。これは、初期のキーマテリアルと呼ばれます。

    このリクエストの AWS KMS 暗号化テキストには、次のプレーンテキスト形式の値が含まれています。これらのシークレットではない値は、暗号化されたオブジェクトに暗号的にバインドされているため、復号時には同じ暗号化コンテキストが必要です。これらの値を使用して、AWS KMS への呼び出しを AWS CloudTrail ログで識別します。

    • amzn-ddb-env-alg - 暗号化アルゴリズム。デフォルトは AES/256

    • amzn-ddb-sig-alg - 署名アルゴリズム。デフォルトは HmacSHA256/256

    • (オプション) aws-kms-table – テーブル名

    • (オプション) パーティションキー名パーティションキー値 (バイナリ値は Base64 エンコード形式)

    • (オプション) ソートキー名ソートキー値 (バイナリ値は Base64 エンコード形式)

    Direct KMS プロバイダーは、項目の DynamoDB 暗号化コンテキストから AWS KMS 暗号化コンテキストの値を取得します。DynamoDB 暗号化コンテキストにテーブル名などの値が含まれていない場合は、その名前と値のペアが AWS KMS 暗号化コンテキストから除外されます。

  2. Direct KMS プロバイダーは、対称暗号化キーおよび署名キーをデータキーから導出します。デフォルトでは、セキュアハッシュアルゴリズム (SHA) 256 および RFC5869 HMAC ベースのキー導出関数を使用して、256 ビット AES 対称暗号化キーおよび 256 ビット HMAC-SHA-256 署名キーを導出します。

  3. Direct KMS プロバイダーは、項目エンクリプタに出力を返します。

  4. 項目エンクリプタは、暗号化キーを使用して、指定された属性を暗号化し、署名キーを使用して署名します。この際、実際のマテリアル記述で指定されたアルゴリズムを使用します。可能な限り早く、メモリよりプレーンテキストキーが削除されます。

復号マテリアルを取得する

このセクションでは、項目エンクリプタより復号マテリアルのリクエストを受け取るときの Direct KMS プロバイダーの入力、出力、処理の詳細について説明します。

入力 (アプリケーションから)

  • AWS KMS key のキー ID。

    キー ID の値は、キー ID、キー ARN、エイリアス名、または AWS KMS key のエイリアス ARN にすることができます。キー ID に含まれていない値 (リージョンなど) はすべて、AWS 名前付きプロファイルで入手できる必要があります。キー ARN により、AWS KMS で必要なすべての値が提供されます。

入力 (項目エンクリプタから)

出力 (項目エンクリプタへ)

  • 暗号化キー (プレーンテキスト)

  • 署名キー

Processing

  1. Direct KMS プロバイダーは、暗号化された項目のマテリアル記述属性から暗号化されたデータキーを取得します。

  2. AWS KMS に、指定された AWS KMS key を使用して暗号化されたデータキーを復号するように求めます。オペレーションでプレーンテキストのキーが返ります。

    このリクエストでは、データキーの生成および暗号化に使用したのと同じ AWS KMS 暗号化コンテキストを使用する必要があります。

    • aws-kms-table – テーブル名

    • パーティションキー名パーティションキー値 (バイナリ値は Base64 エンコード形式)

    • (オプション) ソートキー名ソートキー値 (バイナリ値は Base64 エンコード形式)

    • amzn-ddb-env-alg - 暗号化アルゴリズム。デフォルトは AES/256

    • amzn-ddb-sig-alg - 署名アルゴリズム。デフォルトは HmacSHA256/256

  3. Direct KMS プロバイダーでは、セキュアハッシュアルゴリズム (SHA) 256 および RFC5869 HMAC ベースのキー導出関数を使用して、データキーから 256 ビット AES 対称暗号化キーおよび 256 ビット HMAC-SHA-256 署名キーを導出します。

  4. Direct KMS プロバイダーは、項目エンクリプタに出力を返します。

  5. 項目エンクリプタは、署名キーを使用して項目を検証します。成功すると、暗号化された属性値は対称暗号化キーを使用して復号されます。これらのオペレーションでは、実際のマテリアル記述で指定された暗号化アルゴリズムおよび署名アルゴリズムが使用されます。項目エンクリプタによって、可能な限り早く、メモリよりプレーンテキストキーが削除されます。