View a markdown version of this page

Exemple de code pour le client de chiffrement DynamoDB pour Java - AWS SDK de chiffrement de base de données

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Exemple de code pour le client de chiffrement DynamoDB pour Java

Note

Notre bibliothèque de chiffrement côté client a été renommée AWS Database Encryption SDK. La rubrique suivante fournit des informations sur les versions 1. x —2. x du client de chiffrement DynamoDB pour Java et versions 1. x —3. x du client de chiffrement DynamoDB pour Python. Pour plus d'informations, consultez la section SDK AWS de chiffrement de base de données pour la prise en charge des versions DynamoDB.

Les exemples suivants montrent comment utiliser le client de chiffrement DynamoDB pour Java afin de protéger les éléments de table DynamoDB dans votre application. Vous pouvez trouver d'autres exemples (et apporter les vôtres) dans le répertoire des exemples du référentiel aws-database-encryption-sdk-dynamodb sur. GitHub

Utilisation de DynamoDBEncryptor

Cet exemple montre comment utiliser le chiffreur de bas niveau DynamoDBEncryptor avec le fournisseur KMS direct. Le fournisseur Direct KMS génère et protège son matériel cryptographique sous la forme d'un AWS KMS keyin AWS Key Management Service (AWS KMS) que vous spécifiez.

Vous pouvez utiliser n'importe quel fournisseur de matériel cryptographique (CMP) compatible avec le. DynamoDBEncryptor

Consultez l'exemple de code complet : AwsKmsEncryptedItem.java

Étape 1 : Créer le fournisseur KMS direct

Créez une instance du AWS KMS client avec la région spécifiée. Utilisez ensuite l'instance client pour créer une instance du fournisseur Direct KMS selon vos préférences AWS KMS key.

Cet exemple utilise l'Amazon Resource Name (ARN) pour identifier le AWS KMS key, mais vous pouvez utiliser n'importe quel identifiant de clé valide.

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);
Étape 2 : Créer un élément

Cet exemple définit un record HashMap qui représente un exemple d'élément de table.

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"));
Étape 3 : Créer un DynamoDBEncryptor

Créez une instance de DynamoDBEncryptor avec le fournisseur KMS direct.

final DynamoDBEncryptor encryptor = DynamoDBEncryptor.getInstance(cmp);
Étape 4 : Création d'un contexte de chiffrement DynamoDB

Le contexte de chiffrement DynamoDB contient des informations sur la structure de la table et sur la manière dont elle est chiffrée et signée.

final String tableName = "testTable"; final EncryptionContext encryptionContext = new EncryptionContext.Builder() .withTableName(tableName) .withHashKeyName(partitionKeyName) .withRangeKeyName(sortKeyName) .build();
Étape 5 : Créer l'objet actions d'attribut

Les actions d'attribut déterminent quels attributs de l'élément sont chiffrés et signés, lesquels sont uniquement signés et lesquels ne sont ni chiffrés ni signés.

En Java, pour spécifier des actions d'attribut, vous créez des paires HashMap de nom d'attribut et de EncryptionFlags valeur.

Par exemple, le code Java suivant crée un actions HashMap qui chiffre et signe tous les attributs de l'recordélément, à l'exception des attributs de clé de partition et de clé de tri, qui sont signés, mais non chiffrés, et de l'testattribut, qui n'est ni signé ni chiffré.

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; } }
Étape 6 : Chiffrer et signer l'élément

Pour chiffrer et signer l'élément de table, appelez la méthode encryptRecord sur l'instance de DynamoDBEncryptor. Spécifiez l'élément de table (record), les actions d'attribut (actions) et le contexte de chiffrement (encryptionContext).

final Map<String, AttributeValue> encrypted_record = encryptor.encryptRecord(record, actions, encryptionContext);
Étape 7 : Placer l'élément dans la table DynamoDB

Enfin, placez l'élément chiffré et signé dans la table DynamoDB.

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