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.
Exemples Java
Notre bibliothèque de chiffrement côté client a été renommée AWS Database Encryption. SDK Ce guide du développeur fournit toujours des informations sur le client de chiffrement DynamoDB. |
Les exemples suivants montrent comment utiliser la bibliothèque de chiffrement côté client Java pour DynamoDB afin de protéger les éléments de table de votre application. Vous pouvez trouver d'autres exemples (et apporter les vôtres) dans les exemples Java
Les exemples suivants montrent comment configurer la bibliothèque de chiffrement côté client Java pour DynamoDB dans une nouvelle table Amazon DynamoDB non remplie. Si vous souhaitez configurer vos tables Amazon DynamoDB existantes pour le chiffrement côté client, consultez. Ajouter la version 3.x à une table existante
Rubriques
Utilisation du client amélioré DynamoDB
L'exemple suivant montre comment utiliser le client DynamoDB amélioré DynamoDbEncryptionInterceptor
et AWS KMS un trousseau de clés pour chiffrer des éléments de table DynamoDB dans le cadre de vos appels DynamoDB. API
Vous pouvez utiliser n'importe quel trousseau de clés compatible avec le client DynamoDB amélioré, mais nous vous recommandons d'utiliser l'un des trousseaux de clés dans la mesure du AWS KMS possible.
Note
Le client DynamoDB Enhanced ne prend pas en charge le chiffrement consultable. Utilisez le DynamoDbEncryptionInterceptor
avec le API DynamoDB de bas niveau pour utiliser le chiffrement consultable.
Voir l'exemple de code complet : EnhancedPutGetExample.java
- Étape 1 : Création du AWS KMS porte-clés
-
L'exemple suivant permet de
CreateAwsKmsMrkMultiKeyring
créer un AWS KMS trousseau de clés avec une clé de chiffrement KMS symétrique. LaCreateAwsKmsMrkMultiKeyring
méthode garantit que le trousseau de clés gère correctement les clés à région unique et à régions multiples.final MaterialProviders matProv = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); final CreateAwsKmsMrkMultiKeyringInput keyringInput = CreateAwsKmsMrkMultiKeyringInput.builder() .generator(kmsKeyId) .build(); final IKeyring kmsKeyring = matProv.CreateAwsKmsMrkMultiKeyring(keyringInput);
- Étape 2 : Création d'un schéma de table à partir de la classe de données annotée
-
L'exemple suivant utilise la classe de données annotée pour créer le
TableSchema
.Cet exemple suppose que les actions de classe de données et d'attribut annotées ont été définies à l'aide du SimpleClassfichier .java.
Pour plus d'informations sur l'annotation des actions de vos attributs, consultezUtiliser une classe de données annotée. Note
Le chiffrement AWS de base de données SDK ne prend pas en charge les annotations sur les attributs imbriqués.
final TableSchema<SimpleClass> schemaOnEncrypt = TableSchema.fromBean(SimpleClass.class);
- Étape 3 : définir les attributs exclus des signatures
-
L'exemple suivant suppose que tous les
DO_NOTHING
attributs partagent le préfixe distinct:
« » et utilise le préfixe pour définir les attributs non signés autorisés. Le client suppose que tout nom d'attribut avec le préfixe:
« » est exclu des signatures. Pour de plus amples informations, veuillez consulter Allowed unsigned attributes.final String unsignedAttrPrefix = ":";
- Étape 4 : Création de la configuration de chiffrement
-
L'exemple suivant définit une
tableConfigs
carte qui représente la configuration de chiffrement de la table DynamoDB.Cet exemple indique le nom de la table DynamoDB comme nom de table logique. Nous vous recommandons vivement de spécifier le nom de votre table DynamoDB comme nom de table logique lorsque vous définissez votre configuration de chiffrement pour la première fois. Pour de plus amples informations, veuillez consulter Configuration du chiffrement dans le chiffrement de AWS base de données SDK pour DynamoDB.
Note
Pour utiliser le chiffrement consultable ou les balises signées, vous devez également les inclure SearchConfigdans votre configuration de chiffrement.
final Map<String, DynamoDbEnhancedTableEncryptionConfig> tableConfigs = new HashMap<>(); tableConfigs.put(ddbTableName, DynamoDbEnhancedTableEncryptionConfig.builder() .logicalTableName(ddbTableName) .keyring(kmsKeyring) .allowedUnsignedAttributePrefix(unsignedAttrPrefix) .schemaOnEncrypt(tableSchema) .build());
- Étape 5 : Crée le
DynamoDbEncryptionInterceptor
-
L'exemple suivant en crée un nouveau
DynamoDbEncryptionInterceptor
àtableConfigs
partir de l'étape 4.final DynamoDbEncryptionInterceptor interceptor = DynamoDbEnhancedClientEncryption.CreateDynamoDbEncryptionInterceptor( CreateDynamoDbEncryptionInterceptorInput.builder() .tableEncryptionConfigs(tableConfigs) .build() );
- Étape 6 : créer un nouveau client AWS SDK DynamoDB
-
L'exemple suivant crée un nouveau client AWS SDK DynamoDB à l'aide de
interceptor
l'étape 5.final DynamoDbClient ddb = DynamoDbClient.builder() .overrideConfiguration( ClientOverrideConfiguration.builder() .addExecutionInterceptor(interceptor) .build()) .build();
- Étape 7 : Création du client DynamoDB amélioré et création d'une table
-
L'exemple suivant crée le client DynamoDB amélioré à l'aide du client AWS SDK DynamoDB créé à l'étape 6 et crée une table à l'aide de la classe de données annotée.
final DynamoDbEnhancedClient enhancedClient = DynamoDbEnhancedClient.builder() .dynamoDbClient(ddb) .build(); final DynamoDbTable<SimpleClass> table = enhancedClient.table(ddbTableName, tableSchema);
- Étape 8 : Chiffrer et signer un élément du tableau
-
L'exemple suivant place un élément dans la table DynamoDB à l'aide du client DynamoDB amélioré. L'élément est chiffré et signé côté client avant d'être envoyé à 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);
Utilisation du DynamoDB de bas niveau API
L'exemple suivant montre comment utiliser le API DynamoDB de bas niveau avec AWS KMS un trousseau de clés pour chiffrer et signer automatiquement des éléments côté client avec vos demandes DynamoDB. PutItem
Vous pouvez utiliser n'importe quel porte-clés compatible, mais nous vous recommandons d'utiliser l'un des AWS KMS porte-clés dans la mesure du possible.
Voir l'exemple de code complet : BasicPutGetExample.java
- Étape 1 : Création du AWS KMS porte-clés
-
L'exemple suivant permet de
CreateAwsKmsMrkMultiKeyring
créer un AWS KMS trousseau de clés avec une clé de chiffrement KMS symétrique. LaCreateAwsKmsMrkMultiKeyring
méthode garantit que le trousseau de clés gère correctement les clés à région unique et à régions multiples.final MaterialProviders matProv = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); final CreateAwsKmsMrkMultiKeyringInput keyringInput = CreateAwsKmsMrkMultiKeyringInput.builder() .generator(kmsKeyId) .build(); final IKeyring kmsKeyring = matProv.CreateAwsKmsMrkMultiKeyring(keyringInput);
- Étape 2 : configurer les actions de vos attributs
-
L'exemple suivant définit une
attributeActionsOnEncrypt
carte qui représente des exemples d'actions attributaires pour un élément de table.Note
L'exemple suivant ne définit aucun attribut en tant que
SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
. Si vous spécifiez desSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
attributs, les attributs de partition et de tri doivent également l'êtreSIGN_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);
- Étape 3 : définir les attributs exclus des signatures
-
L'exemple suivant suppose que tous les
DO_NOTHING
attributs partagent le préfixe distinct:
« » et utilise le préfixe pour définir les attributs non signés autorisés. Le client suppose que tout nom d'attribut avec le préfixe:
« » est exclu des signatures. Pour de plus amples informations, veuillez consulter Allowed unsigned attributes.final String unsignedAttrPrefix = ":";
- Étape 4 : définir la configuration du chiffrement des tables DynamoDB
-
L'exemple suivant définit une
tableConfigs
carte qui représente la configuration de chiffrement pour cette table DynamoDB.Cet exemple indique le nom de la table DynamoDB comme nom de table logique. Nous vous recommandons vivement de spécifier le nom de votre table DynamoDB comme nom de table logique lorsque vous définissez votre configuration de chiffrement pour la première fois. Pour de plus amples informations, veuillez consulter Configuration du chiffrement dans le chiffrement de AWS base de données SDK pour DynamoDB.
Note
Pour utiliser le chiffrement consultable ou les balises signées, vous devez également les inclure SearchConfigdans votre configuration de chiffrement.
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);
- Étape 5 : Création du
DynamoDbEncryptionInterceptor
-
L'exemple suivant crée le
DynamoDbEncryptionInterceptor
à l'aidetableConfigs
de l'étape 4.DynamoDbEncryptionInterceptor interceptor = DynamoDbEncryptionInterceptor.builder() .config(DynamoDbTablesEncryptionConfig.builder() .tableEncryptionConfigs(tableConfigs) .build()) .build();
- Étape 6 : créer un nouveau client AWS SDK DynamoDB
-
L'exemple suivant crée un nouveau client AWS SDK DynamoDB à l'aide de
interceptor
l'étape 5.final DynamoDbClient ddb = DynamoDbClient.builder() .overrideConfiguration( ClientOverrideConfiguration.builder() .addExecutionInterceptor(interceptor) .build()) .build();
- Étape 7 : Chiffrer et signer un élément de table DynamoDB
-
L'exemple suivant définit une
item
carte qui représente un exemple d'élément de table et place l'élément dans la table DynamoDB. L'élément est chiffré et signé côté client avant d'être envoyé à 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);
Utiliser le niveau inférieur DynamoDbItemEncryptor
L'exemple suivant montre comment utiliser le niveau inférieur DynamoDbItemEncryptor
avec un AWS KMS trousseau de clés pour chiffrer et signer directement des éléments de table. L'élément DynamoDbItemEncryptor
n'est pas placé dans votre table DynamoDB.
Vous pouvez utiliser n'importe quel trousseau de clés compatible avec le client DynamoDB amélioré, mais nous vous recommandons d'utiliser l'un des trousseaux de clés dans la mesure du AWS KMS possible.
Note
Le niveau inférieur DynamoDbItemEncryptor
ne prend pas en charge le chiffrement consultable. Utilisez le DynamoDbEncryptionInterceptor
avec le API DynamoDB de bas niveau pour utiliser le chiffrement consultable.
Voir l'exemple de code complet : ItemEncryptDecryptExample.java
- Étape 1 : Création du AWS KMS porte-clés
-
L'exemple suivant permet de
CreateAwsKmsMrkMultiKeyring
créer un AWS KMS trousseau de clés avec une clé de chiffrement KMS symétrique. LaCreateAwsKmsMrkMultiKeyring
méthode garantit que le trousseau de clés gère correctement les clés à région unique et à régions multiples.final MaterialProviders matProv = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); final CreateAwsKmsMrkMultiKeyringInput keyringInput = CreateAwsKmsMrkMultiKeyringInput.builder() .generator(kmsKeyId) .build(); final IKeyring kmsKeyring = matProv.CreateAwsKmsMrkMultiKeyring(keyringInput);
- Étape 2 : configurer les actions de vos attributs
-
L'exemple suivant définit une
attributeActionsOnEncrypt
carte qui représente des exemples d'actions attributaires pour un élément de table.Note
L'exemple suivant ne définit aucun attribut en tant que
SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
. Si vous spécifiez desSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
attributs, les attributs de partition et de tri doivent également l'êtreSIGN_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);
- Étape 3 : définir les attributs exclus des signatures
-
L'exemple suivant suppose que tous les
DO_NOTHING
attributs partagent le préfixe distinct:
« » et utilise le préfixe pour définir les attributs non signés autorisés. Le client suppose que tout nom d'attribut avec le préfixe:
« » est exclu des signatures. Pour de plus amples informations, veuillez consulter Allowed unsigned attributes.final String unsignedAttrPrefix = ":";
- Étape 4 : Définition de la
DynamoDbItemEncryptor
configuration -
L'exemple suivant définit la configuration de
DynamoDbItemEncryptor
.Cet exemple indique le nom de la table DynamoDB comme nom de table logique. Nous vous recommandons vivement de spécifier le nom de votre table DynamoDB comme nom de table logique lorsque vous définissez votre configuration de chiffrement pour la première fois. Pour de plus amples informations, veuillez consulter Configuration du chiffrement dans le chiffrement de AWS base de données SDK pour DynamoDB.
final DynamoDbItemEncryptorConfig config = DynamoDbItemEncryptorConfig.builder() .logicalTableName(ddbTableName) .partitionKeyName("partition_key") .sortKeyName("sort_key") .attributeActionsOnEncrypt(attributeActionsOnEncrypt) .keyring(kmsKeyring) .allowedUnsignedAttributePrefix(unsignedAttrPrefix) .build();
- Étape 5 : Création du
DynamoDbItemEncryptor
-
L'exemple suivant en crée un nouveau à
DynamoDbItemEncryptor
l'aide de l'étape 4config
à partir de l'étape 4.final DynamoDbItemEncryptor itemEncryptor = DynamoDbItemEncryptor.builder() .DynamoDbItemEncryptorConfig(config) .build();
- Étape 6 : Chiffrer et signer directement un élément du tableau
-
L'exemple suivant chiffre et signe directement un élément à l'aide du
DynamoDbItemEncryptor
. L'élémentDynamoDbItemEncryptor
n'est pas placé dans votre table 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();