

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.

# .NET
<a name="ddb-net"></a>

Cette rubrique explique comment installer et utiliser la version 3. *x* de la bibliothèque de chiffrement côté client .NET pour DynamoDB. Pour plus de détails sur la programmation avec le SDK AWS de chiffrement de base de données pour DynamoDB, consultez les exemples [.NET dans aws-database-encryption-sdk le référentiel -dynamodb](https://github.com/aws/aws-database-encryption-sdk-dynamodb/tree/main/Examples/runtimes/net/src/) sur. GitHub

La bibliothèque de chiffrement côté client .NET pour DynamoDB est destinée aux développeurs qui écrivent des applications en C\$1 et dans d'autres langages de programmation .NET. Elle est prise en charge sur Windows, macOS et Linux.

Toutes les implémentations en [langage de programmation](ddb-programming-languages.md) du SDK de chiffrement de AWS base de données pour DynamoDB sont interopérables. Toutefois, les valeurs vides SDK pour .NET ne sont pas prises en charge pour les types de données de liste ou de carte. Cela signifie que si vous utilisez la bibliothèque de chiffrement côté client Java pour DynamoDB pour écrire un élément contenant des valeurs vides pour un type de données de liste ou de carte, vous ne pouvez pas déchiffrer et lire cet élément à l'aide de la bibliothèque de chiffrement côté client .NET pour DynamoDB.

**Topics**
+ [Installation](#ddb-net-install)
+ [Débogage](#ddb-net-debugging)
+ [Utilisation du client .NET](ddb-net-using.md)
+ [Exemples .NET](ddb-net-examples.md)
+ [Ajouter la version 3.x à une table existante](ddb-net-config-existing-table.md)

## Installation de la bibliothèque de chiffrement côté client .NET pour DynamoDB
<a name="ddb-net-install"></a>

[La bibliothèque de chiffrement côté client .NET pour DynamoDB est disponible sous le nom de AWS.Cryptography. DbEncryptionSDK. DynamoDb](https://www.nuget.org/packages/AWS.Cryptography.DbEncryptionSDK.DynamoDb/)emballer dans NuGet. Pour plus de détails sur l'installation et la création de la bibliothèque, consultez le fichier [.NET README.md](https://github.com/aws/aws-database-encryption-sdk-dynamodb/blob/main/DynamoDbEncryption/runtimes/net/README.md) dans le aws-database-encryption-sdk référentiel -dynamodb. La bibliothèque de chiffrement côté client .NET pour DynamoDB nécessite les clés SDK pour .NET même si vous n'utilisez pas (). AWS Key Management Service AWS KMS Le SDK pour .NET est installé avec le NuGet package.

Version 3. *x* de la bibliothèque de chiffrement côté client .NET pour DynamoDB prend en charge .NET 6.0 et .NET Framework net48 et versions ultérieures.

## Débogage avec .NET
<a name="ddb-net-debugging"></a>

La bibliothèque de chiffrement côté client .NET pour DynamoDB ne génère aucun journal. Les exceptions de la bibliothèque de chiffrement côté client .NET pour DynamoDB génèrent un message d'exception, mais aucune trace de pile.

Pour vous aider à déboguer, veillez à activer la connexion au SDK pour .NET. Les journaux et les messages d'erreur du SDK pour .NET peuvent vous aider à distinguer les erreurs survenant dans la bibliothèque de chiffrement côté client .NET pour DynamoDB SDK pour .NET de celles qui se produisent dans la bibliothèque de chiffrement .NET. Pour obtenir de l'aide SDK pour .NET concernant la journalisation, consultez [AWSLogging](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/net-dg-config-other.html#config-setting-awslogging)le *guide du AWS SDK pour .NET développeur*. (Pour consulter le sujet, développez la section **Ouvrir pour afficher le contenu du .NET Framework**.)

# Utilisation de la bibliothèque de chiffrement côté client .NET pour DynamoDB
<a name="ddb-net-using"></a>

Cette rubrique décrit certaines des fonctions et classes d'assistance de la version 3. *x* de la bibliothèque de chiffrement côté client .NET pour DynamoDB. 

Pour plus de détails sur la programmation avec la bibliothèque de chiffrement côté client .NET pour DynamoDB, consultez les [exemples .NET](https://github.com/aws/aws-database-encryption-sdk-dynamodb/tree/main/Examples/runtimes/net/src/) dans le référentiel -dynamodb sur. aws-database-encryption-sdk GitHub

**Topics**
+ [Chiffreurs d'éléments](#ddb-net-item-encryptors)
+ [Actions d'attribut](#ddb-net-attribute-actions)
+ [Configuration du chiffrement](#ddb-net-config-encrypt)
+ [Mettre à jour des éléments](#ddb-net-update-items)

## Chiffreurs d'éléments
<a name="ddb-net-item-encryptors"></a>

À la base, le SDK de chiffrement AWS de base de données pour DynamoDB est un outil de chiffrement d'éléments. Vous pouvez utiliser la version 3. *x* de la bibliothèque de chiffrement côté client .NET pour DynamoDB afin de chiffrer, signer, vérifier et déchiffrer les éléments de votre table DynamoDB de la manière suivante.

**Le SDK de chiffrement de AWS base de données de bas niveau pour l'API DynamoDB**  
Vous pouvez utiliser votre [configuration de chiffrement de table](#ddb-net-config-encrypt) pour créer un client DynamoDB qui chiffre et signe automatiquement les éléments côté client avec vos requêtes DynamoDB. `PutItem` Vous pouvez utiliser ce client directement ou créer un modèle de [document ou un modèle](https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/dynamodb-intro.html#dynamodb-intro-apis-document) de [persistance d'objet](https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/dynamodb-intro.html#dynamodb-intro-apis-object-persistence).  
[Vous devez utiliser le SDK de chiffrement de AWS base de données de bas niveau pour l'API DynamoDB afin d'utiliser le chiffrement consultable.](searchable-encryption.md)

**Le niveau inférieur `DynamoDbItemEncryptor`**  
Le niveau inférieur chiffre, signe ou déchiffre et vérifie `DynamoDbItemEncryptor` directement les éléments de votre table sans appeler DynamoDB. Il n'émet pas de DynamoDB ni de `PutItem` requêtes`GetItem`. Par exemple, vous pouvez utiliser le niveau inférieur `DynamoDbItemEncryptor` pour déchiffrer et vérifier directement un élément DynamoDB que vous avez déjà récupéré. Si vous utilisez le niveau inférieur`DynamoDbItemEncryptor`, nous vous recommandons d'utiliser le [modèle de programmation de bas niveau](https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/dynamodb-intro.html#dynamodb-intro-apis-low-level) SDK pour .NET fourni pour communiquer avec DynamoDB.  
Le niveau inférieur `DynamoDbItemEncryptor` ne prend pas en charge le chiffrement [consultable](searchable-encryption.md).

## Actions relatives aux attributs dans le SDK de chiffrement AWS de base de données pour DynamoDB
<a name="ddb-net-attribute-actions"></a>

Les [actions d'](concepts.md#crypt-actions)attribut déterminent quelles valeurs d'attribut sont cryptées et signées, lesquelles sont uniquement signées, lesquelles sont signées et incluses dans le contexte de chiffrement, et lesquelles sont ignorées.

Pour spécifier des actions d'attribut avec le client .NET, définissez manuellement les actions d'attribut à l'aide d'un modèle d'objet. Spécifiez vos actions d'attribut en créant un `Dictionary` objet dans lequel les paires nom-valeur représentent les noms d'attributs et les actions spécifiées.

Spécifiez `ENCRYPT_AND_SIGN` le chiffrement et la signature d'un attribut. Spécifiez `SIGN_ONLY` pour signer un attribut, mais pas pour le chiffrer. Spécifiez `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` de signer un attribut et de l'inclure dans le contexte de chiffrement. Vous ne pouvez pas chiffrer un attribut sans le signer également. Spécifiez `DO_NOTHING` pour ignorer un attribut.

Les attributs de partition et de tri doivent être `SIGN_ONLY` soit`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`. Si vous définissez des attributs comme`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`, les attributs de partition et de tri doivent également l'être`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`.

**Note**  
Après avoir défini vos actions d'attribut, vous devez définir quels attributs sont exclus des signatures. Pour faciliter l'ajout de nouveaux attributs non signés à l'avenir, nous vous recommandons de choisir un préfixe distinct (tel que `:` « ») pour identifier vos attributs non signés. Incluez ce préfixe dans le nom de tous les attributs marqués lorsque vous `DO_NOTHING` définissez votre schéma DynamoDB et vos actions d'attribut.

Le modèle d'objet suivant montre comment spécifier`ENCRYPT_AND_SIGN`, `SIGN_ONLY``SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`, et `DO_NOTHING` attribuer des actions avec le client .NET. Cet exemple utilise le préfixe « `:` » pour identifier les `DO_NOTHING` attributs.

**Note**  
Pour utiliser l'action `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` cryptographique, vous devez utiliser la version 3.3 ou ultérieure du SDK AWS Database Encryption. Déployez la nouvelle version sur tous les lecteurs avant de [mettre à jour votre modèle de données](ddb-update-data-model.md) pour l'inclure`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`.

```
var attributeActionsOnEncrypt = new Dictionary<string, CryptoAction>
{
    ["partition_key"] = CryptoAction.SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT, // The partition attribute must be signed
    ["sort_key"] = CryptoAction.SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT, // The sort attribute must be signed
    ["attribute1"] = CryptoAction.ENCRYPT_AND_SIGN,
    ["attribute2"] = CryptoAction.SIGN_ONLY,
    ["attribute3"] = CryptoAction.SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT,
    [":attribute4"] = CryptoAction.DO_NOTHING
};
```

## Configuration du chiffrement dans le SDK de chiffrement AWS de base de données pour DynamoDB
<a name="ddb-net-config-encrypt"></a>

Lorsque vous utilisez le SDK AWS Database Encryption, vous devez définir explicitement une configuration de chiffrement pour votre table DynamoDB. Les valeurs requises dans votre configuration de chiffrement varient selon que vous avez défini vos actions attributaires manuellement ou à l'aide d'une classe de données annotée.

L'extrait suivant définit une configuration de chiffrement de table DynamoDB à l'aide du SDK de chiffrement de AWS base de données de bas niveau pour l'API DynamoDB et des attributs non signés autorisés définis par un préfixe distinct.

```
Dictionary<String, DynamoDbTableEncryptionConfig> tableConfigs =
    new Dictionary<String, DynamoDbTableEncryptionConfig>();
DynamoDbTableEncryptionConfig config = new DynamoDbTableEncryptionConfig
{
    LogicalTableName = ddbTableName,
    PartitionKeyName = "partition_key",
    SortKeyName = "sort_key",
    AttributeActionsOnEncrypt = attributeActionsOnEncrypt,
    Keyring = kmsKeyring,
    AllowedUnsignedAttributePrefix = unsignAttrPrefix,
    // Optional: SearchConfig only required if you use beacons
    Search = new SearchConfig
    {
        WriteVersion = 1, // MUST be 1
        Versions = beaconVersions
    }    
};
tableConfigs.Add(ddbTableName, config);
```

**Nom de table logique**  
Nom de table logique pour votre table DynamoDB.  
Le nom de table logique est lié de manière cryptographique à toutes les données stockées dans la table afin de simplifier les opérations de restauration DynamoDB. 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. Vous devez toujours spécifier le même nom de table logique. Pour que le déchiffrement réussisse, le nom de la table logique doit correspondre au nom spécifié lors du chiffrement. Si le nom de votre table DynamoDB change après la [restauration de votre table DynamoDB à partir d'une sauvegarde, le nom logique de la table garantit que l'opération de déchiffrement](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Restore.Tutorial.html) reconnaît toujours la table.

**Attributs non signés autorisés**  
Les attributs marqués `DO_NOTHING` dans vos actions d'attributs.  
Les attributs non signés autorisés indiquent au client quels attributs sont exclus des signatures. Le client suppose que tous les autres attributs sont inclus dans la signature. Ensuite, lors du déchiffrement d'un enregistrement, le client détermine les attributs qu'il doit vérifier et ceux à ignorer parmi les attributs non signés autorisés que vous avez spécifiés. Vous ne pouvez pas supprimer un attribut de vos attributs non signés autorisés.  
Vous pouvez définir explicitement les attributs non signés autorisés en créant un tableau répertoriant tous vos `DO_NOTHING` attributs. Vous pouvez également spécifier un préfixe distinct lorsque vous nommez vos `DO_NOTHING` attributs et utiliser le préfixe pour indiquer au client quels attributs ne sont pas signés. Nous vous recommandons vivement de spécifier un préfixe distinct, car cela simplifie le processus d'ajout d'un nouvel `DO_NOTHING` attribut à l'avenir. Pour de plus amples informations, veuillez consulter [Mettre à jour votre modèle de données](ddb-update-data-model.md).  
Si vous ne spécifiez pas de préfixe pour tous les `DO_NOTHING` attributs, vous pouvez configurer un `allowedUnsignedAttributes` tableau répertoriant explicitement tous les attributs que le client doit s'attendre à voir non signés lorsqu'il les rencontre lors du déchiffrement. Vous ne devez définir explicitement vos attributs non signés autorisés que si cela est absolument nécessaire.

**Configuration de la recherche (facultatif)**  
`SearchConfig`Définit la [version de la balise](using-beacons.md#beacon-version).  
Le `SearchConfig` doit être spécifié pour utiliser un [chiffrement consultable](searchable-encryption.md) ou des [balises signées](configure.md#signed-beacons).

**Suite d'algorithmes (facultatif)**  
`algorithmSuiteId`Définit la suite d'algorithmes utilisée par le SDK AWS de chiffrement de base de données.  
À moins que vous ne spécifiiez explicitement une suite d'algorithmes alternative, le SDK AWS de chiffrement de base de données utilise la [suite d'algorithmes par défaut](supported-algorithms.md#recommended-algorithms). [La suite d'algorithmes par défaut utilise l'algorithme AES-GCM avec dérivation de clés, [signatures numériques et engagement](concepts.md#digital-sigs) de clés.](concepts.md#key-commitment) Bien que la suite d'algorithmes par défaut soit susceptible de convenir à la plupart des applications, vous pouvez choisir une autre suite d'algorithmes. Par exemple, certains modèles de confiance seraient satisfaits par une suite d'algorithmes sans signature numérique. Pour plus d'informations sur les suites d'algorithmes prises en charge par le SDK AWS de chiffrement de base de données, consultez[Suites d'algorithmes prises en charge dans le SDK AWS de chiffrement de base de données](supported-algorithms.md).  
Pour sélectionner la [suite d'algorithmes AES-GCM sans signature numérique ECDSA](supported-algorithms.md#other-algorithms), incluez l'extrait suivant dans votre configuration de chiffrement de table.  

```
AlgorithmSuiteId = DBEAlgorithmSuiteId.ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY_SYMSIG_HMAC_SHA384
```

## Mise à jour d'éléments avec le SDK AWS de chiffrement de base de données
<a name="ddb-net-update-items"></a>

Le SDK AWS de chiffrement de base de données ne prend pas en charge [ddb : UpdateItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateItem.html) pour les éléments qui incluent des attributs chiffrés ou signés. Pour mettre à jour un attribut chiffré ou signé, vous devez utiliser [ddb : PutItem](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html). Lorsque vous spécifiez la même clé primaire qu'un élément existant dans votre `PutItem` demande, le nouvel article remplace complètement l'élément existant. Vous pouvez également utiliser [CLOBBER](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodbv2/datamodeling/DynamoDBMapperConfig.SaveBehavior.html#CLOBBER) pour effacer et remplacer tous les attributs lors de la sauvegarde après avoir mis à jour vos articles.

# Exemples .NET
<a name="ddb-net-examples"></a>

Les exemples suivants montrent comment utiliser la bibliothèque de chiffrement côté client .NET pour DynamoDB afin de protéger les éléments de table de votre application. Pour trouver d'autres exemples (et apporter les vôtres), consultez les [exemples .NET](https://github.com/aws/aws-database-encryption-sdk-dynamodb//tree/main/Examples/runtimes/net/src) dans le référentiel aws-database-encryption-sdk -dynamodb sur. GitHub

Les exemples suivants montrent comment configurer la bibliothèque de chiffrement côté client .NET 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](ddb-net-config-existing-table.md)

**Topics**
+ [Utilisation du SDK de chiffrement de AWS base de données de bas niveau pour l'API DynamoDB](#ddb-net-lowlevel-API-example)
+ [Utiliser le niveau inférieur `DynamoDbItemEncryptor`](#ddb-net-itemencryptor)

## Utilisation du SDK de chiffrement de AWS base de données de bas niveau pour l'API DynamoDB
<a name="ddb-net-lowlevel-API-example"></a>

L'exemple suivant montre comment utiliser le SDK de chiffrement de AWS base de données de bas niveau pour l'API DynamoDB avec un jeu de [AWS KMS clés](use-kms-keyring.md) afin de chiffrer et de signer automatiquement des éléments côté client avec vos demandes DynamoDB. `PutItem`

Vous pouvez utiliser n'importe quel [porte-clés](keyrings.md) 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.cs](https://github.com/aws/aws-database-encryption-sdk-dynamodb/tree/main/Examples/runtimes/net/src/BasicPutGetExample.cs)

**É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é KMS de chiffrement symétrique. Le `CreateAwsKmsMrkMultiKeyring` procédé garantit que le trousseau de clés gère correctement les clés à région unique et à zones multiples.  

```
var matProv = new MaterialProviders(new MaterialProvidersConfig());
var keyringInput = new CreateAwsKmsMrkMultiKeyringInput { Generator = kmsKeyId };
var kmsKeyring = matProv.CreateAwsKmsMrkMultiKeyring(keyringInput);
```

**Étape 2 : configurer les actions de vos attributs**  
L'exemple suivant définit un `attributeActionsOnEncrypt` dictionnaire qui représente des exemples d'[actions attributaires](concepts.md#crypt-actions) pour un élément de table.  
L'exemple suivant ne définit aucun attribut en tant que`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`. Si vous spécifiez des `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` attributs, les attributs de partition et de tri doivent également l'être`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`.

```
var attributeActionsOnEncrypt = new Dictionary<string, CryptoAction>
{
    ["partition_key"] = CryptoAction.SIGN_ONLY, // The partition attribute must be SIGN_ONLY
    ["sort_key"] = CryptoAction.SIGN_ONLY, // The sort attribute must be SIGN_ONLY
    ["attribute1"] = CryptoAction.ENCRYPT_AND_SIGN,
    ["attribute2"] = CryptoAction.SIGN_ONLY,
    [":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](ddb-net-using.md#net-allowed-unauth).  

```
const String unsignAttrPrefix = ":";
```

**É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.](ddb-net-using.md#net-logical-table-name) 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 SDK de chiffrement AWS de base de données pour DynamoDB](ddb-net-using.md#ddb-net-config-encrypt).  
Pour utiliser le [chiffrement consultable](searchable-encryption.md) ou les [balises signées](configure.md#signed-beacons), vous devez également les inclure [`SearchConfig`](ddb-java-using.md#ddb-search-config)dans votre configuration de chiffrement.

```
Dictionary<String, DynamoDbTableEncryptionConfig> tableConfigs =
    new Dictionary<String, DynamoDbTableEncryptionConfig>();
DynamoDbTableEncryptionConfig config = new DynamoDbTableEncryptionConfig
{
    LogicalTableName = ddbTableName,
    PartitionKeyName = "partition_key",
    SortKeyName = "sort_key",
    AttributeActionsOnEncrypt = attributeActionsOnEncrypt,
    Keyring = kmsKeyring,
    AllowedUnsignedAttributePrefix = unsignAttrPrefix
};
tableConfigs.Add(ddbTableName, config);
```

**Étape 5 : créer un nouveau client DynamoDB du AWS SDK**  
**L'exemple suivant crée un nouveau client DynamoDB du AWS SDK à l'aide `TableEncryptionConfigs` de l'étape 4.**  

```
var ddb = new Client.DynamoDbClient(
    new DynamoDbTablesEncryptionConfig { TableEncryptionConfigs = tableConfigs });
```

**Étape 6 : Chiffrer et signer un élément de table DynamoDB**  
L'exemple suivant définit un `item` dictionnaire qui représente un exemple d'élément de table et place cet élément dans la table DynamoDB. L'élément est chiffré et signé côté client avant d'être envoyé à DynamoDB.  

```
var item = new Dictionary<String, AttributeValue>
{
    ["partition_key"] = new AttributeValue("BasicPutGetExample"),
    ["sort_key"] = new AttributeValue { N = "0" },
    ["attribute1"] = new AttributeValue("encrypt and sign me!"),
    ["attribute2"] = new AttributeValue("sign me!"),
    [":attribute3"] = new AttributeValue("ignore me!")
};

PutItemRequest putRequest = new PutItemRequest
{
    TableName = ddbTableName,
    Item = item
};

PutItemResponse putResponse = await ddb.PutItemAsync(putRequest);
```

## Utiliser le niveau inférieur `DynamoDbItemEncryptor`
<a name="ddb-net-itemencryptor"></a>

L'exemple suivant montre comment utiliser le niveau inférieur `DynamoDbItemEncryptor` avec un [AWS KMS trousseau de clés](use-kms-keyring.md) 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](keyrings.md) 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](searchable-encryption.md). Utilisez le SDK de chiffrement de AWS base de données de bas niveau pour l'API DynamoDB afin d'utiliser le chiffrement consultable.

**Voir l'exemple de code complet** : [ItemEncryptDecryptExample.cs](https://github.com/aws/aws-database-encryption-sdk-dynamodb/tree/main/Examples/runtimes/net/src/itemencryptor/ItemEncryptDecryptExample.cs)

**É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é KMS de chiffrement symétrique. Le `CreateAwsKmsMrkMultiKeyring` procédé garantit que le trousseau de clés gère correctement les clés à région unique et à zones multiples.  

```
var matProv = new MaterialProviders(new MaterialProvidersConfig());
var keyringInput = new CreateAwsKmsMrkMultiKeyringInput { Generator = kmsKeyId };
var kmsKeyring = matProv.CreateAwsKmsMrkMultiKeyring(keyringInput);
```

**Étape 2 : configurer les actions de vos attributs**  
L'exemple suivant définit un `attributeActionsOnEncrypt` dictionnaire qui représente des exemples d'[actions attributaires](concepts.md#crypt-actions) pour un élément de table.  
L'exemple suivant ne définit aucun attribut en tant que`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`. Si vous spécifiez des `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` attributs, les attributs de partition et de tri doivent également l'être`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`.

```
var attributeActionsOnEncrypt = new Dictionary<String, CryptoAction>
{
    ["partition_key"] = CryptoAction.SIGN_ONLY, // The partition attribute must be SIGN_ONLY
    ["sort_key"] = CryptoAction.SIGN_ONLY, // The sort attribute must be SIGN_ONLY
    ["attribute1"] = CryptoAction.ENCRYPT_AND_SIGN,
    ["attribute2"] = CryptoAction.SIGN_ONLY,
    [":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](ddb-net-using.md#net-allowed-unauth).  

```
String unsignAttrPrefix = ":";
```

**É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.](ddb-net-using.md#net-logical-table-name) 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 SDK de chiffrement AWS de base de données pour DynamoDB](ddb-net-using.md#ddb-net-config-encrypt).  

```
var config = new DynamoDbItemEncryptorConfig
{
    LogicalTableName = ddbTableName,
    PartitionKeyName = "partition_key",
    SortKeyName = "sort_key",
    AttributeActionsOnEncrypt = attributeActionsOnEncrypt,
    Keyring = kmsKeyring,
    AllowedUnsignedAttributePrefix = unsignAttrPrefix
};
```

**Étape 5 : Création du `DynamoDbItemEncryptor`**  
L'exemple suivant en crée un nouveau à `DynamoDbItemEncryptor` l'aide de l'étape 4 `config` à partir de l'**étape 4**.  

```
var itemEncryptor = new DynamoDbItemEncryptor(config);
```

**É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ément `DynamoDbItemEncryptor` n'est pas placé dans votre table DynamoDB.  

```
var originalItem = new Dictionary<String, AttributeValue>
{
    ["partition_key"] = new AttributeValue("ItemEncryptDecryptExample"),
    ["sort_key"] = new AttributeValue { N = "0" },
    ["attribute1"] = new AttributeValue("encrypt and sign me!"),
    ["attribute2"] = new AttributeValue("sign me!"),
    [":attribute3"] = new AttributeValue("ignore me!")
};

var encryptedItem = itemEncryptor.EncryptItem(
    new EncryptItemInput { PlaintextItem = originalItem }
).EncryptedItem;
```

# Configurer une table DynamoDB existante pour utiliser AWS le SDK de chiffrement de base de données pour DynamoDB
<a name="ddb-net-config-existing-table"></a>

Avec la version 3. *x* de la bibliothèque de chiffrement côté client .NET pour DynamoDB, vous pouvez configurer vos tables Amazon DynamoDB existantes pour le chiffrement côté client. Cette rubrique fournit des conseils sur les trois étapes à suivre pour ajouter la version 3. *x* vers une table DynamoDB existante et renseignée.

## Étape 1 : Préparez-vous à lire et à écrire des éléments chiffrés
<a name="ddb-net-add-step1"></a>

Procédez comme suit pour préparer votre client du SDK AWS Database Encryption à lire et à écrire des éléments chiffrés. Après avoir déployé les modifications suivantes, votre client continuera à lire et à écrire des éléments en texte brut. Il ne chiffrera ni ne signera aucun nouvel élément inscrit dans la table, mais il sera en mesure de déchiffrer les éléments chiffrés dès leur apparition. Ces modifications préparent le client à commencer à [chiffrer de nouveaux éléments](#ddb-net-add-step2). Les modifications suivantes doivent être déployées sur chaque lecteur avant de passer à l'étape suivante.

**1. Définissez vos [actions attributaires](concepts.md#crypt-actions)**  
Créez un modèle d'objet pour définir les valeurs d'attribut qui seront cryptées et signées, celles qui seront uniquement signées et celles qui seront ignorées.  
Par défaut, les attributs de clé primaire sont signés mais pas chiffrés (`SIGN_ONLY`) et tous les autres attributs sont chiffrés et signés (`ENCRYPT_AND_SIGN`).  
Spécifiez `ENCRYPT_AND_SIGN` le chiffrement et la signature d'un attribut. Spécifiez `SIGN_ONLY` pour signer un attribut, mais pas pour le chiffrer. Spécifiez `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` à signer et à attribuer et à inclure dans le contexte de chiffrement. Vous ne pouvez pas chiffrer un attribut sans le signer également. Spécifiez `DO_NOTHING` si un attribut doit être ignoré. Pour de plus amples informations, veuillez consulter [Actions relatives aux attributs dans le SDK de chiffrement AWS de base de données pour DynamoDB](ddb-net-using.md#ddb-net-attribute-actions).  
Si vous spécifiez des `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` attributs, les attributs de partition et de tri doivent également l'être`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`.

```
var attributeActionsOnEncrypt = new Dictionary<string, CryptoAction>
{
    ["partition_key"] = CryptoAction.SIGN_ONLY, // The partition attribute must be SIGN_ONLY
    ["sort_key"] = CryptoAction.SIGN_ONLY, // The sort attribute must be SIGN_ONLY
    ["attribute1"] = CryptoAction.ENCRYPT_AND_SIGN,
    ["attribute2"] = CryptoAction.SIGN_ONLY,
    [":attribute3"] = CryptoAction.DO_NOTHING
};
```

**2. Définissez les attributs qui seront 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 supposera que tout nom d'attribut avec le préfixe `:` « » est exclu des signatures. Pour de plus amples informations, veuillez consulter [Allowed unsigned attributes](ddb-net-using.md#net-allowed-unauth).  

```
const String unsignAttrPrefix = ":";
```

**3. Créez un [porte-clés](keyrings.md)**  
L'exemple suivant crée un [AWS KMS trousseau de clés.](use-kms-keyring.md) Le AWS KMS trousseau de clés utilise le chiffrement symétrique ou le RSA asymétrique AWS KMS keys pour générer, chiffrer et déchiffrer les clés de données.  
Cet exemple permet `CreateMrkMultiKeyring` de créer un AWS KMS trousseau de clés avec une clé KMS de chiffrement symétrique. La `CreateAwsKmsMrkMultiKeyring` méthode garantit que le trousseau de clés gère correctement les clés à région unique et à régions multiples.  

```
var matProv = new MaterialProviders(new MaterialProvidersConfig());
var keyringInput = new CreateAwsKmsMrkMultiKeyringInput { Generator = kmsKeyId };
var kmsKeyring = matProv.CreateAwsKmsMrkMultiKeyring(keyringInput);
```

**4. Définition de 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.](ddb-net-using.md#net-logical-table-name) 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.  
Vous devez le spécifier `FORCE_WRITE_PLAINTEXT_ALLOW_READ_PLAINTEXT` comme remplacement en texte brut. Cette politique continue de lire et d'écrire des éléments en texte brut, de lire des éléments chiffrés et de préparer le client à écrire des éléments chiffrés.  
Pour plus d'informations sur les valeurs incluses dans la configuration du chiffrement des tables, consultez[Configuration du chiffrement dans le SDK de chiffrement AWS de base de données pour DynamoDB](ddb-java-using.md#ddb-config-encrypt).  

```
Dictionary<String, DynamoDbTableEncryptionConfig> tableConfigs =
    new Dictionary<String, DynamoDbTableEncryptionConfig>();
DynamoDbTableEncryptionConfig config = new DynamoDbTableEncryptionConfig
{
    LogicalTableName = ddbTableName,
    PartitionKeyName = "partition_key",
    SortKeyName = "sort_key",
    AttributeActionsOnEncrypt = attributeActionsOnEncrypt,
    Keyring = kmsKeyring,
    AllowedUnsignedAttributePrefix = unsignAttrPrefix,
    PlaintextOverride = FORCE_WRITE_PLAINTEXT_ALLOW_READ_PLAINTEXT
};
tableConfigs.Add(ddbTableName, config);
```

**5. Création d'un nouveau client AWS DynamoDB SDK**  
**L'exemple suivant crée un nouveau client DynamoDB AWS SDK à l'aide `TableEncryptionConfigs` de l'étape 4.**  

```
var ddb = new Client.DynamoDbClient(
    new DynamoDbTablesEncryptionConfig { TableEncryptionConfigs = tableConfigs });
```

## Étape 2 : Écrire des éléments chiffrés et signés
<a name="ddb-net-add-step2"></a>

Mettez à jour la politique de texte brut dans votre configuration de chiffrement de table pour permettre au client d'écrire des éléments chiffrés et signés. Après avoir déployé la modification suivante, le client chiffre et signe les nouveaux éléments en fonction des actions d'attribut que vous avez configurées à l'**étape 1**. Le client pourra lire les éléments en texte brut et les éléments chiffrés et signés.

Avant de passer à l'[étape 3](#ddb-net-add-step3), vous devez chiffrer et signer tous les éléments en texte brut existants dans votre tableau. Il n'existe pas de métrique ou de requête unique que vous puissiez exécuter pour chiffrer rapidement vos éléments en texte brut existants. Utilisez le processus le mieux adapté à votre système. Par exemple, vous pouvez utiliser un processus asynchrone qui analyse lentement la table et réécrit les éléments à l'aide des actions attributaires et de la configuration de chiffrement que vous avez définies. Pour identifier les éléments en texte brut de votre tableau, nous vous recommandons de rechercher tous les éléments qui ne contiennent pas les `aws_dbe_foot` attributs `aws_dbe_head` et que le SDK de chiffrement de AWS base de données ajoute aux éléments lorsqu'ils sont chiffrés et signés.

L'exemple suivant met à jour la configuration de chiffrement des tables depuis **l'étape 1**. Vous devez mettre à jour le remplacement en texte brut avec. `FORBID_WRITE_PLAINTEXT_ALLOW_READ_PLAINTEXT` Cette politique continue de lire les éléments en texte brut, mais également de lire et d'écrire des éléments chiffrés. Créez un nouveau client DynamoDB du AWS SDK à l'aide de la version mise à jour. `TableEncryptionConfigs`

```
Dictionary<String, DynamoDbTableEncryptionConfig> tableConfigs =
    new Dictionary<String, DynamoDbTableEncryptionConfig>();
DynamoDbTableEncryptionConfig config = new DynamoDbTableEncryptionConfig
{
    LogicalTableName = ddbTableName,
    PartitionKeyName = "partition_key",
    SortKeyName = "sort_key",
    AttributeActionsOnEncrypt = attributeActionsOnEncrypt,
    Keyring = kmsKeyring,
    AllowedUnsignedAttributePrefix = unsignAttrPrefix,
    PlaintextOverride = FORBID_WRITE_PLAINTEXT_ALLOW_READ_PLAINTEXT
};
tableConfigs.Add(ddbTableName, config);
```

## Étape 3 : lire uniquement les éléments chiffrés et signés
<a name="ddb-net-add-step3"></a>

Une fois que vous avez chiffré et signé tous vos éléments, mettez à jour la dérogation en texte brut dans votre configuration de chiffrement de table pour autoriser uniquement le client à lire et écrire des éléments chiffrés et signés. Après avoir déployé la modification suivante, le client chiffre et signe les nouveaux éléments en fonction des actions d'attribut que vous avez configurées à l'**étape 1**. Le client ne pourra lire que les éléments chiffrés et signés.

L'exemple suivant met à jour la configuration de chiffrement des tables depuis **l'étape 2**. Vous pouvez soit mettre à jour la règle de remplacement en texte brut, `FORBID_WRITE_PLAINTEXT_FORBID_READ_PLAINTEXT` soit la supprimer de votre configuration. Le client lit et écrit uniquement les éléments chiffrés et signés par défaut. Créez un nouveau client DynamoDB du AWS SDK à l'aide de la version mise à jour. `TableEncryptionConfigs`

```
Dictionary<String, DynamoDbTableEncryptionConfig> tableConfigs =
    new Dictionary<String, DynamoDbTableEncryptionConfig>();
DynamoDbTableEncryptionConfig config = new DynamoDbTableEncryptionConfig
{
    LogicalTableName = ddbTableName,
    PartitionKeyName = "partition_key",
    SortKeyName = "sort_key",
    AttributeActionsOnEncrypt = attributeActionsOnEncrypt,
    Keyring = kmsKeyring,
    AllowedUnsignedAttributePrefix = unsignAttrPrefix,
    // Optional: you can also remove the plaintext policy from your configuration
    PlaintextOverride = FORBID_WRITE_PLAINTEXT_FORBID_READ_PLAINTEXT
};
tableConfigs.Add(ddbTableName, config);
```