翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Java 用 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 用 DynamoDB 暗号化クライアントを使用して、アプリケーションの DynamoDB テーブル項目を保護する方法について説明します。その他の例 (および独自の例を提供) は、GitHub の aws-database-encryption-sdk-dynamodb
DynamoDBEncryptor の使用
この例は、下位レベルの DynamoDBEncryptor
では、互換性のある暗号化マテリアルプロバイダー (CMP) を使用できますDynamoDBEncryptor。
完全なコードサンプルの参照: AwsKmsEncryptedItem.java
- ステップ 1: Direct KMS プロバイダーを作成する
-
指定されたリージョンで AWS KMS クライアントのインスタンスを作成します。次に、クライアントインスタンスを使用して、任意の AWS KMS keyで Direct KMS プロバイダーのインスタンスを作成します。
この例では、Amazon リソースネーム (ARN) を使用して を識別しますが AWS KMS key、任意の有効なキー識別子を使用できます。
final String keyArn = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; final String region = "us-west-2"; final KmsClient kms = KmsClient.builder().region(Region.of(region)).build(); final DirectKmsMaterialProvider cmp = new DirectKmsMaterialProvider(kms,keyArn); - ステップ 2: 項目を作成する
-
この例では、サンプルテーブル項目を表す
recordHashMap を定義します。final String partitionKeyName = "partition_attribute"; final String sortKeyName = "sort_attribute"; final Map<String, AttributeValue> record = new HashMap<>(); record.put(partitionKeyName, new AttributeValue().withS("value1")); record.put(sortKeyName, new AttributeValue().withN("55")); record.put("example", new AttributeValue().withS("data")); record.put("numbers", new AttributeValue().withN("99")); record.put("binary", new AttributeValue().withB(ByteBuffer.wrap(new byte[]{0x00, 0x01, 0x02}))); record.put("test", new AttributeValue().withS("test-value")); - ステップ 3: DynamoDBEncryptor を作成する
-
Direct KMS プロバイダーを使用して
DynamoDBEncryptorのインスタンスを作成します。final DynamoDBEncryptor encryptor = DynamoDBEncryptor.getInstance(cmp); - ステップ 4: DynamoDB 暗号化コンテキストを作成する
-
DynamoDB 暗号化コンテキストには、テーブル構造に関する情報と、暗号化および署名の方法が含まれます。
final String tableName = "testTable"; final EncryptionContext encryptionContext = new EncryptionContext.Builder() .withTableName(tableName) .withHashKeyName(partitionKeyName) .withRangeKeyName(sortKeyName) .build(); - ステップ 5: 属性アクションオブジェクトを作成する
-
属性アクションでは、暗号化されて署名された項目の属性値、署名のみされた項目の属性値、暗号化も署名もされていない項目の属性値を指定します。
Java で属性アクションを指定するには、属性名と
EncryptionFlags値のペアの HashMap を作成します。たとえば、以下の Java コードでは、
actions項目のすべての属性を暗号化して署名するrecordHashMap を作成します。ただし、署名済みだが暗号化されていないパーティションキーおよびソートキー属性、暗号化されていない未署名の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: // fall through to the next case case sortKeyName: // Partition and sort keys must not be encrypted, but should be signed actions.put(attributeName, signOnly); break; case "test": // Neither encrypted nor signed break; default: // Encrypt and sign all other attributes actions.put(attributeName, encryptAndSign); break; } } - ステップ 6: 項目を暗号化および署名する
-
テーブル項目を暗号化して署名するには、
encryptRecordのインスタンスでDynamoDBEncryptorメソッドを呼び出します。テーブル項目 (record)、属性アクション (actions)、暗号化テキスト (encryptionContext) を指定します。final Map<String, AttributeValue> encrypted_record = encryptor.encryptRecord(record, actions, encryptionContext); - ステップ 7: DynamoDB テーブルに項目を入力する
-
最後に、暗号化された署名済みの項目を DynamoDB テーブルに入力します。
final DynamoDbClient ddb = DynamoDbClient.builder().region(Region.of(region)).build(); ddb.putItem(tableName, encrypted_record);