翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS データベース暗号化の設定 SDK
クライアント側の暗号化ライブラリの名前が AWS データベース暗号化 に変更されましたSDK。このデベロッパーガイドでは、引き続き DynamoDB Encryption Client に関する情報を提供します。 |
AWS Database Encryption SDKは使いやすいように設計されています。 AWS Database Encryption SDK にはいくつかの設定オプションがありますが、デフォルト値は、ほとんどのアプリケーションで実用的で安全になるように慎重に選択されています。ただし、パフォーマンスを改善するために構成を調整したり、設計にカスタム機能を追加したりしたい場合があります。
プログラミング言語の選択
DynamoDB SDKの AWS データベース暗号化は、複数のプログラミング言語で利用できます。言語の実装は、完全に相互運用可能で、同じ機能を提供するように設計されていますが、異なる方法で実装される可能性があります。通常は、アプリケーションと互換性のあるライブラリを使用します。
ラッピングキーの選択
AWS Database Encryption は、各フィールドを暗号化するための一意の対称データキーSDKを生成します。データキーを設定、管理、または使用する必要はありません。 AWS Database Encryption SDKがそれを行います。
ただし、各データキーを暗号化するには、1 つ以上のラッピングキーを選択する必要があります。 AWS データベース暗号化は、 AWS Key Management Service (AWS KMS) 対称暗号化KMSキーと非対称RSAKMSキーSDKをサポートしています。またAES、異なるサイズで提供する対称キーとRSA非対称キーもサポートしています。ラッピングキーの安全性と耐久性はお客様の責任です。そのため、ハードウェアセキュリティモジュールまたは などのキーインフラストラクチャサービスで暗号化キーを使用することをお勧めします AWS KMS。
暗号化と復号のためにラッピングキーを指定するには、キーリングを使用します。使用するキーリングのタイプに応じて、1 つのラッピングキー、または同じタイプもしくは異なるタイプの複数のラッピングキーを指定できます。複数のラッピングキーを使用してデータキーをラップする場合、各ラッピングキーは同じデータキーのコピーを暗号化します。暗号化されたデータキー (ラッピングキーごとに 1 つ) は、暗号化されたフィールドと一緒に格納されるマテリアルの説明に格納されます。データを復号するには、 AWS データベース暗号化はまずラッピングキーのいずれかを使用して暗号化されたデータキーを復号SDKする必要があります。
可能な限り、いずれかの AWS KMS キーリングを使用することをお勧めします。 AWS Database Encryption SDKは、 AWS KMS キーリングとAWS KMS 階層キーリング を提供し、 への呼び出しの数を減らします AWS KMS。キーリング AWS KMS key で を指定するには、サポートされている AWS KMS キー識別子を使用します。 AWS KMS 階層キーリングを使用する場合は、キー を指定する必要がありますARN。 AWS KMS キーのキー識別子の詳細については、AWS Key Management Service 「 デベロッパーガイド」の「キー識別子」を参照してください。
-
AWS KMS キーリングで暗号化する場合、対称暗号化キーに有効なKMSキー識別子 (キー ARN、エイリアス名、エイリアス ARN、またはキー ID) を指定できます。非対称RSAKMSキーを使用する場合は、キー を指定する必要がありますARN。
暗号化時にKMSキーARNのエイリアス名またはエイリアスを指定すると、 AWS データベース暗号化はそのエイリアスにARN現在関連付けられているキーSDKを保存します。エイリアスは保存されません。エイリアスを変更しても、データKMSキーの復号に使用されるキーには影響しません。
-
デフォルトでは、 AWS KMS キーリングはレコードを厳密なモードで復号します (特定のKMSキーを指定する)。復号 AWS KMS keys には キーを使用して ARNを識別する必要があります。
AWS KMS キーリングで暗号化すると、 AWS Database Encryption は ARNのキーを暗号化されたデータキーでマテリアル説明 AWS KMS key にSDK保存します。厳密なモードで復号する場合、 AWS データベース暗号化SDKは、ラッピングキーを使用して暗号化されたデータキーを復号しようとする前に、キーリングに同じキーARNが表示されることを確認します。別のキー識別子を使用する場合、識別子が同じキーを参照している場合でも AWS KMS key、 AWS データベース暗号化SDKは を認識または使用しません。
-
検出モードで復号する場合は、ラッピングキーを指定しません。まず、 AWS データベース暗号化は、マテリアル説明にARN保存されたキーを使用してレコードを復号SDKしようとします。これが機能しない場合、 AWS Database Encryption は、そのKMSキーを所有またはアクセスできるユーザーに関係なく、暗号化されたKMSキーを使用してレコードを復号 AWS KMS 化するようにSDK要求します。
キーリングでラッピングキーとして raw AESキーまたは raw キーRSAペアを指定するには、名前空間と名前を指定する必要があります。復号する際には、暗号化の際に使用した各 raw ラッピングキーとまったく同じ名前空間と名前を使用する必要があります。別の名前空間または名前を使用する場合、キーマテリアルが同じであっても、 AWS データベース暗号化はラッピングキーを認識または使用SDKしません。
検出フィルターの作成
KMS キーで暗号化されたデータを復号する場合、厳密なモードで復号化することがベストプラクティスです。つまり、使用するラッピングキーを指定したキーのみに制限します。ただし、必要に応じて、ラッピングキーを指定しない検出モードで復号することもできます。このモードでは、暗号化されたデータキーの所有者やアクセス権に関係なく、暗号化されたデータKMSキーを暗号化されたKMSキーを使用して復号 AWS KMS できます。
検出モードで復号化する必要がある場合は、常に検出フィルター を使用することをお勧めします。これにより、使用できるKMSキーは、指定された AWS アカウント およびパーティション 内のキーに制限されます。検出フィルターはオプションですが、ベストプラクティスです。
次の表を使用して、検出フィルターのパーティションの値を決定します。
リージョン | パーティション |
---|---|
AWS リージョン | aws |
中国リージョン | aws-cn |
AWS GovCloud (US) Regions | aws-us-gov |
次の例は、検出フィルターを作成する方法を示しています。コードを使用する前に、サンプル値を AWS アカウント および パーティションの有効な値に置き換えます。
マルチテナンシーデータベースの使用
AWS Database Encryption を使用するとSDK、各テナントを個別の暗号化マテリアルで分離することで、共有スキーマを持つデータベースのクライアント側の暗号化を設定できます。マルチテナンシーデータベースを検討する場合は、セキュリティ要件と、マルチテナンシーがそれらのセキュリティ要件にどのように影響し得るかを確認してください。例えば、マルチテナントデータベースを使用すると、 AWS データベース暗号化をSDK別のサーバー側の暗号化ソリューションと組み合わせる能力に影響する可能性があります。
データベース内で複数のユーザーが暗号化オペレーションを実行している場合は、いずれかの AWS KMS キーリングを使用して、暗号化オペレーションで使用する個別のキーを各ユーザーに指定できます。マルチテナンシーのクライアント側の暗号化ソリューション用のデータキーの管理は複雑になる場合があります。可能な場合は常に、データをテナンシーごとに整理することをお勧めします。テナンシーがプライマリキーの値 (Amazon DynamoDB テーブルのパーティションキーなど) によって識別される場合、キーの管理は簡単になります。
AWS KMS キーリングを使用して、個別の AWS KMS キーリングと を使用して各テナントを分離できます AWS KMS keys。テナントあたりの呼び出し量 AWS KMS に基づいて、 AWS KMS 階層キーリングを使用して への呼び出しを最小限に抑えることができます AWS KMS。AWS KMS 階層キーリングは、Amazon DynamoDB テーブルに保持されている AWS KMS 保護されたブランチキーを使用して AWS KMS 呼び出しの数を減らし、暗号化および復号操作で使用されるブランチキーマテリアルをローカルにキャッシュする暗号化マテリアルキャッシュソリューションです。データベースに検索可能な暗号化を実装するには、 AWS KMS 階層キーリングを使用する必要があります。
署名付きビーコンの作成
AWS Database Encryption SDKは、標準のビーコンと複合ビーコンを使用して、クエリされたデータベース全体を復号することなく、暗号化されたレコードを検索できる検索可能な暗号化ソリューションを提供します。ただし、 AWS データベース暗号化は、プレーンテキスト署名フィールドから完全に設定できる署名付きビーコンSDKもサポートしています。署名付きビーコンは、 SIGN_ONLY
および SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
フィールドで複雑なクエリをインデックス化して実行する複合ビーコンの一種です。
例えば、マルチテナンシーデータベースがある場合、特定のテナンシーのキーによって暗号化されたレコードがあるかどうかを確認するために、データベースをクエリできるようにする署名付きビーコンを作成することをお勧めします。詳細については、「マルチテナンシーデータベース内のビーコンのクエリ」を参照してください。
署名付きビーコンを作成するには、 AWS KMS 階層キーリングを使用する必要があります。
署名付きビーコンを設定するには、次の値を指定します。
署名付きパートは、ローカルまたはグローバルに定義されたリストで定義できます。可能な限り、ビーコンバージョンのグローバルリストで署名付きパートを定義することをお勧めします。署名付きパートをグローバルに定義することで、各パートを 1 回定義し、複数の複合ビーコン設定でそのパートを再利用できます。署名付きパートを 1 回だけ使用する場合は、署名付きビーコン設定のローカルリストで定義できます。コンストラクタリスト のローカルパートとグローバルパートの両方を参照できます。
署名付きパートリストをグローバルに定義する場合は、署名付きビーコンがビーコン設定のフィールドをアセンブルできる可能性のあるすべての方法を識別するコンストラクターパートのリストを提供する必要があります。
注記
署名付きパートリストをグローバルに定義するには、 AWS データベース暗号化 のバージョン 3.2 以降を使用する必要がありますSDK。グローバルに新しいパートを定義する前に、すべてのリーダーに新しいバージョンをデプロイします。
署名付き部品リストをグローバルに定義するために、既存のビーコン設定を更新することはできません。
- ビーコン名
-
ビーコンをクエリする際に使用する名前。
署名付きビーコンの名前は、暗号化されていないフィールドと同じ名前にすることはできません。2 つのビーコンを同じ名前にすることはできません。
- 分割文字
-
署名付きビーコンを設定する部分を分離するために使用される文字。
分割文字は、署名付きビーコンの構築元となるフィールドのプレーンテキストの値に出現することはできません。
- 署名付きの部分のリスト
-
署名付きビーコンに含まれる署名付きフィールドを識別します。
各部分には、名前、ソース、プレフィックスが含まれている必要があります。ソースは、パーツが識別する
SIGN_ONLY
またはSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
フィールドです。ソースは、フィールド名、またはネストされたフィールドの値を参照するインデックスである必要があります。パーツ名がソースを識別する場合、ソースを省略できます。 AWS Database Encryption SDKは自動的にその名前をソースとして使用します。可能な場合は常に、部分名としてソースを指定することをお勧めします。プレフィックスには任意の文字列を指定できますが、一意である必要があります。署名付きビーコン内の 2 つの署名付きの部分に同じプレフィックスを付けることはできません。複合ビーコンによって提供される部分と他の部分を区別する短い値を使用することをお勧めします。可能な限り、署名付きパートをグローバルに定義することをお勧めします。1 つの複合ビーコンでのみ使用する場合は、署名付きパートをローカルで定義することを検討できます。ローカルで定義されたパートには、グローバルに定義されたパートと同じプレフィックスまたは名前を付けることはできません。
- コンストラクタリスト (オプション)
-
署名付きの部分を署名付きビーコンによってアセンブルするさまざまな方法を定義するコンストラクターを識別します。
コンストラクタリストを指定しない場合、 AWS Database Encryption SDK は署名付きビーコンを次のデフォルトのコンストラクタでアセンブルします。
-
すべての署名付きの部分 (署名付きの部分のリストに追加された順)
-
すべての部分は必須です
- コンストラクタ
-
各コンストラクターは、署名付きビーコンをアセンブルする 1 つの方法を定義するコンストラクター部分の順序付きリストです。コンストラクター部分はリストに追加された順序で結合され、各部分は指定された分割文字で区切られます。
各コンストラクター部分は、署名付きの部分に名前を付け、その部分がコンストラクター内で必須であるか、またはオプションであるかを定義します。例えば、
Field1
、Field1.Field2
、およびField1.Field2.Field3
で署名付きビーコンをクエリする場合は、Field2
およびField3
をオプションとしてマークし、コンストラクターを 1 つ作成します。各コンストラクターには、少なくとも 1 つの必須部分が必要です。クエリで
BEGINS_WITH
演算子を使用できるように、各コンストラクターの最初の部分を必須にすることをお勧めします。コンストラクターは、必要な部分がすべてレコード内に存在する場合に成功します。新しいレコードを書き込む際に、署名付きビーコンはコンストラクターのリストを使用して、指定された値からビーコンをアセンブルできるかどうかを判断します。コンストラクターがコンストラクターのリストに追加された順序でビーコンのアセンブルを試み、成功した最初のコンストラクターを使用します。コンストラクターが成功しない場合、ビーコンはレコードに書き込まれません。
すべてのリーダーとライターは、クエリの結果が確実に正しくなるようにコンストラクターの同じ順序を指定する必要があります。
独自のコンストラクターのリストを指定するには、次の手順を使用します。
-
署名付きの部分ごとにコンストラクター部分を作成し、その部分が必須かどうかを定義します。
コンストラクターの部分の名前は、署名されたフィールドの名前である必要があります。
次の例は、1 つの署名付きフィールドのコンストラクターの部分を作成する方法を示しています。
-
ステップ 1 で作成したコンストラクター部分を使用して、署名付きビーコンをアセンブルする可能な方法ごとにコンストラクターを作成します。
例えば、
Field1.Field2.Field3
とField4.Field2.Field3
をクエリする場合は、2 つのコンストラクターを作成する必要があります。Field1
とField4
は、2 つの別個のコンストラクターで定義されているため、両方とも必須にすることができます。 -
ステップ 2 で作成したすべてのコンストラクターを含むコンストラクターのリストを作成します。
-
署名付きビーコンを作成する際に
constructorList
を指定します。
-