翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Java 用 Amazon DynamoDB 暗号化クライアントの使用方法
注記
クライアント側の暗号化ライブラリの名前が 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 バージョンのサポート」を参照してください。
このトピックでは、Java での Amazon DynamoDB 暗号化クライアントの機能の一部について説明します。他のプログラミング言語には実装されていない機能も含まれます。
DynamoDB 暗号化クライアントを使用したプログラミングの詳細については、Java の例、GitHub の aws-dynamodb-encryption-java repository にある例
項目エンクリプタ: DynamoDBEncryptor
Java の DynamoDB 暗号化クライアントには、下位レベルの DynamoDBEncryptor
Java の属性アクション
属性アクションでは、暗号化されて署名された属性値、署名のみされた属性値、無視される属性値を指定します。
重要
属性アクションを使用してテーブル項目を暗号化した後、データモデルから属性を追加または削除すると、署名の検証エラーが発生し、データの復号ができなくなることがあります。詳細な説明については、「データモデルの変更」を参照してください。
DynamoDBEncryptorHashMap オブジェクトを作成します。
属性アクションの有効な値は、列挙型の EncryptionFlags で定義されています。ENCRYPT と SIGN を一緒に使用したり、SIGN を単独で使用したりできます。また、両方除外することもできます。ただし、ENCRYPT を単独で使用すると、DynamoDB 暗号化クライアントはエラーをスローします。未署名の属性を暗号化することはできません。
ENCRYPT SIGN
警告
プライマリキー属性を暗号化しないでください。DynamoDB でテーブル全体のスキャンを実行せずに項目を見つけられるように、プレーンテキストの状態を維持する必要があります。
暗号化コンテキストでプライマリキーを指定し、いずれかのプライマリキー属性の属性アクションで ENCRYPT を指定した場合、DynamoDB 暗号化クライアントは例外をスローします。
たとえば、次の Java コードは、record 項目内のすべての属性を暗号化および署名する actions HashMap を作成します。例外は、署名されているが暗号化されていないパーティションキー属性とソートキー属性、および署名または暗号化されていない test 属性です。
final EnumSet<EncryptionFlags> signOnly = EnumSet.of(EncryptionFlags.SIGN); final EnumSet<EncryptionFlags> encryptAndSign = EnumSet.of(EncryptionFlags.ENCRYPT, EncryptionFlags.SIGN); final Map<String, Set<EncryptionFlags>> actions = new HashMap<>(); for (final String attributeName : record.keySet()) { switch (attributeName) { case partitionKeyName: // no break; falls through to next case case sortKeyName: // Partition and sort keys must not be encrypted, but should be signed actions.put(attributeName, signOnly); break; case "test": // Don't encrypt or sign break; default: // Encrypt and sign everything else actions.put(attributeName, encryptAndSign); break; } }
その後、DynamoDBEncryptor の encryptRecordattributeFlags パラメータの値としてマップを指定します。たとえば、この encryptRecord の呼び出しでは、actions マップが使用されます。
// Encrypt the plaintext record final Map<String, AttributeValue> encrypted_record = encryptor.encryptRecord(record, actions, encryptionContext);
テーブル名の上書き
DynamoDB 暗号化クライアントでは、DynamoDB テーブルの名前は、暗号化メソッドおよび復号メソッドに渡される DynamoDB 暗号化コンテキストの要素です。テーブル項目を暗号化または署名すると、テーブル名を含む DynamoDB 暗号化コンテキストが暗号化テキストに暗号でバインドされます。復号メソッドに渡される DynamoDB 暗号化コンテキストが、暗号化メソッドに渡された DynamoDB 暗号化コンテキストと一致しない場合、復号オペレーションは失敗します。
テーブルをバックアップする場合や、ポイントインタイムリカバリを実行する場合など、テーブルの名前が変更されることがあります。これらの項目の署名を復号または検証する際、元のテーブル名を含む、項目の暗号化と署名に使用されたのと同じ DynamoDB 暗号化コンテキストを渡す必要があります。現在のテーブル名は必要ありません。
DynamoDBEncryptor を使用する場合、DynamoDB 暗号化コンテキストを手動で組み立てます。したがって、 を使用している場合は、テーブル名オーバーライド演算子を使用しないでくださいDynamoDBEncryptor。代わりに、元のテーブル名で暗号化コンテキストを作成し、復号メソッドに送信します。