Utilisation de balises - 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 de balises

Notre bibliothèque de chiffrement côté client a été renommée SDK de chiffrement de AWS base de données. Ce guide du développeur fournit toujours des informations sur le client de chiffrement DynamoDB.

Les balises vous permettent de rechercher des enregistrements cryptés sans déchiffrer l'intégralité de la base de données interrogée. Les balises sont conçues pour être implémentées dans de nouvelles bases de données non peuplées. Toute balise configurée dans une base de données existante ne mappera que les nouveaux enregistrements écrits dans la base de données. Les balises sont calculées à partir de la valeur en texte brut d'un champ. Une fois le champ crypté, la balise ne peut plus cartographier les données existantes. Une fois que vous avez écrit de nouveaux enregistrements avec une balise, vous ne pouvez pas mettre à jour la configuration de la balise. Cependant, vous pouvez ajouter de nouvelles balises pour les nouveaux champs que vous ajoutez à votre enregistrement.

Après avoir configuré vos balises, vous devez suivre les étapes suivantes avant de commencer à remplir votre base de données et à exécuter des requêtes sur vos balises.

  1. Création d'un porte-clés AWS KMS hiérarchique

    Pour utiliser le chiffrement consultable, vous devez utiliser le trousseau de clés AWS KMS hiérarchique pour générer, chiffrer et déchiffrer les clés de données utilisées pour protéger vos enregistrements.

    Après avoir configuré vos balises, assemblez les prérequis relatifs au jeu de clés hiérarchique et créez votre trousseau de clés hiérarchique.

    Pour plus de détails sur les raisons pour lesquelles le trousseau de clés hiérarchique est requis, voir Utilisation du trousseau de clés hiérarchique pour le chiffrement consultable.

  2. Définissez la version de la balise

    Spécifiez votre keyStorekeySource, une liste de toutes les balises standard que vous avez configurées, une liste de toutes les balises composées que vous avez configurées, une liste de parties cryptées, une liste de parties signées et une version de balise. Vous devez spécifier 1 la version de la balise. Pour obtenir des conseils sur la définition de votrekeySource, voirDéfinition de la source clé de votre balise.

    L'exemple Java suivant définit la version de balise pour une base de données à locataire unique. Pour obtenir de l'aide sur la définition de la version de balise pour une base de données mutualisée, consultez la section Chiffrement consultable pour les bases de données mutualisées.

    Java
    List<BeaconVersion> beaconVersions = new ArrayList<>(); beaconVersions.add( BeaconVersion.builder() .standardBeacons(standardBeaconList) .compoundBeacons(compoundBeaconList) .encryptedParts(encryptedPartsList) .signedParts(signedPartsList) .version(1) // MUST be 1 .keyStore(keyStore) .keySource(BeaconKeySource.builder() .single(SingleKeyStore.builder() .keyId(branchKeyId) .cacheTTL(6000) .build()) .build()) .build() );
    C# / .NET
    var beaconVersions = new List<BeaconVersion> { new BeaconVersion { StandardBeacons = standardBeaconList, CompoundBeacons = compoundBeaconList, EncryptedParts = encryptedPartsList, SignedParts = signedPartsList, Version = 1, // MUST be 1 KeyStore = branchKeyStoreName, KeySource = new BeaconKeySource { Single = new SingleKeyStore { KeyId = branch-key-id, CacheTTL = 6000 } } } };
  3. Configuration des index secondaires

    Après avoir configuré vos balises, vous devez configurer un index secondaire qui reflète chaque balise avant de pouvoir effectuer une recherche dans les champs chiffrés. Pour plus d’informations, consultez Configuration des index secondaires avec des balises.

  4. Définissez vos actions cryptographiques

    Tous les champs utilisés pour construire une balise standard doivent être marquésENCRYPT_AND_SIGN. Tous les autres champs utilisés pour créer des balises doivent être marqués SIGN_ONLY ouSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT.

  5. Configuration d'un client SDK AWS de chiffrement de base de données

    Pour configurer un client du SDK AWS de chiffrement de base de données qui protège les éléments de table de votre table DynamoDB, consultez la section Bibliothèque de chiffrement côté client Java pour DynamoDB.

Interrogation de balises

Le type de balise que vous configurez détermine le type de requêtes que vous pouvez effectuer. Les balises standard utilisent des expressions de filtre pour effectuer des recherches d'égalité. Les balises composées combinent des chaînes de texte en clair littérales et des balises standard pour effectuer des requêtes complexes. Lorsque vous interrogez des données chiffrées, vous recherchez le nom de la balise.

Vous ne pouvez pas comparer les valeurs de deux balises standard, même si elles contiennent le même texte brut sous-jacent. Les deux balises standard produiront deux balises HMAC différentes pour les mêmes valeurs en texte brut. Par conséquent, les balises standard ne peuvent pas effectuer les requêtes suivantes.

  • beacon1 = beacon2

  • beacon1 IN (beacon2)

  • value IN (beacon1, beacon2, ...)

  • CONTAINS(beacon1, beacon2)

Les balises composées peuvent effectuer les requêtes suivantes.

  • BEGINS_WITH(a), où a reflète la valeur totale du champ par lequel commence la balise composée assemblée. Vous ne pouvez pas utiliser l'BEGINS_WITHopérateur pour identifier une valeur commençant par une sous-chaîne particulière. Cependant, vous pouvez utiliser « BEGINS_WITH(S_) where » S_ reflète le préfixe d'une pièce par laquelle commence la balise composée assemblée.

  • CONTAINS(a), où a reflète la valeur totale d'un champ que contient la balise composée assemblée. Vous ne pouvez pas utiliser l'CONTAINSopérateur pour identifier un enregistrement contenant une sous-chaîne particulière ou une valeur au sein d'un ensemble.

    Par exemple, vous ne pouvez pas exécuter une CONTAINS(path, "a" requête a qui reflète la valeur d'un ensemble.

  • Vous pouvez comparer les parties signées de balises composées. Lorsque vous comparez des parties signées, vous pouvez éventuellement ajouter le préfixe d'une partie chiffrée à une ou plusieurs parties signées, mais vous ne pouvez inclure la valeur d'un champ crypté dans aucune requête.

    Par exemple, vous pouvez comparer des pièces signées et effectuer une requête sur signedField1 = signedField2 ouvalue IN (signedField1, signedField2, ...).

    Vous pouvez également comparer les parties signées et le préfixe d'une pièce chiffrée par requête sursignedField1.A_ = signedField2.B_.

  • field BETWEEN a AND b, où a et b sont des pièces signées. Vous pouvez éventuellement ajouter le préfixe d'une partie chiffrée à une ou plusieurs parties signées, mais vous ne pouvez inclure la valeur d'un champ crypté dans aucune requête.

Vous devez inclure le préfixe pour chaque partie que vous incluez dans une requête sur une balise composée. Par exemple, si vous avez créé une balise composéecompoundBeacon, à partir de deux champs, encryptedField etsignedField, vous devez inclure les préfixes configurés pour ces deux parties lorsque vous interrogez la balise.

compoundBeacon = E_encryptedFieldValue.S_signedFieldValue