Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Ejemplos de Java
Se cambió el nombre de nuestra biblioteca de cifrado del lado del cliente por el de SDK de cifrado de AWS bases de datos. En esta guía para desarrolladores, se sigue proporcionando información sobre el cliente de cifrado de DynamoDB. |
Los siguientes ejemplos muestran cómo utilizar la biblioteca de cifrado del cliente de Java para DynamoDB para proteger los elementos de tabla en su aplicación. Puedes encontrar más ejemplos (y añadir los tuyos propios) en los ejemplos de Java del repositorio
Los siguientes ejemplos muestran cómo configurar la biblioteca de cifrado del cliente de Java para DynamoDB en una tabla de Amazon DynamoDB nueva y sin rellenar. Si desea configurar las tablas de Amazon DynamoDB existentes para el cifrado del cliente, consulte. Agregar la versión 3.x a una tabla existente
Temas
Uso del cliente mejorado de DynamoDB
En el siguiente ejemplo, se muestra cómo utilizar el cliente mejorado de DynamoDB y el DynamoDbEncryptionInterceptor
con un conjunto de claves de AWS KMS para cifrar los elementos de la tabla de DynamoDB como parte de las llamadas a la API de DynamoDB.
Puede utilizar cualquier conjunto de claves compatible con el cliente mejorado de DynamoDB, pero le recomendamos que utilice uno de los anillos de AWS KMS claves siempre que sea posible.
nota
El cliente mejorado de DynamoDB no admite el cifrado con capacidad de búsqueda. Úselo DynamoDbEncryptionInterceptor
con el API de bajo nivel de DynamoDB para usar el cifrado con capacidad de búsqueda.
Consulte el ejemplo de código completo: .java EnhancedPutGetExample
- Paso 1: Crea el llavero AWS KMS
-
El siguiente ejemplo se utiliza
CreateAwsKmsMrkMultiKeyring
para crear un AWS KMS anillo de claves con una clave KMS de cifrado simétrico. El métodoCreateAwsKmsMrkMultiKeyring
garantiza que el conjunto de claves maneje correctamente las claves de una sola región y de múltiples regiones.final MaterialProviders matProv = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); final CreateAwsKmsMrkMultiKeyringInput keyringInput = CreateAwsKmsMrkMultiKeyringInput.builder() .generator(kmsKeyId) .build(); final IKeyring kmsKeyring = matProv.CreateAwsKmsMrkMultiKeyring(keyringInput);
- Paso 2: crear un esquema de tabla a partir de la clase de datos anotados
-
En el siguiente ejemplo, se utiliza la clase de datos anotada para crear la
TableSchema
.En este ejemplo, se supone que las acciones de clase y atributo de datos anotados se definieron mediante .java. SimpleClass
Para obtener más información sobre cómo anotar las acciones de los atributos, consulte Utilice una clase de datos anotada. final TableSchema<SimpleClass> schemaOnEncrypt = TableSchema.fromBean(SimpleClass.class);
- Paso 3: defina qué atributos se excluyen de las firmas
-
En el ejemplo siguiente, se supone que todos los atributos
DO_NOTHING
comparten el prefijo distinto ":
" y se utiliza el prefijo para definir los atributos no firmados permitidos. El cliente asume que cualquier nombre de atributo con el prefijo “:
” está excluido de las firmas. Para obtener más información, consulte Atributos sin signo permitidos.final String unsignedAttrPrefix = ":";
- Paso 4: crear el contexto de cifrado
-
En el siguiente ejemplo, se define un mapa
tableConfigs
que representa la configuración de cifrado de la tabla de DynamoDB.En este ejemplo, se especifica el nombre de la tabla de DynamoDB como nombre de la tabla lógica. Se recomienda encarecidamente especificar el nombre de la tabla de DynamoDB como nombre de la tabla lógica cuando defina por primera vez la configuración de cifrado. Para obtener más información, consulte Configuración de cifrado en el SDK de cifrado de bases de datos de AWS para DynamoDB.
nota
Para utilizar balizas firmadas o cifrado con capacidad de búsqueda, también debe incluirlos SearchConfigen la configuración de cifrado.
final Map<String, DynamoDbEnhancedTableEncryptionConfig> tableConfigs = new HashMap<>(); tableConfigs.put(ddbTableName, DynamoDbEnhancedTableEncryptionConfig.builder() .logicalTableName(ddbTableName) .keyring(kmsKeyring) .allowedUnsignedAttributePrefix(unsignedAttrPrefix) .schemaOnEncrypt(tableSchema) .build());
- Paso 5: Cree la
DynamoDbEncryptionInterceptor
-
En el siguiente ejemplo, se crea un nuevo
DynamoDbEncryptionInterceptor
con latableConfigs
del Paso 4.final DynamoDbEncryptionInterceptor interceptor = DynamoDbEnhancedClientEncryption.CreateDynamoDbEncryptionInterceptor( CreateDynamoDbEncryptionInterceptorInput.builder() .tableEncryptionConfigs(tableConfigs) .build() );
- Paso 6: Crear un nuevo cliente AWS SDK de DynamoDB
-
En el siguiente ejemplo, se crea un nuevo cliente AWS SDK de DynamoDB mediante
interceptor
el paso 5.final DynamoDbClient ddb = DynamoDbClient.builder() .overrideConfiguration( ClientOverrideConfiguration.builder() .addExecutionInterceptor(interceptor) .build()) .build();
- Paso 7: Crear el cliente mejorado de DynamoDB y crear una tabla
-
En el siguiente ejemplo, se crea el cliente mejorado DynamoDB mediante el cliente del SDK DynamoDB de AWS creado en el Paso 6 y se crea una tabla con la clase de datos anotados.
final DynamoDbEnhancedClient enhancedClient = DynamoDbEnhancedClient.builder() .dynamoDbClient(ddb) .build(); final DynamoDbTable<SimpleClass> table = enhancedClient.table(ddbTableName, tableSchema);
- Paso 8: Cifrar y guardar un elemento de la tabla
-
En el siguiente ejemplo, se coloca un elemento en la tabla de DynamoDB mediante el cliente mejorado de DynamoDB. El elemento se cifra y se firma en el lado del cliente antes de enviarlo a 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);
API de bajo nivel de DynamoDB
En el siguiente ejemplo, se muestra cómo utilizar la API de DynamoDB de bajo nivel con un conjunto de claves de AWS KMS para cifrar y firmar automáticamente los elementos del lado del cliente con las solicitudes de DynamoDB de PutItem
.
Puede utilizar cualquier llavero compatible, pero le recomendamos que utilice uno de los AWS KMS llaveros siempre que sea posible.
Consulta el ejemplo de código completo: .java BasicPutGetExample
- Paso 1: Crea el llavero AWS KMS
-
El siguiente ejemplo se utiliza
CreateAwsKmsMrkMultiKeyring
para crear un AWS KMS anillo de claves con una clave KMS de cifrado simétrico. El métodoCreateAwsKmsMrkMultiKeyring
garantiza que el conjunto de claves maneje correctamente las claves de una sola región y de múltiples regiones.final MaterialProviders matProv = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); final CreateAwsKmsMrkMultiKeyringInput keyringInput = CreateAwsKmsMrkMultiKeyringInput.builder() .generator(kmsKeyId) .build(); final IKeyring kmsKeyring = matProv.CreateAwsKmsMrkMultiKeyring(keyringInput);
- Paso 2: configurar las acciones de sus atributos
-
En el siguiente ejemplo, se define un mapa
attributeActionsOnEncrypt
que representa ejemplos de acciones de atributos para un elemento de la tabla.nota
En el siguiente ejemplo no se define ningún atributo como.
SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
Si especifica algúnSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
atributo, los atributos de partición y ordenación también deben serloSIGN_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);
- Paso 3: defina qué atributos se excluyen de las firmas
-
En el ejemplo siguiente, se supone que todos los atributos
DO_NOTHING
comparten el prefijo distinto ":
" y se utiliza el prefijo para definir los atributos no firmados permitidos. El cliente asume que cualquier nombre de atributo con el prefijo “:
” está excluido de las firmas. Para obtener más información, consulte Atributos sin signo permitidos.final String unsignedAttrPrefix = ":";
- Paso 4: definir la configuración de cifrado de la tabla de DynamoDB
-
El siguiente ejemplo define un mapa
tableConfigs
que representa la configuración de cifrado de esta tabla de DynamoDB.En este ejemplo, se especifica el nombre de la tabla de DynamoDB como nombre de la tabla lógica. Se recomienda encarecidamente especificar el nombre de la tabla de DynamoDB como nombre de la tabla lógica cuando defina por primera vez la configuración de cifrado. Para obtener más información, consulte Configuración de cifrado en el SDK de cifrado de bases de datos de AWS para DynamoDB.
nota
Para utilizar balizas firmadas o cifrado con capacidad de búsqueda, también debe incluir SearchConfig en la configuración de cifrado.
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);
- Paso 5: Crear el
DynamoDbEncryptionInterceptor
-
En el siguiente ejemplo, se crea el
DynamoDbEncryptionInterceptor
con latableConfigs
del Paso 4.DynamoDbEncryptionInterceptor interceptor = DynamoDbEncryptionInterceptor.builder() .config(DynamoDbTablesEncryptionConfig.builder() .tableEncryptionConfigs(tableConfigs) .build()) .build();
- Paso 6: Crear un nuevo cliente AWS SDK de DynamoDB
-
En el siguiente ejemplo, se crea un nuevo cliente AWS SDK de DynamoDB mediante
interceptor
el paso 5.final DynamoDbClient ddb = DynamoDbClient.builder() .overrideConfiguration( ClientOverrideConfiguration.builder() .addExecutionInterceptor(interceptor) .build()) .build();
- Paso 7: Cifrar y firmar un elemento de la tabla de DynamoDB
-
En el siguiente ejemplo, se define un mapa
item
que representa un elemento de tabla de ejemplo y se coloca el elemento en la tabla de DynamoDB. El elemento se cifra y se firma en el lado del cliente antes de enviarlo a 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);
Usando el nivel inferior DynamoDbItemEncryptor
En el siguiente ejemplo, se muestra cómo utilizar el nivel inferior DynamoDbItemEncryptor
con un conjunto de claves de AWS KMS para cifrar y firmar directamente los elementos de la tabla. DynamoDbItemEncryptor
No coloca el elemento en la tabla de DynamoDB.
Puede utilizar cualquier conjunto de claves compatible con el cliente mejorado de DynamoDB, pero le recomendamos que utilice uno de los anillos de AWS KMS claves siempre que sea posible.
nota
El nivel inferior DynamoDbItemEncryptor
no admite el cifrado con capacidad de búsqueda. Úselo DynamoDbEncryptionInterceptor
con el API de bajo nivel de DynamoDB para usar el cifrado con capacidad de búsqueda.
Consulte el ejemplo de código completo: .java ItemEncryptDecryptExample
- Paso 1: Crea el llavero AWS KMS
-
El siguiente ejemplo se utiliza
CreateAwsKmsMrkMultiKeyring
para crear un AWS KMS anillo de claves con una clave KMS de cifrado simétrico. El métodoCreateAwsKmsMrkMultiKeyring
garantiza que el conjunto de claves maneje correctamente las claves de una sola región y de múltiples regiones.final MaterialProviders matProv = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); final CreateAwsKmsMrkMultiKeyringInput keyringInput = CreateAwsKmsMrkMultiKeyringInput.builder() .generator(kmsKeyId) .build(); final IKeyring kmsKeyring = matProv.CreateAwsKmsMrkMultiKeyring(keyringInput);
- Paso 2: configurar las acciones de sus atributos
-
En el siguiente ejemplo, se define un mapa
attributeActionsOnEncrypt
que representa ejemplos de acciones de atributos para un elemento de la tabla.nota
En el siguiente ejemplo no se define ningún atributo como.
SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
Si especifica algúnSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
atributo, los atributos de partición y ordenación también deben serloSIGN_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);
- Paso 3: defina qué atributos se excluyen de las firmas
-
En el ejemplo siguiente, se supone que todos los atributos
DO_NOTHING
comparten el prefijo distinto ":
" y se utiliza el prefijo para definir los atributos no firmados permitidos. El cliente asume que cualquier nombre de atributo con el prefijo “:
” está excluido de las firmas. Para obtener más información, consulte Atributos sin signo permitidos.final String unsignedAttrPrefix = ":";
- Paso 4: defina la configuración de
DynamoDbItemEncryptor
-
En el siguiente ejemplo, se consulta la configuración de
DynamoDbItemEncryptor
.En este ejemplo, se especifica el nombre de la tabla de DynamoDB como nombre de la tabla lógica. Se recomienda encarecidamente especificar el nombre de la tabla de DynamoDB como nombre de la tabla lógica cuando defina por primera vez la configuración de cifrado. Para obtener más información, consulte Configuración de cifrado en el SDK de cifrado de bases de datos de AWS para DynamoDB.
final DynamoDbItemEncryptorConfig config = DynamoDbItemEncryptorConfig.builder() .logicalTableName(ddbTableName) .partitionKeyName("partition_key") .sortKeyName("sort_key") .attributeActionsOnEncrypt(attributeActionsOnEncrypt) .keyring(kmsKeyring) .allowedUnsignedAttributePrefix(unsignedAttrPrefix) .build();
- Paso 5: Crear el
DynamoDbItemEncryptor
-
En el siguiente ejemplo, se crea un nuevo
DynamoDbItemEncryptor
, con laconfig
del Paso 4.final DynamoDbItemEncryptor itemEncryptor = DynamoDbItemEncryptor.builder() .DynamoDbItemEncryptorConfig(config) .build();
- Paso 6: cifrar y firmar directamente un elemento de la tabla
-
En el siguiente ejemplo, se cifra y firma directamente un elemento mediante el
DynamoDbItemEncryptor
.DynamoDbItemEncryptor
no coloca el elemento en la tabla de 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();