

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.

# Chiffrement consultable pour les bases de données mutualisées
<a name="searchable-encryption-multitenant"></a>


****  

|  | 
| --- |
| 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](legacy-dynamodb-encryption-client.md). | 

Pour implémenter le chiffrement consultable dans votre base de données, vous devez utiliser un trousseau de [clés AWS KMS hiérarchique](use-hierarchical-keyring.md). Le trousseau de clés AWS KMS hiérarchique génère, chiffre et déchiffre les clés de données utilisées pour protéger vos dossiers. Il crée également la clé de balise utilisée pour générer des balises. Lorsque vous utilisez le trousseau de clés AWS KMS hiérarchique avec des bases de données à locataires multiples, il existe une clé de branche et une clé de balise distinctes pour chaque locataire. Pour interroger des données chiffrées dans une base de données mutualisée, vous devez identifier les éléments clés de balise utilisés pour générer la balise que vous interrogez. Pour de plus amples informations, veuillez consulter [Utilisation du trousseau de clés hiérarchique pour un chiffrement consultable](use-hierarchical-keyring.md#searchable-encryption-hierarchical-keyrings).

Lorsque vous définissez la [version de balise](using-beacons.md#beacon-version) pour une base de données mutualisée, spécifiez 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 version de balise et un. `keySource` Vous devez [définir votre source de clé de balise](use-hierarchical-keyring.md#beacon-key-source) comme une `MultiKeyStore` durée de vie du cache de clé de balise local et inclure une taille de cache maximale pour le cache de clé de balise local. `keyFieldName`

Si vous avez configuré des [balises signées](configure.md#signed-beacons), elles doivent être incluses dans votre`compoundBeaconList`. Les balises signées sont un type de balise composée qui indexe et exécute des requêtes complexes sur des `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` champs `SIGN_ONLY` et des champs.

------
#### [ Java ]

```
List<BeaconVersion> beaconVersions = new ArrayList<>();
    beaconVersions.add(
        BeaconVersion.builder()
                .standardBeacons(standardBeaconList)
                .compoundBeacons(compoundBeaconList)
                .version(1) // MUST be 1
                .keyStore(branchKeyStoreName)
                .keySource(BeaconKeySource.builder()
                        .multi(MultiKeyStore.builder()
                                .keyFieldName(keyField)
                                .cacheTTL(6000)
                                .maxCacheSize(10)
                        .build())
                .build())
        .build()
    );
```

------
#### [ C\$1 / .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
        {
            Multi = new MultiKeyStore
            {
                KeyId = branch-key-id,
                CacheTTL = 6000,
                MaxCacheSize = 10
            }
        }
    }
};
```

------
#### [ Rust ]

```
let beacon_version = BeaconVersion::builder()
    .standard_beacons(standard_beacon_list)
    .compound_beacons(compound_beacon_list)
    .version(1) // MUST be 1
    .key_store(key_store.clone())
    .key_source(BeaconKeySource::Multi(
        MultiKeyStore::builder()
            // `keyId` references a beacon key.
            // For every branch key we create in the keystore,
            // we also create a beacon key.
            // This beacon key is not the same as the branch key,
            // but is created with the same ID as the branch key.
            .key_id(branch_key_id)
            .cache_ttl(6000)
            .max_cache_size(10)
            .build()?,
    ))
    .build()?;
let beacon_versions = vec![beacon_version];
```

------

**keyFieldName**  
[`keyFieldName`](use-hierarchical-keyring.md#keyFieldName)Définit le nom du champ qui stocke la clé `branch-key-id` associée à la balise utilisée pour générer des balises pour un locataire donné.  
Lorsque vous écrivez de nouveaux enregistrements dans votre base de données, la clé `branch-key-id` identifiant la clé de balise utilisée pour générer des balises pour cet enregistrement est stockée dans ce champ.  
Par défaut, il `keyField` s'agit d'un champ conceptuel qui n'est pas explicitement stocké dans votre base de données. Le SDK AWS de chiffrement de base de données identifie la [clé `branch-key-id` de données chiffrée contenue](concepts.md#data-key) dans la [description du matériel](concepts.md#material-description) et stocke la valeur dans le concept afin que vous `keyField` puissiez la référencer dans vos balises composées et vos balises [signées](configure.md#signed-beacons). Puisque la description du matériau est signée, le concept `keyField` est considéré comme une partie signée.  
Vous pouvez également inclure le `keyField` dans vos actions cryptographiques sous forme de `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` champ `SIGN_ONLY` ou pour le stocker explicitement dans votre base de données. Dans ce cas, vous devez l'inclure manuellement `keyField` chaque fois que vous écrivez un enregistrement `branch-key-id` dans votre base de données.

## Interrogation de balises dans une base de données mutualisée
<a name="query-multitenant-beacons"></a>

Pour interroger une balise, vous devez l'inclure `keyField` dans votre requête afin d'identifier les éléments clés de balise appropriés nécessaires pour recalculer la balise. Vous devez spécifier le code `branch-key-id` associé à la clé de balise utilisée pour générer les balises d'un enregistrement. Vous ne pouvez pas spécifier le [nom convivial](use-hierarchical-keyring.md#branch-key-id-supplier) qui identifie un locataire `branch-key-id` dans le fournisseur d'ID de clé de succursale. Vous pouvez les inclure `keyField` dans vos requêtes de différentes manières.

**Balises composées**  
Que vous les stockiez explicitement ou non `keyField` dans vos dossiers, vous pouvez les inclure `keyField` directement dans vos balises composées sous forme de pièce signée. La pièce `keyField` signée doit être requise.  
Par exemple, si vous souhaitez créer une balise composée`compoundBeacon`, à partir de deux champs`signedField`, `encryptedField` vous devez également l'inclure `keyField` sous forme de pièce signée. Cela vous permet d'effectuer la requête suivante sur`compoundBeacon`.  

```
compoundBeacon = E_encryptedFieldValue.S_signedFieldValue.K_branch-key-id
```

**Balises signées**  
Le SDK AWS Database Encryption utilise des balises standard et composées pour fournir des solutions de chiffrement consultables. Ces balises doivent inclure au moins un champ crypté. Cependant, le SDK AWS Database Encryption prend également en charge les [balises signées](configure.md#signed-beacons) qui peuvent être entièrement configurées à partir de texte brut `SIGN_ONLY` et de champs. `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`  
Les balises signées peuvent être construites à partir d'une seule pièce. Que vous le stockiez explicitement `keyField` dans vos dossiers ou non, vous pouvez créer une balise signée à partir de celle-ci `keyField` et l'utiliser pour créer des requêtes composées combinant une requête sur la balise `keyField` signée avec une requête sur l'une de vos autres balises. Par exemple, vous pouvez exécuter la requête suivante.  

```
keyField = K_branch-key-id AND compoundBeacon = E_encryptedFieldValue.S_signedFieldValue
```
Pour obtenir de l'aide sur la configuration des balises signées, voir [Création de balises signées](configure.md#signed-beacons)

**Interrogez directement sur le `keyField`**  
Si vous l'avez spécifié `keyField` dans vos actions cryptographiques et que vous stockez explicitement le champ dans votre enregistrement, vous pouvez créer une requête composée qui combine une requête sur votre balise avec une requête sur le`keyField`. Vous pouvez choisir d'effectuer une requête directement sur le `keyField` si vous souhaitez interroger une balise standard. Par exemple, vous pouvez exécuter la requête suivante.  

```
keyField = branch-key-id AND standardBeacon = S_standardBeaconValue
```