View a markdown version of this page

Utilisation du 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.

Utilisation du 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.

Cette rubrique décrit certaines fonctionnalités du client de chiffrement DynamoDB en Java qui ne sont peut-être pas disponibles dans d'autres implémentations de langage de programmation.

Pour plus de détails sur la programmation avec le client de chiffrement DynamoDB, consultez les exemples Java, les exemples ci-dessous et le Javadoc pour aws-dynamodb-encryption-java repository GitHub le client de chiffrement DynamoDB.

Crypteurs d'objets : DynamodBencryptor

Le client de chiffrement DynamoDB en Java possède un seul élément de chiffrement : le DynamodbEncryptor de niveau inférieur

Actions d'attribut en Java

Les actions d'attribut déterminent les valeurs d'attribut chiffrées et signées, qui sont uniquement signées et qui sont ignorées.

Important

Après avoir utilisé vos actions d’attribut pour chiffrer vos éléments de table, l’ajouter ou la suppression d’attributs de votre modèle de données peut provoquer une erreur de validation de signature qui vous empêche de déchiffrer vos données. Pour obtenir une explication détaillée, consultez Modification de votre modèle de données.

Pour spécifier les actions d'attribut lorsque vous utilisez directement le chiffreur DynamoDBEncryptor, créez un objet HashMap dans lequel les paires nom-valeur représentent les noms d'attribut et les actions spécifiées.

Les valeurs valides des actions d'attribut sont définies dans le type énuméré EncryptionFlags. Vous pouvez utiliser ENCRYPT et SIGN conjointement, utiliser SIGN seul, ou omettre les deux. Toutefois, si vous l'utilisez ENCRYPT seul, le client de chiffrement DynamoDB génère une erreur. Vous ne pouvez pas chiffrer un attribut que vous ne signez pas.

ENCRYPT SIGN
Avertissement

Ne chiffrez pas les attributs de la clé primaire. Ils doivent rester en texte brut pour que DynamoDB puisse trouver l'élément sans exécuter une analyse complète du tableau.

Si vous spécifiez une clé primaire dans le contexte de chiffrement, puis que vous la spécifiez ENCRYPT dans l'action d'attribut pour l'un ou l'autre des attributs de clé primaire, le client de chiffrement DynamoDB émet une exception.

Par exemple, le code Java suivant crée un code actions HashMap qui chiffre et signe tous les attributs de l'recordélément. Les exceptions sont les attributs de clé de partition et de clé de tri, qui sont signés mais non chiffrés, et l'attribut test, 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: // no break; falls through to next case case sortKeyName: // Partition and sort keys must not be encrypted, but should be signed actions.put(attributeName, signOnly); break; case "test": // Don't encrypt or sign break; default: // Encrypt and sign everything else actions.put(attributeName, encryptAndSign); break; } }

Puis, quand vous appelez la méthode encryptRecord de DynamoDBEncryptor, spécifiez la map comme valeur du paramètre attributeFlags. Par exemple, cet appel d'encryptRecord utilise la map actions.

// Encrypt the plaintext record final Map<String, AttributeValue> encrypted_record = encryptor.encryptRecord(record, actions, encryptionContext);

Remplacer les noms des tables

Dans le client de chiffrement DynamoDB, le nom de la table DynamoDB est un élément du contexte de chiffrement DynamoDB transmis aux méthodes de chiffrement et de déchiffrement. Lorsque vous chiffrez ou signez des éléments de table, le contexte de chiffrement DynamoDB, y compris le nom de la table, est lié cryptographiquement au texte chiffré. Si le contexte de chiffrement DynamoDB transmis à la méthode de déchiffrement ne correspond pas au contexte de chiffrement DynamoDB transmis à la méthode de chiffrement, l'opération de déchiffrement échoue.

Parfois, le nom d'une table change, par exemple lorsque vous sauvegardez une table ou effectuez une récupération ponctuelle. Lorsque vous déchiffrez ou vérifiez la signature de ces éléments, vous devez transmettre le même contexte de chiffrement DynamoDB que celui utilisé pour chiffrer et signer les éléments, y compris le nom de table d'origine. Le nom de la table actuelle n'est pas nécessaire.

Lorsque vous utilisez leDynamoDBEncryptor, vous assemblez le contexte de chiffrement DynamoDB manuellement. N'utilisez donc pas les opérateurs de remplacement du nom de table si vous utilisez leDynamoDBEncryptor. Créez plutôt un contexte de chiffrement avec le nom de la table d'origine et soumettez-le à la méthode de déchiffrement.