View a markdown version of this page

Ejemplo de código para el cliente de cifrado de DynamoDB para Java - AWS SDK de cifrado de bases de datos

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.

Ejemplo de código para el cliente de cifrado de DynamoDB para Java

nota

Nuestra biblioteca de cifrado del cliente pasó a llamarse SDK de cifrado de bases de datos de AWS. En el siguiente tema, se presenta información sobre las versiones 1.x—2.x del cliente de cifrado de DynamoDB para Java y versiones 1.x—3.x del cliente de cifrado de DynamoDB para Python. Para obtener más información, consulte el SDK de cifrado de bases de datos de AWS para la compatibilidad de la versión de DynamoDB.

Los siguientes ejemplos muestran cómo utilizar el cliente de cifrado de DynamoDB para Java para proteger los elementos de tabla de DynamoDB en su aplicación. Puede encontrar más ejemplos (y añadir los suyos propios) en el directorio de ejemplos del repositorio aws-database-encryption-sdk-dynamodb en. GitHub

Uso de DynamoDBEncryptor

Este ejemplo muestra cómo utilizar el DynamoDBEncryptor de nivel inferior con el proveedor de KMS directo. El proveedor de Direct KMS genera y protege sus materiales criptográficos con un in () que usted especifique. AWS KMS key AWS Key Management Service AWS KMS

Puede utilizar cualquier proveedor de materiales criptográficos (CMP) compatible con. DynamoDBEncryptor

Consulte el ejemplo de código completo: AwsKmsEncryptedItem.java

Paso 1: crear el proveedor de KMS directo

Cree una instancia del AWS KMS cliente con la región especificada. A continuación, utilice la instancia de cliente para crear una instancia del proveedor de KMS directo con su AWS KMS key preferido.

En este ejemplo, se utiliza el nombre de recurso de Amazon (ARN) para identificar el AWS KMS key, pero se puede utilizar cualquier identificador clave válido.

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);
Paso 2: crear un elemento

En este ejemplo se define un elemento record HashMap que representa un ejemplo de una tabla.

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"));
Paso 3: crear un DynamoDBEncryptor

Cree una instancia del DynamoDBEncryptor con el proveedor de KMS directo.

final DynamoDBEncryptor encryptor = DynamoDBEncryptor.getInstance(cmp);
Paso 4: crear un contexto de cifrado de DynamoDB

El contexto de cifrado de DynamoDB contiene información acerca de la estructura de la tabla y cómo se cifra y se firma.

final String tableName = "testTable"; final EncryptionContext encryptionContext = new EncryptionContext.Builder() .withTableName(tableName) .withHashKeyName(partitionKeyName) .withRangeKeyName(sortKeyName) .build();
Paso 5: crear el objeto de acciones de atributo

Las acciones de atributo determinan qué atributos del elemento se cifran y se firman, cuáles solo se firman y cuáles no se cifran o firman.

En Java, para especificar las acciones de los atributos, se crea un par HashMap de pares de nombre y EncryptionFlags valor del atributo.

Por ejemplo, el siguiente código de Java crea un código actions HashMap que cifra y firma todos los atributos record del elemento, excepto los atributos de la clave de partición y la clave de clasificación, que están firmados, pero no cifrados, y el test atributo, que no está firmado ni cifrado.

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; } }
Paso 6: cifrar y firmar el elemento

Para cifrar y firmar el elemento de tabla, llame al método encryptRecord en la instancia del DynamoDBEncryptor. Especifique el elemento de tabla (record), las acciones de atributo (actions) y el contexto de cifrado (encryptionContext).

final Map<String, AttributeValue> encrypted_record = encryptor.encryptRecord(record, actions, encryptionContext);
Paso 7: colocar el elemento en la tabla de DynamoDB

Finalmente, coloque el elemento cifrado y firmado en la tabla de DynamoDB.

final DynamoDbClient ddb = DynamoDbClient.builder().region(Region.of(region)).build(); ddb.putItem(tableName, encrypted_record);