Utilisation du client de chiffrement DynamoDB pour Python - 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 Python

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, voir AWSDatabase Encryption SDK pour connaître la prise en charge des versions de DynamoDB.

Cette rubrique explique certaines fonctionnalités du client de chiffrement DynamoDB pour Python qui ne sont peut-être pas disponibles dans d'autres implémentations de langages de programmation. Ces fonctionnalités sont conçues pour faciliter l'utilisation du client de chiffrement DynamoDB de la manière la plus sécurisée possible. À moins que vous n'ayez un scénario inhabituel, nous vous recommandons de les utiliser.

Pour plus d'informations sur la programmation avec le client de chiffrement DynamoDB, consultez les exemples Python de ce guide, les exemples disponibles dans le aws-dynamodb-encryption-python GitHub référentiel et la documentation Python du client de chiffrement DynamoDB.

Classes d'annotations clientes

Le client de chiffrement DynamoDB pour Python inclut plusieurs classes d'assistance client qui reflètent les classes Boto 3 pour DynamoDB. Ces classes d'assistance sont conçues pour faciliter l'ajout du chiffrement et de la signature à votre application DynamoDB existante et pour éviter les problèmes les plus courants, comme suit :

  • Empêchez-vous de chiffrer la clé primaire de votre élément, soit en ajoutant une action de remplacement pour la clé primaire à l'AttributeActionsobjet, soit en déclenchant une exception si votre AttributeActions objet demande explicitement au client de chiffrer la clé primaire. Si l'action par défaut de votre objet AttributeActions est DO_NOTHING, les classes d'annotations clientes utilisent cette action pour la clé primaire. Sinon, elles utilisent SIGN_ONLY.

  • Créez un TableInfoobjet et renseignez le contexte de chiffrement DynamoDB en fonction d'un appel à DynamoDB. Cela permet de garantir que votre contexte de chiffrement DynamoDB est précis et que le client peut identifier la clé primaire.

  • Méthodes de support, telles que put_item etget_item, qui chiffrent et déchiffrent de manière transparente les éléments de votre tableau lorsque vous écrivez ou lisez depuis une table DynamoDB. Seule la méthode update_item n'est pas prise en charge.

Vous pouvez utiliser les classes d'annotations clientes au lieu d'interagir directement avec le chiffreur d'élément de bas niveau. Utilisez ces classes à moins que vous n'ayez besoin de définir des options avancées dans le chiffreur d'élément.

Les classes d'annotations clientes incluent les éléments suivants :

Pour utiliser les classes d'assistance du client, l'appelant doit être autorisé à appeler l'DescribeTableopération DynamoDB sur la table cible.

classe TableInfo

La TableInfoclasse est une classe d'assistance qui représente une table DynamoDB, avec des champs pour sa clé primaire et ses index secondaires. Elle vous permet d'obtenir des informations précises et en temps réel sur la table.

Si vous utilisez une classe d'annotations clientes, elle crée et utilise un objet TableInfo pour vous. Sinon, vous pouvez en créer un explicitement. Pour voir un exemple, consultez Utilisation du chiffreur d'élément.

Lorsque vous appelez la refresh_indexed_attributes méthode sur un TableInfo objet, elle renseigne les valeurs des propriétés de l'objet en appelant l'opération DynamoDB DescribeTable. L'interrogation de la table est beaucoup plus fiable que le codage en dur des noms d'index. La TableInfo classe inclut également une encryption_context_values propriété qui fournit les valeurs requises pour le contexte de chiffrement DynamoDB.

Pour utiliser refresh_indexed_attributes cette méthode, l'appelant doit être autorisé à appeler l'DescribeTableopération DynamoDB sur la table cible.

Actions d'attribut en Python

Les actions d'attribut informent le chiffreur d'élément des actions à exécuter sur chaque attribut de l'élément. Pour spécifier les actions d'attribut en Python, créez un objet AttributeActions avec une action par défaut et les exceptions éventuelles pour des attributs particuliers. Les valeurs valides sont définies dans le type énuméré CryptoAction.

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.

DO_NOTHING = 0 SIGN_ONLY = 1 ENCRYPT_AND_SIGN = 2

Par exemple, l'objet AttributeActions établit ENCRYPT_AND_SIGN comme valeur par défaut pour tous les attributs, et spécifie les exceptions pour les attributs ISBN et PublicationYear.

actions = AttributeActions( default_action=CryptoAction.ENCRYPT_AND_SIGN, attribute_actions={ 'ISBN': CryptoAction.DO_NOTHING, 'PublicationYear': CryptoAction.SIGN_ONLY } )

Si vous utilisez une classe d'annotations clientes, vous n'avez pas besoin de spécifier une action d'attribut pour les attributs de clé primaire. Les classes d'annotations clients vous empêchent de chiffrer votre clé primaire.

Si vous n'utilisez pas une classe d'annotations clientes et que l'action par défaut est ENCRYPT_AND_SIGN, vous devez spécifier une action pour la clé primaire. L'action recommandée pour les clés primaires est SIGN_ONLY. À des fins de simplification, utilisez la méthode set_index_keys, qui utilise SIGN_ONLY pour les clés primaires ou DO_NOTHING quand il s'agit de l'action par défaut.

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.

actions = AttributeActions( default_action=CryptoAction.ENCRYPT_AND_SIGN, ) actions.set_index_keys(*table_info.protected_index_keys())