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
Rubriques
Utilisation de DynamoDBEncryptor
Cet exemple montre comment utiliser le chiffreur de bas niveau DynamoDBEncryptor
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
recordHashMap 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
DynamoDBEncryptoravec 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
EncryptionFlagsvaleur.Par exemple, le code Java suivant crée un
actionsHashMap 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
encryptRecordsur l'instance deDynamoDBEncryptor. 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);