翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
最新プロバイダー
注記
クライアント側の暗号化ライブラリの名前が AWS Database Encryption SDK に変更されました。次のトピックでは、バージョン 1 について説明します。 x —2。 Java 用の DynamoDB 暗号化クライアントの x およびバージョン 1。 x —3。 Python 用の DynamoDB 暗号化クライアントの x。詳細については、「DynamoDB AWS バージョンサポート用データベース暗号化 SDK」を参照してください。
最新プロバイダーは、プロバイダーストアで機能するように設計された暗号化マテリアルプロバイダー (CMP) です。プロバイダーストアから CMP を取得し、CMP から返る暗号化マテリアルを取得します。これは、通常、各 CMP を使用して複数の暗号化マテリアルをリクエストします。ただし、プロバイダーストアの機能を使用して、マテリアルが再利用される範囲を制御し、CMP のローテーション頻度を決定し、最新プロバイダーを変更せずに使用する CMP のタイプを変更することもできます。
注記
最新プロバイダーの MostRecentProvider
記号に関連付けられたコードは、プロセスの有効期間の間、暗号化マテリアルをメモリに保存する場合があります。これにより、呼び出し元は、使用する権限がなくなったキーを使用できるようになる可能性があります。
MostRecentProvider
記号は、DynamoDB 暗号化クライアントのサポートされている古いバージョンでは廃止されており、バージョン 2.0.0 から除去されています。これは、CachingMostRecentProvider
記号に置き換えられています。詳細については、「最新プロバイダーの更新」を参照してください。
最新プロバイダーは、プロバイダーストアとその暗号ソースへの呼び出しを最小限に抑える必要のあるアプリケーションや、セキュリティ要件に違反せずに一部の暗号化マテリアルを再利用できるアプリケーションに適しています。例えば、これを使用して、項目を暗号化または復号するたびに AWS KMS を呼び出さなくても、AWS Key Management Service (AWS KMS) の AWS KMS key で暗号化マテリアルを保護できます。
選択したプロバイダーストアによって、最新プロバイダーが使用する CMP のタイプと、新しい CMP を取得する頻度が決まります。設計したカスタムプロバイダーストアを含む、最新プロバイダーと互換性のある任意のプロバイダーストアを使用できます。
DynamoDB 暗号化クライアントには、MetaStoreラップされたマテリアルプロバイダー (ラップされた CMP) を作成して返す機能が含まれています。は、生成した複数のバージョンの Wrapped CMP を内部 DynamoDB MetaStore テーブルに保存し、DynamoDB 暗号化クライアントの内部インスタンスによるクライアント側の暗号化で保護します。
は、任意のタイプの内部 CMP を使用してテーブル内のマテリアルを保護するように設定できます。たとえば、ユーザが保護する暗号化マテリアルを生成するダイレクト KMS プロバイダ、指定したラッピングキーと署名キーを使用する Wrapped CMP、設計した互換性のあるカスタム CMP などです。MetaStore AWS KMS key
サンプルコードについては、以下を参照してください。
-
Java: MostRecentEncryptedItem
使用方法
最新プロバイダーを作成するには、プロバイダーストアを作成して構成した後、プロバイダーストアを使用する最新プロバイダーを作成する必要があります。
次の例は、を使用して、内部 DynamoDB テーブルのバージョンをダイレクト KMS プロバイダーの暗号化マテリアルで保護する最新プロバイダーを作成する方法を示しています。MetaStore以下の例では、CachingMostRecentProvider 記号を使用します。
最新のプロバイダにはそれぞれ、MetaStoreテーブル内の CMP を識別する名前、time-to-live(TTL) 設定、およびキャッシュが保持できるエントリ数を決定するキャッシュサイズ設定があります。これらの例では、キャッシュサイズを 1000 エントリに設定し、TTL を 60 秒に設定します。
使用方法
最新プロバイダーがプロバイダーストアから CMP を取得します。次に、CMP を使用して、暗号化マテリアルを生成し、それを項目エンクリプタに返します。
最新プロバイダーについて
最新プロバイダーは、プロバイダーストアから暗号化マテリアルプロバイダー (CMP) を取得します。次に、CMP を使用して、それが返す暗号化マテリアルを生成します。各最新プロバイダーは 1 つのプロバイダーストアに関連付けられていますが、プロバイダーストアは複数のホスト間で複数のプロバイダーに CMP を提供できます。
最新プロバイダーは、任意のプロバイダーストアから互換性のある CMP を使用できます。暗号化または復号マテリアルを CMP に要求し、項目エンクリプタに出力を返します。暗号化オペレーションは実行されません。
最新プロバイダーは、そのプロバイダーストアから CMP を要求するために、使用する既存の CMP のマテリアル名とバージョンを提供します。暗号化マテリアルでは、最新プロバイダーは常に最大 (「最新の」) バージョンをリクエストします。復号マテリアルの場合、次の図に示すように、暗号化マテリアルの作成に使用された CMP のバージョンをリクエストします。

最新プロバイダーは、プロバイダーストアが返す CMP のバージョンをメモリ内のローカル最小使用 (LRU) キャッシュに保存します。キャッシュにより、最新プロバイダーは、すべての項目のプロバイダーストアを呼び出さずに必要な CMP を取得できます。必要に応じてキャッシュをクリアすることができます。
time-to-live最新プロバイダーは設定可能な値を使用しており、アプリケーションの特性に基づいて調整できます。
MetaStore について
互換性のあるカスタムプロバイダーストアなどの任意のプロバイダーストアで最新プロバイダーを使用できます。DynamoDB 暗号化クライアントにはMetaStore、設定やカスタマイズが可能な安全な実装が含まれています。
A MetaStoreは、Wrapped CMP が必要とするラップキー、アンラップキー、および署名キーで構成された Wrapped CMP を作成して返すプロバイダーストアです。Wrapped CMPは常にアイテムごとに一意のアイテム暗号化キーを生成するので、MetaStore Aは最新のプロバイダーにとって安全なオプションです。項目暗号化キーと署名キーを保護するラップキーのみが再利用されます。
次の図は、MetaStoreのコンポーネントと、最新プロバイダとの相互作用を示しています。

はラップされた CMP MetaStore を生成し、内部の DynamoDB テーブルに(暗号化された形式で)保存します。パーティションキーは、最新プロバイダーマテリアルの名前であり、ソートキーはそのバージョン番号です。テーブル内のマテリアルは、項目エンクリプタや内部暗号化マテリアルプロバイダー (CMP) など、内部 DynamoDB 暗号化クライアントによって保護されています。
内部 CMP には、ダイレクト KMS プロバイダーMetaStore、提供した暗号化マテリアルを含むラップ CMP、互換性のあるカスタム CMP など、あらゆるタイプの内部 CMP を使用できます。の内部 CMP がダイレクト KMS プロバイダの場合、再利用可能なラッピングキーと署名キーは AWS KMS keyin AWS Key Management Service() で保護されます。MetaStore AWS KMSは、内部テーブルに新しい CMP AWS KMS バージョンを追加するたびに、または内部テーブルから CMP MetaStore バージョンを取得するたびに呼び出されます。
time-to-live値を設定する
作成した最新のプロバイダーごとに time-to-live (TTL) 値を設定できます。一般に、アプリケーションで実用的な最も低い TTL 値を使用します。
TTL 値の使用は、最新プロバイダーの CachingMostRecentProvider
記号で変更されます。
注記
最新プロバイダーの MostRecentProvider
記号は、DynamoDB 暗号化クライアントのサポートされている古いバージョンでは廃止されており、バージョン 2.0.0 から除去されています。これは、CachingMostRecentProvider
記号に置き換えられています。可能な限り早急にコードを更新することをお勧めします。詳細については、「最新プロバイダーの更新」を参照してください。
CachingMostRecentProvider
-
CachingMostRecentProvider
は、以下の 2 つの異なる方法で TTL 値を使用します。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 を使用します。新しいバージョンをチェックする頻度は、最新プロバイダーの構成時に設定した time-to-live(TTL) 値によって決まります。
TTL が期限切れになると、最新プロバイダーはプロバイダーストアで新しいバージョンの CMP をチェックします。新しいバージョンを使用できる場合、最新プロバイダーはそれを取得し、キャッシュ内の CMP を置き換えます。プロバイダーストアに新しいバージョンがあることが検出されるまで、この CMP とその暗号化マテリアルが使用されます。
最新プロバイダーの新しいバージョンの CMP を作成するようにプロバイダーストアに指示するには、プロバイダーストアの新規プロバイダーの作成オペレーション作を、最新プロバイダーのマテリアル名で呼び出します。プロバイダーストアは新しい CMP を作成し、暗号化されたコピーをより大きなバージョン番号で内部ストレージに保存します。(CMP を返しますが、破棄することもできます。) その結果、次に最新プロバイダーがプロバイダーストアにその CMP の最大バージョン番号を問い合わせるときに、最新プロバイダーは新しいより大きなバージョン番号を取得し、それをストアに対する後続のリクエストで使用して、CMP の新しいバージョンが作成されたかどうかを確認します。
時間、処理された項目または属性の数、またはアプリケーションに合ったその他のメトリクスに基づいて、新しいプロバイダー作成コールをスケジュールできます。
暗号化マテリアルを取得する
最新プロバイダーは、この図に示す次のプロセスを使用して、項目エンクリプタに返す暗号化マテリアルを取得します。出力は、プロバイダーストアが返す CMP のタイプによって異なります。最新のプロバイダーは、DynamoDB MetaStore 暗号化クライアントに含まれているものを含め、互換性のある任意のプロバイダーストアを使用できます。

CachingMostRecentProviderシンボルを使用して最新のプロバイダーを作成する場合、プロバイダーストア、最新のプロバイダーの名前、および time-to-live(TTL) 値を指定します。オプションで、キャッシュ内に存在できる暗号化マテリアルの最大数を決定するキャッシュサイズを指定することもできます。
項目エンクリプタが最新プロバイダーに暗号化マテリアルを要求すると、最新プロバイダーは、その CMP の最新バージョンのキャッシュの検索を開始します。
-
キャッシュ内で最新バージョンの CMP を検出し、CMP が TTL 値を超過していない場合、最新プロバイダーは CMP を使用して暗号化マテリアルを生成します。次に、暗号化マテリアルを項目エンクリプタに返します。このオペレーションでは、プロバイダーストアへの呼び出しは必要ありません。
-
CMP の最新バージョンがキャッシュ内に存在しない場合、またはキャッシュ内に存在していても TTL 値を超過している場合、最新プロバイダーはそのプロバイダーストアから CMP をリクエストします。リクエストには、最新プロバイダーのマテリアル名と、既知の最大のバージョン番号が含まれています。
-
プロバイダーストアは、永続的ストレージから CMP を返します。プロバイダーストアがの場合MetaStore、最新プロバイダーのマテリアル名をパーティションキーとして、バージョン番号をソートキーとして使用して、内部の DynamoDB テーブルから暗号化された Wrapped CMP を取得します。は、内部のアイテム暗号化機能と内部 CMP MetaStore を使用してラップされた CMP を復号化します。次に、プレーンテキスト CMP を最新プロバイダーに返します。内部 CMP が Direct KMS Provider の場合、このステップには AWS Key Management Service (AWS KMS) コールが含まれます。
-
CMP は、
amzn-ddb-meta-id
フィールドを実際のマテリアル説明に追加します。その値は、内部テーブルの CMP のマテリアル名とバージョンです。プロバイダーストアは CMP を最新プロバイダーに返します。 -
最新プロバイダーは CMP をメモリにキャッシュします。
-
最新プロバイダーは CMP を使用して暗号化マテリアルを生成します。次に、暗号化マテリアルを項目エンクリプタに返します。
-
復号マテリアルを取得する
項目エンクリプタが最新プロバイダーに復号マテリアルを要求すると、最新プロバイダーは以下のプロセスを使用して、それらを取得し返します。
-
最新プロバイダーは、項目を暗号化するために使用された暗号化マテリアルのバージョン番号をプロバイダーストアに問い合わせます。項目のマテリアル説明属性から実際のマテリアル説明を渡します。
-
プロバイダーストアは、実際のマテリアル説明の
amzn-ddb-meta-id
フィールドから暗号化 CMP バージョン番号を取得し、最新プロバイダーに返します。 -
最新プロバイダーは、項目の暗号化と署名に使用された CMP のバージョンをキャッシュ内で検索します。
-
一致するバージョンの CMP がキャッシュにあり、CMP が time-to-live(TTL) 値を超えていないことが判明した場合、最新プロバイダーは CMP を使用して復号化資料を生成します。次に、復号マテリアルを項目エンクリプタに返します。このオペレーションでは、プロバイダーストアまたは他の CMP への呼び出しは必要ありません。
-
CMP の一致するバージョンがキャッシュ内に存在しない場合、またはキャッシュされた AWS KMS key が TTL 値を超過している場合、最新プロバイダーはそのプロバイダーストアから CMP をリクエストします。リクエストには、マテリアル名および暗号化 CMP バージョン番号が送信されます。
-
プロバイダーストアは、最新プロバイダー名をパーティションキーとして使用し、バージョン番号をソートキーとして使用して、CMP の永続的ストレージを検索します。
-
名前とバージョン番号が永続的ストレージにない場合、プロバイダーストアは例外をスローします。CMP を生成するためにプロバイダーストアを使用した場合、意図的に削除されていない限り、CMP は永続的ストレージに保存する必要があります。
-
一致する名前とバージョン番号を持つ CMP がプロバイダーストアの永続的ストレージにある場合、プロバイダーストアは指定された CMP を最新プロバイダーに返します。
プロバイダーストアがの場合MetaStore、DynamoDB テーブルから暗号化された CMP を取得します。次に、内部 CMP の暗号化マテリアルを使用して、CMP を最新プロバイダーに返す前に暗号化された CMP を復号します。内部 CMP が Direct KMS Provider の場合、このステップには AWS Key Management Service (AWS KMS) コールが含まれます。
-
-
最新プロバイダーは CMP をメモリにキャッシュします。
-
最新プロバイダーは CMP を使用して復号マテリアルを生成します。次に、復号マテリアルを項目エンクリプタに返します。
-
最新プロバイダーの更新
最新プロバイダーの記号が MostRecentProvider
から CachingMostRecentProvider
に変更されています。
注記
最新プロバイダーを表す MostRecentProvider
記号は、両方の言語実装で、Java 用 DynamoDB 暗号化クライアントバージョン 1.15、および Python 用 DynamoDB 暗号化クライアントバージョン 1.3 では廃止され、DynamoDB 暗号化クライアントバージョン 2.0.0 では除去されています。代わりに、CachingMostRecentProvider
を使用してください。
CachingMostRecentProvider
では、以下の変更が実装されます。
-
は、メモリ内の時間が設定された time-to-live(TTL)値を超えると、
CachingMostRecentProvider
定期的に暗号化マテリアルをメモリから削除します。MostRecentProvider
は、プロセスの有効期間の間、メモリに暗号化マテリアルを保存する場合があります。その結果、最新プロバイダーは認証の変更を認識しない可能性があります。暗号化キーを使用するための呼び出し元のアクセス許可が取り消された後に、暗号化キーを使用する場合があります。この新しいバージョンにアップデートできない場合、キャッシュで
clear()
メソッドを定期的に呼び出すことで同様の効果を得られます。このメソッドは、キャッシュの内容を手動でフラッシュし、最新プロバイダーが新しい CMP と新しい暗号化マテリアルを要求するように求めます。 -
また、
CachingMostRecentProvider
にキャッシュサイズの設定を含めて、キャッシュに対するより詳細な制御を行うこともできます。
CachingMostRecentProvider
を更新するには、コード内の記号名を変更する必要があります。その他の点ではすべて、CachingMostRecentProvider
には MostRecentProvider
との完全な下位互換性があります。テーブル項目を再暗号化する必要はありません。
ただし、CachingMostRecentProvider
による、基盤となる主要インフラストラクチャへの呼び出しが増えます。各 time-to-live (TTL) 間隔で少なくとも 1 回はプロバイダーストアを呼び出します。多数のアクティブな CMP を持つアプリケーション(頻繁なローテーションによる)、または大規模なフリートを持つアプリケーションは、この変更の影響を受ける可能性が最も高くなります。
更新されたコードをリリースする前に、コードを徹底的にテストして、頻繁な呼び出しによってアプリケーションが損なわれたり、プロバイダーが依存するサービス (AWS Key Management Service (AWS KMS) や Amazon DynamoDB など) によってスロットリングが引き起こされたりしないように確認してください。パフォーマンスの問題を軽減するには、CachingMostRecentProvider
確認したパフォーマンス特性に基づいてキャッシュサイズとを調整します。time-to-liveガイダンスについては、「time-to-live値を設定する」を参照してください。