En utilisant le. NETbibliothèque de chiffrement côté client pour DynamoDB - AWS Chiffrement des bases SDK

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.

En utilisant le. NETbibliothèque de chiffrement côté client pour DynamoDB

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

Pour plus de détails sur la programmation avec. NETbibliothèque de chiffrement côté client pour DynamoDB, consultez le. NETexemples dans le référentiel aws-database-encryption-sdk -dynamodb sur. GitHub

Chiffreurs d'éléments

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

Chiffrement de AWS base de données de bas niveau SDK pour DynamoDB API

Vous pouvez utiliser votre configuration de chiffrement de table 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 de persistance d'objet.

Vous devez utiliser le chiffrement de AWS base de données de bas niveau SDK pour API DynamoDB afin d'utiliser le chiffrement consultable.

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êtesGetItem. 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érieurDynamoDbItemEncryptor, nous vous recommandons d'utiliser le modèle de programmation de bas niveau AWS SDK for .NET fourni pour communiquer avec DynamoDB.

Le niveau inférieur DynamoDbItemEncryptor ne prend pas en charge le chiffrement consultable.

Actions d'attribut dans le chiffrement de AWS base de données SDK pour DynamoDB

Les actions d'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 attributaires à l'aide du. NETclient, définissez manuellement les actions attributaires à 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 soitSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT. Si vous définissez des attributs commeSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT, les attributs de partition et de tri doivent également l'êtreSIGN_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 d'attribut pour 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écifierENCRYPT_AND_SIGN, SIGN_ONLYSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT, et DO_NOTHING attribuer des actions avec le. NETclient. 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 chiffrement SDK de AWS base de données. Déployez la nouvelle version sur tous les lecteurs avant de mettre à jour votre modèle de données pour l'inclureSIGN_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 chiffrement de AWS base de données SDK pour DynamoDB

Lorsque vous utilisez le chiffrement AWS de base de donnéesSDK, 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 utilisant le chiffrement de base de données de bas niveau pour SDK DynamoDB et des attributs AWS non signés autorisés définis par un préfixe distinctAPI.

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

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 recherche (facultatif)

SearchConfigDéfinit la version de la balise.

Le SearchConfig doit être spécifié pour utiliser un chiffrement consultable ou des balises signées.

Suite d'algorithmes (facultatif)

algorithmSuiteIdDéfinit la suite d'algorithmes SDK utilisée par AWS Database Encryption.

À moins que vous ne spécifiiez explicitement une suite d'algorithmes alternative, le chiffrement AWS de base de données SDK utilise la suite d'algorithmes par défaut. La suite d'algorithmes par défaut utilise l'GCMalgorithme AES - avec la dérivation des clés, les signatures numériques et l'engagement des clés. 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 SDK en charge par le chiffrement AWS de base de données, consultezSuites d'algorithmes prises en charge dans le chiffrement AWS de base de données SDK.

Pour sélectionner la suite d'GCMalgorithmes AES - sans signatures ECDSA numériques, incluez l'extrait suivant dans votre configuration de chiffrement de table.

AlgorithmSuiteId = DBEAlgorithmSuiteId.ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY_SYMSIG_HMAC_SHA384

Mettre à jour des éléments avec le chiffrement AWS de base de données SDK

Le chiffrement AWS de base de données SDK ne prend pas en charge ddb : UpdateItem 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. 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 l'utiliser CLOBBERpour effacer et remplacer tous les attributs lors de la sauvegarde après avoir mis à jour vos articles.