最新プロバイダー - Amazon DynamoDB Encryption Client

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

最新プロバイダー

-最新プロバイダー暗号化マテリアルプロバイダーで機能するよう設計された (CMP)プロバイダーストア。プロバイダーストアから CMP を取得し、CMP から返る暗号化マテリアルを取得します。これは、通常、各 CMP を使用して複数の暗号化マテリアルをリクエストします。ただし、プロバイダーストアの機能を使用して、マテリアルが再利用される範囲を制御し、CMP のローテーション頻度を決定し、最新プロバイダーを変更せずに使用する CMP のタイプを変更することもできます。

注記

に関連付けられたコードMostRecentProvider最新のプロバイダのシンボルは、プロセスの存続期間中、暗号化材料をメモリに保存することがあります。これにより、呼び出し元が使用する権限がなくなったキーを使用できる場合があります。

-MostRecentProviderシンボルは、DynamoDB 暗号化クライアントの古いサポートされているバージョンでは廃止され、バージョン 2.0.0 から削除されます。と置き換えられる。CachingMostRecentProvider記号。詳細については、最新プロバイダーの更新 を参照してください。

最新プロバイダーは、プロバイダーストアとその暗号ソースへの呼び出しを最小限に抑える必要のあるアプリケーションや、セキュリティ要件に違反せずに一部の暗号化マテリアルを再利用できるアプリケーションに適しています。たとえば、暗号化マテリアルをAWS KMS keyAWS Key Management Service(AWS KMS) を呼び出さずにAWS KMS項目を暗号化または復号する度に。

選択したプロバイダーストアによって、最新プロバイダーが使用する CMP のタイプと、新しい CMP を取得する頻度が決まります。設計したカスタムプロバイダーストアを含む、最新プロバイダーと互換性のある任意のプロバイダーストアを使用できます。

DynamoDB 暗号化クライアントには、MetaStoreそれは作成して返すラップされたマテリアルプロバイダー(ラップされた CMP)。MetaStore は、生成したラップされた CMP の複数のバージョンを内部 DynamoDB テーブルに保存し、DynamoDB 暗号化クライアントの内部インスタンスによるクライアント側の暗号化でそれらを保護します。

MetaStore は、テーブル内のマテリアルを保護するために、任意のタイプの内部 CMP を使用するように構成できます。Direct KMS プロバイダーによって保護されている暗号資料が生成されるAWS KMS key、指定したラッピングおよび署名キーを使用するラップ CMP、または設計する互換性のあるカスタム CMP。

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

使用方法

最新プロバイダーを作成するには、プロバイダーストアを作成して構成した後、プロバイダーストアを使用する最新プロバイダーを作成する必要があります。

次の例は、MetaStore を使用し、内部の DynamoDB テーブルのバージョンを暗号化マテリアルで保護する最新のプロバイダーを作成する方法を示しています。Direct KMS プロバイダー。以下の例では、CachingMostRecentProvider記号。

最新の各プロバイダには、MetaStore テーブル内の CMP を識別する名前があります。有効期限(TTL) 設定、およびキャッシュが保持できるエントリの数を決定するキャッシュサイズ設定。以下の例では、キャッシュサイズを 1000 エントリ、TTL を 60 秒に設定します。

Java
// Set the name for MetaStore's internal table final String keyTableName = 'metaStoreTable' // Set the Region and AWS KMS key final String region = 'us-west-2' final String keyArn = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' // Set the TTL and cache size final long ttlInMillis = 60000; final long cacheSize = 1000; // Name that identifies the MetaStore's CMPs in the provider store final String materialName = 'testMRP' // Create an internal DynamoDB client for the MetaStore final AmazonDynamoDB ddb = AmazonDynamoDBClientBuilder.standard().withRegion(region).build(); // Create an internal Direct KMS Provider for the MetaStore final AWSKMS kms = AWSKMSClientBuilder.standard().withRegion(region).build(); final DirectKmsMaterialProvider kmsProv = new DirectKmsMaterialProvider(kms, keyArn); // Create an item encryptor for the MetaStore, // including the Direct KMS Provider final DynamoDBEncryptor keyEncryptor = DynamoDBEncryptor.getInstance(kmsProv); // Create the MetaStore final MetaStore metaStore = new MetaStore(ddb, keyTableName, keyEncryptor); //Create the Most Recent Provider final CachingMostRecentProvider cmp = new CachingMostRecentProvider(metaStore, materialName, ttlInMillis, cacheSize);
Python
# Designate an AWS KMS key kms_key_id = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' # Set the name for MetaStore's internal table meta_table_name = 'metaStoreTable' # Name that identifies the MetaStore's CMPs in the provider store material_name = 'testMRP' # Create an internal DynamoDB table resource for the MetaStore meta_table = boto3.resource('dynamodb').Table(meta_table_name) # Create an internal Direct KMS Provider for the MetaStore kms_cmp = AwsKmsCryptographicMaterialsProvider(key_id=kms_key_id) # Create the MetaStore with the Direct KMS Provider meta_store = MetaStore( table=meta_table, materials_provider=kms_cmp ) # Create a Most Recent Provider using the MetaStore # Sets the TTL (in seconds) and cache size (# entries) most_recent_cmp = MostRecentProvider( provider_store=meta_store, material_name=material_name, version_ttl=60.0, cache_size=1000 )

仕組み

最新プロバイダーがプロバイダーストアから CMP を取得します。次に、CMP を使用して、暗号化マテリアルを生成し、それを項目エンクリプタに返します。

最新プロバイダーについて

最新プロバイダーは暗号化マテリアルプロバイダー(CMP)プロバイダーストア。次に、CMP を使用して、それが返す暗号化マテリアルを生成します。各最新プロバイダーは 1 つのプロバイダーストアに関連付けられていますが、プロバイダーストアは複数のホスト間で複数のプロバイダーに CMP を提供できます。

最新プロバイダーは、任意のプロバイダーストアから互換性のある CMP を使用できます。これは CMP の暗号化または復号マテリアルをリクエストし、その出力を項目エンクリプタに返します。暗号化オペレーションは実行されません。

最新プロバイダーは、そのプロバイダーストアから CMP を要求するために、使用する既存の CMP のマテリアル名とバージョンを提供します。暗号化マテリアルでは、最新プロバイダーは常に最大 (「最新の」) バージョンをリクエストします。復号マテリアルの場合、次の図に示すように、暗号化マテリアルの作成に使用された CMP のバージョンをリクエストします。


          最新プロバイダー

最新プロバイダーは、プロバイダーストアが返す CMP のバージョンをメモリ内のローカル最小使用 (LRU) キャッシュに保存します。キャッシュにより、最新プロバイダーは、すべての項目のプロバイダーストアを呼び出さずに必要な CMP を取得できます。必要に応じてキャッシュをクリアすることができます。

最新プロバイダーは、構成可能を使用します。有効期限 — 有効期限アプリケーションの特性に基づいて調整できます。

MetaStore について

互換性のあるカスタムプロバイダーストアなどの任意のプロバイダーストアで最新プロバイダーを使用できます。DynamoDB 暗号化クライアントには、構成してカスタマイズできる安全な実装である MetaStore が含まれています。

あるMetaStoreプロバイダーストアそれは作成して返すラップされた CMPWrapped CMP が必要とするラッピングキー、アンラッピングキー、および署名キーで設定されています。ラップされた CMP は常にすべての項目に対して一意の項目暗号化キーを生成するため、MetaStore は最新プロバイダーにとって安全なオプションです。項目暗号化キーと署名キーを保護するラップキーのみが再利用されます。

次の図は、MetaStore のコンポーネントと、最新プロバイダーとのやり取りの方法を示しています。


          MetaStore

MetaStore は、ラップされた CMP を生成し、内部のDynamoDB テーブルに保存します。パーティションキーは、最新のプロバイダマテリアルの名前で、ソートキーはそのバージョン番号です。テーブル内のマテリアルは、アイテム暗号化と内部を含む、内部 DynamoDB 暗号化クライアントによって保護されています。暗号化マテリアルプロバイダー(CMP)。

MetaStore では、Direct KMS プロバイダー、提供する暗号化マテリアルを使用したラップされた CMP、または互換性のあるカスタム CMP など、あらゆるタイプの内部 CMP を使うことができます。MetaStore の内部 CMP が Direct KMS プロバイダーの場合、再利用可能なラッピングおよび署名キーは、AWS KMS keyAWS Key Management Service(AWS KMS). MetaStore は、内部テーブルに新しい CMP バージョンを追加するか、内部テーブルから CMP バージョンを取得するたびに AWS KMS を呼び出します。

有効期限 (有効期限)

作成した最新プロバイダーの有効期限 (TTL) 値を設定できます。通常、アプリケーションに対して実用的である最小の TTL 値を使用します。

TTL 値の使用は、CachingMostRecentProvider最新プロバイダーの記号。

注記

-MostRecentProvider最新のプロバイダーのシンボルは、DynamoDB 暗号化クライアントの古いサポートバージョンでは廃止され、バージョン 2.0.0 から削除されました。と置き換えられる。CachingMostRecentProvider記号。コードはできる限り早く更新することをお勧めします。詳細については、最新プロバイダーの更新 を参照してください。

CachingMostRecentProvider

-CachingMostRecentProviderでは、TTL 値を 2 つの異なる方法で使用します。

  • TTL は、[最新のプロバイダー] がプロバイダーストアで CMP の新しいバージョンをチェックする頻度を決定します。新しいバージョンが利用可能な場合、最新のプロバイダはその CMP を置き換え、暗号化マテリアルを更新します。それ以外の場合は、現在の CMP および暗号化マテリアルを引き続き使用します。

  • TTL は、キャッシュ内の CMP を使用できる期間を決定します。キャッシュされた CMP を暗号化に使用する前に、最新のプロバイダはキャッシュ内の時間を評価します。CMP キャッシュ時間が TTL を超えると、CMP はキャッシュから削除され、最新のプロバイダはプロバイダストアから新しい最新バージョン CMP を取得します。

MostRecentProvider

MostRecentProviderでは、TTL は、最新のプロバイダーがプロバイダーストアで新しいバージョンの CMP をチェックする頻度を決定します。新しいバージョンが利用可能な場合、最新のプロバイダはその CMP を置き換え、暗号化マテリアルを更新します。それ以外の場合は、現在の CMP および暗号化マテリアルを引き続き使用します。

TTL では、新しい CMP バージョンが作成される頻度は決定されません。新しい CMP バージョンを作成するには、暗号化マテリアルの回転

理想的な TTL 値は、アプリケーションとそのレイテンシーと可用性の目標によって異なります。TTL を小さくすると、暗号化マテリアルがメモリに格納される時間が短縮され、セキュリティプロファイルが向上します。また、TTL が低いほど、重要な情報がより頻繁に更新されます。たとえば、内部 CMP がDirect KMS プロバイダーでは、呼び出し元が引き続き使用する権限があることを、より頻繁に検証します。AWS KMS key。

ただし、TTL が短すぎると、プロバイダーストアへの頻繁な呼び出しによってコストが増加し、プロバイダーストアがアプリケーションやサービスアカウントを共有する他のアプリケーションからのリクエストを抑制する可能性があります。また、TTL を暗号化マテリアルを回転させる速度を調整することでメリットが得られる場合があります。

テスト中に、アプリケーションおよびセキュリティおよびパフォーマンス標準に適した構成が見つかるまで、さまざまなワークロードで TTL とキャッシュサイズを変更します。

暗号化マテリアルの回転

最新のプロバイダが暗号化マテリアルを必要とする場合、常に認識している最新バージョンの CMP を使用します。新しいバージョンをチェックする頻度は、有効期限[最新のプロバイダ] を構成するときに設定する (TTL) 値。

TTL の有効期限が切れると、[最新のプロバイダー] はプロバイダーストアに CMP の新しいバージョンがあるかどうかをチェックします。使用可能な場合は、最新のプロバイダがそれを取得し、キャッシュ内の CMP を置き換えます。プロバイダストアに新しいバージョンがあることが検出されるまで、この CMP とその暗号化マテリアルを使用します。

最新プロバイダーの新しいバージョンの CMP を作成するようにプロバイダーストアに指示するには、プロバイダーストアの新規プロバイダーの作成オペレーション作を、最新プロバイダーのマテリアル名で呼び出します。プロバイダーストアは新しい CMP を作成し、暗号化されたコピーをより大きなバージョン番号で内部ストレージに保存します。(CMP を返しますが、破棄することもできます。) その結果、次に最新プロバイダーがプロバイダーストアにその CMP の最大バージョン番号を問い合わせると、新しいより大きなバージョン番号を取得し、それをストアに対する後続のリクエストで使用して、CMP の新しいバージョンが作成されたかどうかを確認します。

時間、処理された項目または属性の数、またはアプリケーションに合ったその他のメトリクスに基づいて、新しいプロバイダー作成コールをスケジュールできます。

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

最新プロバイダーは、この図に示す次のプロセスを使用して、項目エンクリプタに返す暗号化マテリアルを取得します。出力は、プロバイダーストアが返す CMP のタイプによって異なります。最新プロバイダーは、DynamoDB 暗号化クライアントに含まれる MetaStore などの互換性のある任意のプロバイダーストアを使用できます。


          DynamoDB 暗号化クライアントでの最新プロバイダーの入力、処理、および出力

を使用して最新のプロバイダを作成する場合CachingMostRecentProviderシンボルでは、プロバイダストア、最新のプロバイダの名前、および有効期限(TTL) 値。オプションで、キャッシュ内に存在できる暗号化マテリアルの最大数を決定するキャッシュサイズを指定することもできます。

項目エンクリプタが最新プロバイダーに暗号化マテリアルを要求すると、最新プロバイダーは、その CMP の最新バージョンのキャッシュの検索を開始します。

  • キャッシュ内で最新バージョンの CMP を検出し、CMP が TTL 値を超えていない場合、最新プロバイダーは CMP を使用して暗号化マテリアルを生成します。次に、暗号化マテリアルを項目エンクリプタに返します。このオペレーションでは、プロバイダーストアへの呼び出しは必要ありません。

  • CMP の最新バージョンがキャッシュにない場合、またはキャッシュにあるがその TTL 値を超えた場合、最新プロバイダーはそのプロバイダーストアに CMP をリクエストします。リクエストには、最新プロバイダーのマテリアル名と、既知の最大のバージョン番号が含まれています。

    1. プロバイダーストアは、永続的ストレージから CMP を返します。プロバイダーストアが MetaStore の場合、最新プロバイダーのマテリアル名をパーティションキーとして使用し、バージョン番号をソートキーとして使用して、内部のDynamoDB テーブルから暗号化された Wrapped CMP を取得します。MetaStore は、内部項目エンクリプタと内部 CMP を使用して、ラップされた CMP を復号します。次に、プレーンテキスト CMP を最新プロバイダーに返します。内部 CMP が Direct KMS Provider の場合、このステップには AWS Key Management Service (AWS KMS) コールが含まれます。

    2. CMP は、amzn-ddb-meta-idフィールドを実際のマテリアル説明に追加します。その値は、内部テーブルの CMP のマテリアル名とバージョンです。プロバイダーストアは CMP を最新プロバイダーに返します。

    3. 最新プロバイダーは CMP をメモリにキャッシュします。

    4. 最新プロバイダーは CMP を使用して暗号化マテリアルを生成します。次に、暗号化マテリアルを項目エンクリプタに返します。

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

項目エンクリプタが最新プロバイダーに復号マテリアルを要求すると、最新プロバイダーは以下のプロセスを使用して、それらを取得し返します。

  1. 最新プロバイダーは、項目を暗号化するために使用された暗号化マテリアルのバージョン番号をプロバイダーストアに問い合わせます。項目のマテリアル説明属性から実際のマテリアル説明を渡します。

  2. プロバイダーストアは、実際のマテリアル説明の amzn-ddb-meta-id フィールドから暗号化 CMP バージョン番号を取得し、最新プロバイダーに返します。

  3. 最新プロバイダーは、項目の暗号化と署名に使用された CMP のバージョンをキャッシュ内で検索します。

  • CMP の一致するバージョンがキャッシュにあり、CMP が有効期限 (TTL) 値の場合、最新プロバイダーは CMP を使用して復号マテリアルを生成します。次に、復号マテリアルを項目エンクリプタに返します。このオペレーションでは、プロバイダーストアまたは他の CMP への呼び出しは必要ありません。

  • CMP の一致するバージョンがキャッシュにない場合、またはキャッシュされた CMP の一致するバージョンがキャッシュにない場合AWS KMS keyが TTL 値を超えている場合、最新プロバイダーはそのプロバイダーストアに CMP をリクエストします。リクエストには、マテリアル名および暗号化 CMP バージョン番号が送信されます。

    1. プロバイダーストアは、最新プロバイダー名をパーティションキーとして使用し、バージョン番号をソートキーとして使用して、CMP の永続的ストレージを検索します。

      • 名前とバージョン番号が永続的ストレージにない場合、プロバイダーストアは例外をスローします。CMP を生成するためにプロバイダーストアを使用した場合、意図的に削除されていない限り、CMP は永続的ストレージに保存する必要があります。

      • 一致する名前とバージョン番号を持つ CMP がプロバイダーストアの永続的ストレージにある場合、プロバイダーストアは指定された CMP を最新プロバイダーに返します。

        プロバイダーストアが MetaStore の場合、その DynamoDB テーブルから暗号化された CMP を取得します。次に、内部 CMP の暗号化マテリアルを使用して、CMP を最新プロバイダーに返す前に暗号化された CMP を復号します。内部 CMP が Direct KMS Provider の場合、このステップには AWS Key Management Service (AWS KMS) コールが含まれます。

    2. 最新プロバイダーは CMP をメモリにキャッシュします。

    3. 最新プロバイダーは CMP を使用して復号マテリアルを生成します。次に、復号マテリアルを項目エンクリプタに返します。

最新プロバイダーの更新

[最新のプロバイダ] のシンボルがから変更されます。MostRecentProviderCachingMostRecentProvider

注記

-MostRecentProvider最新のプロバイダを表すシンボルは、Java 用 DynamoDB 暗号化クライアントのバージョン 1.15 および Python 用 DynamoDB 暗号化クライアントのバージョン 1.3 で廃止され、両方の言語実装で DynamoDB 暗号化クライアントのバージョン 2.0.0 から削除されました。代わりに、CachingMostRecentProvider

-CachingMostRecentProviderには以下の変更が実装されています。

  • -CachingMostRecentProviderメモリ内の時間が構成された時間を超えると、暗号化マテリアルをメモリから定期的に削除します。有効期限 (TTL) 値

    -MostRecentProviderは、プロセスの存続期間中、暗号化材料をメモリに保存することがあります。その結果、最新のプロバイダは承認の変更を認識しない可能性があります。呼び出し元のアクセス権限が取り消された後に、暗号化キーを使用する場合があります。

    この新しいバージョンにアップデートできない場合は、定期的に呼び出すことで同様の効果が得られます。clear()キャッシュ上のメソッドです。このメソッドは、キャッシュの内容を手動でフラッシュし、最新のプロバイダが新しい CMP と新しい暗号化マテリアルを要求する必要があります。

  • -CachingMostRecentProviderまた、キャッシュをより詳細に制御できるキャッシュサイズ設定も含まれています。

に更新するにはCachingMostRecentProviderでは、コード内のシンボル名を変更する必要があります。その他すべての点において、CachingMostRecentProviderと完全に下位互換性がありますかMostRecentProvider。テーブル項目を再暗号化する必要はありません。

ただし、CachingMostRecentProviderは、基礎となる主要なインフラストラクチャへの呼び出しをさらに生成します。これは、有効期限 (TTL) 間隔でプロバイダーストアを少なくとも 1 回呼び出します。多数のアクティブな CMP を持つアプリケーション(頻繁なローテーションによる)または大規模なフリートを持つアプリケーションは、この変更の影響を受ける可能性が最も高くなります。

更新されたコードをリリースする前に、コードを徹底的にテストして、頻繁な呼び出しがアプリケーションを損なったり、プロバイダーが依存するサービスによるスロットリングを引き起こさないようにしてください。AWS Key Management Service(AWS KMS) またはAmazon DynamoDB。パフォーマンスの問題を軽減するには、キャッシュサイズと有効期間を調整してCachingMostRecentProvider観察するパフォーマンス特性に基づきます。ガイダンスについては、「有効期限 (有効期限)」を参照してください。