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
Uso de DynamoDBEncryptor
Este ejemplo muestra cómo utilizar el DynamoDBEncryptor
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
recordHashMap 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
DynamoDBEncryptorcon 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
EncryptionFlagsvalor del atributo.Por ejemplo, el siguiente código de Java crea un código
actionsHashMap que cifra y firma todos los atributosrecorddel elemento, excepto los atributos de la clave de partición y la clave de clasificación, que están firmados, pero no cifrados, y eltestatributo, 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
encryptRecorden la instancia delDynamoDBEncryptor. 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);