翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Java の例
クライアント側の暗号化ライブラリの名前が AWS Database Encryption に変更されましたSDK。このデベロッパーガイドでは、引き続き DynamoDB Encryption Client に関する情報を提供します。 |
次の例は、DynamoDB 用の Java クライアント側の暗号化ライブラリを使用して、アプリケーション内のテーブル項目を保護する方法を示しています。の aws-database-encryption-sdk-dynamodb リポジトリの Java の例には、さらに多くの例
次の例は、データが入力されていない新しい Amazon DynamoDB テーブルで DynamoDB 用の Java クライアント側の暗号化ライブラリを設定する方法を示しています。既存の Amazon DynamoDB テーブルをクライアント側の暗号化のために設定する場合は、「既存のテーブルにバージョン 3.x を追加する」を参照してください。
DynamoDB 拡張クライアントの使用
次の例は、DynamoDB Enhanced Client と を AWS KMS キーリングDynamoDbEncryptionInterceptor
とともに使用して、DynamoDB API呼び出しの一部として DynamoDB テーブル項目を暗号化する方法を示しています。
DynamoDB Enhanced Client では、サポートされている任意のキーリングを使用できますが、可能な限りいずれかの AWS KMS キーリングを使用することをお勧めします。
注記
DynamoDB Enhanced Client は、検索可能な暗号化をサポートしていません。検索可能な暗号化APIを使用するには、低レベルの DynamoDB DynamoDbEncryptionInterceptor
で を使用します。
完全なコードサンプル : .EnhancedPutGetExamplejava を参照してください。
- ステップ 1: AWS KMS キーリングを作成する
-
次の例では
CreateAwsKmsMrkMultiKeyring
、 を使用して対称暗号化 AWS KMS キーを持つ KMSキーリングを作成します。CreateAwsKmsMrkMultiKeyring
メソッドにより、キーリングは、単一リージョンのキーとマルチリージョンのキーの両方を確実に正しく処理します。final MaterialProviders matProv = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); final CreateAwsKmsMrkMultiKeyringInput keyringInput = CreateAwsKmsMrkMultiKeyringInput.builder() .generator(kmsKeyId) .build(); final IKeyring kmsKeyring = matProv.CreateAwsKmsMrkMultiKeyring(keyringInput);
- ステップ 2: アノテーション付きデータクラスからテーブルスキーマを作成する
-
次の例では、アノテーション付きデータクラスを使用して、
TableSchema
を作成します。この例では、アノテーション付きデータクラスと属性アクションが SimpleClass.java
を使用して定義されていることを前提としています。属性アクションにアノテーションを付ける方法のガイダンスについては、「アノテーション付きデータクラスを使用する」を参照してください。 注記
AWS Database Encryption SDKは、ネストされた属性 の注釈をサポートしていません。
final TableSchema<SimpleClass> schemaOnEncrypt = TableSchema.fromBean(SimpleClass.class);
- ステップ 3: 署名から除外する属性を定義する
-
次の例では、すべての
DO_NOTHING
属性が個別のプレフィックス「:
」を共有し、そのプレフィックスを使用して、許可される署名なし属性を定義すると想定しています。クライアントは、「:
」というプレフィックスが付いた属性名は署名から除外されると想定します。詳細については、「Allowed unsigned attributes」を参照してください。final String unsignedAttrPrefix = ":";
- ステップ 4: 暗号化設定を作成する
-
次の例では、DynamoDB テーブルの暗号化設定を表す
tableConfigs
マップを定義します。この例では、DynamoDB テーブル名を論理テーブル名として指定します。最初に暗号化設定を定義する際に、DynamoDB テーブル名を論理テーブル名として指定することを強くお勧めします。詳細については、「Database Encryption SDK for AWS DynamoDB の暗号化設定」を参照してください。
注記
検索可能な暗号化または署名付きビーコンを使用するには、暗号化設定に SearchConfig も含める必要があります。
final Map<String, DynamoDbEnhancedTableEncryptionConfig> tableConfigs = new HashMap<>(); tableConfigs.put(ddbTableName, DynamoDbEnhancedTableEncryptionConfig.builder() .logicalTableName(ddbTableName) .keyring(kmsKeyring) .allowedUnsignedAttributePrefix(unsignedAttrPrefix) .schemaOnEncrypt(tableSchema) .build());
- ステップ 5:
DynamoDbEncryptionInterceptor
を作成する -
次の例では、ステップ 4 の
tableConfigs
を使用して新しいDynamoDbEncryptionInterceptor
を作成します。final DynamoDbEncryptionInterceptor interceptor = DynamoDbEnhancedClientEncryption.CreateDynamoDbEncryptionInterceptor( CreateDynamoDbEncryptionInterceptorInput.builder() .tableEncryptionConfigs(tableConfigs) .build() );
- ステップ 6: 新しい AWS SDK DynamoDB クライアントを作成する
-
次の例では、ステップ 5
interceptor
の を使用して新しい AWS SDK DynamoDB クライアントを作成します。final DynamoDbClient ddb = DynamoDbClient.builder() .overrideConfiguration( ClientOverrideConfiguration.builder() .addExecutionInterceptor(interceptor) .build()) .build();
- ステップ 7: DynamoDB Enhanced Client を作成し、テーブルを作成する
-
次の例では、ステップ 6 で作成した DynamoDB AWS SDK クライアントを使用して DynamoDB Enhanced Client を作成し、注釈付きデータクラスを使用してテーブルを作成します。
final DynamoDbEnhancedClient enhancedClient = DynamoDbEnhancedClient.builder() .dynamoDbClient(ddb) .build(); final DynamoDbTable<SimpleClass> table = enhancedClient.table(ddbTableName, tableSchema);
- ステップ 8: テーブル項目を暗号化して署名する
-
次の例では、DynamoDB Enhanced Client を使用して項目を DynamoDB テーブルに配置します。項目は、DynamoDB に送信される前に、クライアント側で暗号化および署名されます。
final SimpleClass item = new SimpleClass(); item.setPartitionKey("EnhancedPutGetExample"); item.setSortKey(0); item.setAttribute1("encrypt and sign me!"); item.setAttribute2("sign me!"); item.setAttribute3("ignore me!"); table.putItem(item);
低レベル DynamoDB の使用 API
次の例は、 AWS KMS キーリングAPIで低レベルの DynamoDB を使用して、DynamoDB PutItem
リクエストでクライアント側で項目を自動的に暗号化して署名する方法を示しています。
サポートされている任意のキーリングを使用できますが、可能な限りいずれかの AWS KMS キーリングを使用することをお勧めします。
完全なコードサンプル : .BasicPutGetExamplejava を参照してください。
- ステップ 1: AWS KMS キーリングを作成する
-
次の例では
CreateAwsKmsMrkMultiKeyring
、 を使用して対称暗号化 AWS KMS キーを持つ KMSキーリングを作成します。CreateAwsKmsMrkMultiKeyring
メソッドにより、キーリングは、単一リージョンのキーとマルチリージョンのキーの両方を確実に正しく処理します。final MaterialProviders matProv = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); final CreateAwsKmsMrkMultiKeyringInput keyringInput = CreateAwsKmsMrkMultiKeyringInput.builder() .generator(kmsKeyId) .build(); final IKeyring kmsKeyring = matProv.CreateAwsKmsMrkMultiKeyring(keyringInput);
- ステップ 2: 属性アクションを設定する
-
次の例では、テーブル項目のサンプル属性アクションを表す
attributeActionsOnEncrypt
マップを定義します。注記
次の例では、属性を として定義していません
SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
。SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
属性を指定する場合、パーティション属性とソート属性も である必要がありますSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
。final Map<String, CryptoAction> attributeActionsOnEncrypt = new HashMap<>(); // The partition attribute must be SIGN_ONLY attributeActionsOnEncrypt.put("partition_key", CryptoAction.SIGN_ONLY); // The sort attribute must be SIGN_ONLY attributeActionsOnEncrypt.put("sort_key", CryptoAction.SIGN_ONLY); attributeActionsOnEncrypt.put("attribute1", CryptoAction.ENCRYPT_AND_SIGN); attributeActionsOnEncrypt.put("attribute2", CryptoAction.SIGN_ONLY); attributeActionsOnEncrypt.put(":attribute3", CryptoAction.DO_NOTHING);
- ステップ 3: 署名から除外する属性を定義する
-
次の例では、すべての
DO_NOTHING
属性が個別のプレフィックス「:
」を共有し、そのプレフィックスを使用して、許可される署名なし属性を定義すると想定しています。クライアントは、「:
」というプレフィックスが付いた属性名は署名から除外されると想定します。詳細については、「Allowed unsigned attributes」を参照してください。final String unsignedAttrPrefix = ":";
- ステップ 4: DynamoDB テーブルの暗号化設定を定義する
-
次の例では、この DynamoDB テーブルの暗号化設定を表す
tableConfigs
マップを定義します。この例では、DynamoDB テーブル名を論理テーブル名として指定します。最初に暗号化設定を定義する際に、DynamoDB テーブル名を論理テーブル名として指定することを強くお勧めします。詳細については、「Database Encryption SDK for AWS DynamoDB の暗号化設定」を参照してください。
注記
検索可能な暗号化または署名付きビーコンを使用するには、暗号化設定に SearchConfig も含める必要があります。
final Map<String, DynamoDbTableEncryptionConfig> tableConfigs = new HashMap<>(); final DynamoDbTableEncryptionConfig config = DynamoDbTableEncryptionConfig.builder() .logicalTableName(ddbTableName) .partitionKeyName("partition_key") .sortKeyName("sort_key") .attributeActionsOnEncrypt(attributeActionsOnEncrypt) .keyring(kmsKeyring) .allowedUnsignedAttributePrefix(unsignedAttrPrefix) .build(); tableConfigs.put(ddbTableName, config);
- ステップ 5:
DynamoDbEncryptionInterceptor
を作成する -
次の例では、ステップ 4 の
tableConfigs
を使用してDynamoDbEncryptionInterceptor
を作成します。DynamoDbEncryptionInterceptor interceptor = DynamoDbEncryptionInterceptor.builder() .config(DynamoDbTablesEncryptionConfig.builder() .tableEncryptionConfigs(tableConfigs) .build()) .build();
- ステップ 6: 新しい AWS SDK DynamoDB クライアントを作成する
-
次の例では、ステップ 5
interceptor
の を使用して新しい AWS SDK DynamoDB クライアントを作成します。final DynamoDbClient ddb = DynamoDbClient.builder() .overrideConfiguration( ClientOverrideConfiguration.builder() .addExecutionInterceptor(interceptor) .build()) .build();
- ステップ 7: DynamoDB テーブル項目を暗号化して署名する
-
次の例では、サンプルテーブル項目を表す
item
マップを定義し、その項目を DynamoDB テーブルに配置します。項目は、DynamoDB に送信される前に、クライアント側で暗号化および署名されます。final HashMap<String, AttributeValue> item = new HashMap<>(); item.put("partition_key", AttributeValue.builder().s("BasicPutGetExample").build()); item.put("sort_key", AttributeValue.builder().n("0").build()); item.put("attribute1", AttributeValue.builder().s("encrypt and sign me!").build()); item.put("attribute2", AttributeValue.builder().s("sign me!").build()); item.put(":attribute3", AttributeValue.builder().s("ignore me!").build()); final PutItemRequest putRequest = PutItemRequest.builder() .tableName(ddbTableName) .item(item) .build(); final PutItemResponse putResponse = ddb.putItem(putRequest);
下位レベルの使用 DynamoDbItemEncryptor
次の例は、下位レベルの DynamoDbItemEncryptor
を AWS KMS キーリングとともに使用して、テーブル項目を直接暗号化して署名する方法を示しています。DynamoDbItemEncryptor
は項目を DynamoDB テーブルに配置しません。
DynamoDB Enhanced Client では、サポートされている任意のキーリングを使用できますが、可能な限りいずれかの AWS KMS キーリングを使用することをお勧めします。
注記
下位レベルの DynamoDbItemEncryptor
は、検索可能な暗号化をサポートしていません。検索可能な暗号化APIを使用するには、低レベルの DynamoDB DynamoDbEncryptionInterceptor
で を使用します。
完全なコードサンプル : .ItemEncryptDecryptExamplejava を参照してください。
- ステップ 1: AWS KMS キーリングを作成する
-
次の例では
CreateAwsKmsMrkMultiKeyring
、 を使用して対称暗号化 AWS KMS キーを持つ KMSキーリングを作成します。CreateAwsKmsMrkMultiKeyring
メソッドにより、キーリングは、単一リージョンのキーとマルチリージョンのキーの両方を確実に正しく処理します。final MaterialProviders matProv = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); final CreateAwsKmsMrkMultiKeyringInput keyringInput = CreateAwsKmsMrkMultiKeyringInput.builder() .generator(kmsKeyId) .build(); final IKeyring kmsKeyring = matProv.CreateAwsKmsMrkMultiKeyring(keyringInput);
- ステップ 2: 属性アクションを設定する
-
次の例では、テーブル項目のサンプル属性アクションを表す
attributeActionsOnEncrypt
マップを定義します。注記
次の例では、属性を として定義していません
SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
。SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
属性を指定する場合、パーティション属性とソート属性も である必要がありますSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
。final Map<String, CryptoAction> attributeActionsOnEncrypt = new HashMap<>(); // The partition attribute must be SIGN_ONLY attributeActionsOnEncrypt.put("partition_key", CryptoAction.SIGN_ONLY); // The sort attribute must be SIGN_ONLY attributeActionsOnEncrypt.put("sort_key", CryptoAction.SIGN_ONLY); attributeActionsOnEncrypt.put("attribute1", CryptoAction.ENCRYPT_AND_SIGN); attributeActionsOnEncrypt.put("attribute2", CryptoAction.SIGN_ONLY); attributeActionsOnEncrypt.put(":attribute3", CryptoAction.DO_NOTHING);
- ステップ 3: 署名から除外する属性を定義する
-
次の例では、すべての
DO_NOTHING
属性が個別のプレフィックス「:
」を共有し、そのプレフィックスを使用して、許可される署名なし属性を定義すると想定しています。クライアントは、「:
」というプレフィックスが付いた属性名は署名から除外されると想定します。詳細については、「Allowed unsigned attributes」を参照してください。final String unsignedAttrPrefix = ":";
- ステップ 4:
DynamoDbItemEncryptor
設定を定義する -
次の例では、
DynamoDbItemEncryptor
の設定を定義します。この例では、DynamoDB テーブル名を論理テーブル名として指定します。最初に暗号化設定を定義する際に、DynamoDB テーブル名を論理テーブル名として指定することを強くお勧めします。詳細については、「Database Encryption SDK for AWS DynamoDB の暗号化設定」を参照してください。
final DynamoDbItemEncryptorConfig config = DynamoDbItemEncryptorConfig.builder() .logicalTableName(ddbTableName) .partitionKeyName("partition_key") .sortKeyName("sort_key") .attributeActionsOnEncrypt(attributeActionsOnEncrypt) .keyring(kmsKeyring) .allowedUnsignedAttributePrefix(unsignedAttrPrefix) .build();
- ステップ 5:
DynamoDbItemEncryptor
を作成する -
次の例では、ステップ 4 の
config
を使用して新しいDynamoDbItemEncryptor
を作成します。final DynamoDbItemEncryptor itemEncryptor = DynamoDbItemEncryptor.builder() .DynamoDbItemEncryptorConfig(config) .build();
- ステップ 6: テーブル項目を直接暗号化して署名する
-
次の例では、
DynamoDbItemEncryptor
を使用して項目を直接暗号化し、署名します。DynamoDbItemEncryptor
は項目を DynamoDB テーブルに配置しません。final Map<String, AttributeValue> originalItem = new HashMap<>(); originalItem.put("partition_key", AttributeValue.builder().s("ItemEncryptDecryptExample").build()); originalItem.put("sort_key", AttributeValue.builder().n("0").build()); originalItem.put("attribute1", AttributeValue.builder().s("encrypt and sign me!").build()); originalItem.put("attribute2", AttributeValue.builder().s("sign me!").build()); originalItem.put(":attribute3", AttributeValue.builder().s("ignore me!").build()); final Map<String, AttributeValue> encryptedItem = itemEncryptor.EncryptItem( EncryptItemInput.builder() .plaintextItem(originalItem) .build() ).encryptedItem();