

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.

# Client de chiffrement DynamoDB pour Python
<a name="python"></a>

**Note**  
Notre bibliothèque de chiffrement côté client a été [renommée AWS Database Encryption SDK](DDBEC-rename.md). 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, consultez la section [SDK AWS de chiffrement de base de données pour la prise en charge des versions DynamoDB](legacy-dynamodb-encryption-client.md#legacy-support).

Cette rubrique explique comment installer et utiliser le client de chiffrement DynamoDB pour Python. Vous pouvez trouver le code dans le [aws-dynamodb-encryption-python](https://github.com/aws/aws-dynamodb-encryption-python/)référentiel sur GitHub, y compris un [exemple de code](https://github.com/aws/aws-dynamodb-encryption-python/tree/master/examples) complet et testé pour vous aider à démarrer.

**Note**  
Versions 1. *x.* *x* et 2. *x.* *x* du client de chiffrement DynamoDB pour Python sont [end-of-support en phase à](what-is-database-encryption-sdk.md#support) compter de juillet 2022. Passez à une version plus récente dès que possible.

**Topics**
+ [Conditions préalables](#python-prerequisites)
+ [Installation](#python-installation)
+ [Utilisation du client de chiffrement DynamoDB pour Python](python-using.md)
+ [Exemples Python](python-examples.md)

## Conditions préalables
<a name="python-prerequisites"></a>

Avant d'installer le client de chiffrement Amazon DynamoDB pour Python, assurez-vous de remplir les conditions préalables suivantes.

**Version prise en charge de Python**  
Python 3.8 ou version ultérieure est requis par le client de chiffrement Amazon DynamoDB pour les versions 3.3.0 et ultérieures de Python. Pour télécharger Python, consultez [Téléchargements Python](https://www.python.org/downloads/).  
Les versions antérieures du client de chiffrement Amazon DynamoDB pour Python prennent en charge Python 2.7, Python 3.4 et versions ultérieures, mais nous vous recommandons d'utiliser la dernière version du client de chiffrement DynamoDB.

**Outil d'installation pip pour Python**  
Python 3.6 et versions ultérieures incluent **pip**, bien que vous souhaitiez peut-être le mettre à niveau. Pour plus d'informations sur la mise à niveau ou l'installation de pip, consultez [Installation](https://pip.pypa.io/en/latest/installation/) dans la documentation **pip**.

## Installation
<a name="python-installation"></a>

Utilisez **pip** pour installer le client de chiffrement Amazon DynamoDB pour Python, comme indiqué dans les exemples suivants.

**Pour installer la dernière version**  

```
pip install dynamodb-encryption-sdk
```

Pour plus d'informations sur l'utilisation de **pip** pour installer et mettre à niveau les packages, consultez [Installing Packages](https://packaging.python.org/tutorials/installing-packages/).

Le client de chiffrement DynamoDB nécessite la bibliothèque de chiffrement [sur toutes les plateformes](https://cryptography.io/en/latest/). Toutes les versions de **pip** installent et créent la bibliothèque de **chiffrement** sous Windows. **pip** 8.1 et les versions ultérieures installent et créent la bibliothèque de **chiffrement** sous Linux. Si vous utilisez une version antérieure de **pip** et que votre environnement Linux ne possède pas les outils nécessaires pour générer la bibliothèque de **chiffrement**, vous devez les installer. Pour plus d'informations, consultez [Création du chiffrement sous Linux](https://cryptography.io/en/latest/installation/#building-cryptography-on-linux).

Vous pouvez obtenir la dernière version de développement du client de chiffrement DynamoDB à partir du [aws-dynamodb-encryption-python](https://github.com/aws/aws-dynamodb-encryption-python/)référentiel. GitHub

Après avoir installé le client de chiffrement DynamoDB, commencez par consulter l'exemple de code Python présenté dans ce guide.

# Utilisation du client de chiffrement DynamoDB pour Python
<a name="python-using"></a>

**Note**  
Notre bibliothèque de chiffrement côté client a été [renommée AWS Database Encryption SDK](DDBEC-rename.md). 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, consultez la section [SDK AWS de chiffrement de base de données pour la prise en charge des versions DynamoDB](legacy-dynamodb-encryption-client.md#legacy-support).

Cette rubrique décrit certaines fonctionnalités du client de chiffrement DynamoDB pour Python qui ne sont peut-être pas disponibles dans d'autres implémentations de langage 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 qui soit. À moins que vous n'ayez un scénario inhabituel, nous vous recommandons de les utiliser.

Pour plus de détails sur la programmation avec le client de chiffrement DynamoDB, consultez les exemples [Python](python-examples.md) de ce guide, [les exemples du](https://github.com/aws/aws-dynamodb-encryption-python/tree/master/examples) référentiel et aws-dynamodb-encryption-python la documentation GitHub [Python](https://aws-dynamodb-encryption-python.readthedocs.io/en/latest/) du client de chiffrement DynamoDB.

**Topics**
+ [Classes d'annotations clientes](#python-helpers)
+ [TableInfo classe](#table-info)
+ [Actions d'attribut en Python](#python-attribute-actions)

## Classes d'annotations clientes
<a name="python-helpers"></a>

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 de chiffrement et de 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'[AttributeActions](#python-attribute-actions)objet, soit en lançant 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 [TableInfo objet](#python-helpers) et renseignez le contexte de [chiffrement DynamoDB](concepts.md#encryption-context) 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.
+ Support des méthodes, telles que `put_item` et`get_item`, qui chiffrent et déchiffrent de manière transparente les éléments de votre table lorsque vous écrivez ou lisez dans 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](DDBEC-legacy-concepts.md#item-encryptor) 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 :
+ [EncryptedTable](https://aws-dynamodb-encryption-python.readthedocs.io/en/latest/lib/encrypted/table.html#module-dynamodb_encryption_sdk.encrypted.table)pour les applications qui utilisent la ressource [Table](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html#table) dans DynamoDB pour traiter une table à la fois.
+ [EncryptedResource](https://aws-dynamodb-encryption-python.readthedocs.io/en/latest/lib/encrypted/resource.html)pour les applications qui utilisent la classe [Service Resource](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html#service-resource) dans DynamoDB pour le traitement par lots.
+ [EncryptedClient](https://aws-dynamodb-encryption-python.readthedocs.io/en/latest/lib/encrypted/client.html)pour les applications qui utilisent le [client de niveau inférieur dans DynamoDB](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html#client).

Pour utiliser les classes d'assistance client, l'appelant doit être autorisé à appeler l'opération DynamoDB sur la table cible [DescribeTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeTable.html).

## TableInfo classe
<a name="table-info"></a>

La [TableInfo](https://aws-dynamodb-encryption-python.readthedocs.io/en/latest/lib/tools/structures.html#dynamodb_encryption_sdk.structures.TableInfo)classe est une classe auxiliaire 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](#python-helpers), elle crée et utilise un objet `TableInfo` pour vous. Sinon, vous pouvez en créer un explicitement. Pour obtenir un exemple, consultez [Utilisation du chiffreur d'élément](python-examples.md#python-example-item-encryptor).

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](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeTable.html). 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](concepts.md#encryption-context). 

Pour utiliser la `refresh_indexed_attributes` méthode, l'appelant doit être autorisé à appeler l'opération [DescribeTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeTable.html)DynamoDB sur la table cible.

## Actions d'attribut en Python
<a name="python-attribute-actions"></a>

Les [actions d'attribut](DDBEC-legacy-concepts.md#legacy-attribute-actions) 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](data-model.md).

```
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](#python-helpers), 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\$1ONLY pour les clés primaires ou DO\$1NOTHING 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())
```

# Exemple de code pour le client de chiffrement DynamoDB pour Python
<a name="python-examples"></a>

**Note**  
Notre bibliothèque de chiffrement côté client a été [renommée AWS Database Encryption SDK](DDBEC-rename.md). 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, consultez la section [SDK AWS de chiffrement de base de données pour la prise en charge des versions DynamoDB](legacy-dynamodb-encryption-client.md#legacy-support).

Les exemples suivants montrent comment utiliser le client de chiffrement DynamoDB pour Python afin de protéger les données DynamoDB dans votre application. Vous pouvez trouver d'autres exemples (et apporter les vôtres) dans le répertoire des [exemples](https://github.com/aws/aws-dynamodb-encryption-python/tree/master/examples) du [aws-dynamodb-encryption-python](https://github.com/aws/aws-dynamodb-encryption-python/)référentiel sur GitHub.

**Topics**
+ [Utiliser la classe d'assistance EncryptedTable client](#python-example-table)
+ [Utilisation du chiffreur d'élément](#python-example-item-encryptor)

## Utiliser la classe d'assistance EncryptedTable client
<a name="python-example-table"></a>

L'exemple suivant montre comment utiliser le [fournisseur KMS direct](direct-kms-provider.md) avec la `EncryptedTable` [classe d'annotations cliente](python-using.md#python-helpers). Cet exemple utilise le même [fournisseur CMP](DDBEC-legacy-concepts.md#concept-material-provider) que l'exemple [Utilisation du chiffreur d'élément](#python-example-item-encryptor) qui suit. Cependant, il utilise la classe `EncryptedTable` au lieu d'interagir directement avec le [chiffreur d'élément](DDBEC-legacy-concepts.md#item-encryptor) de bas niveau.

En comparant ces exemples, vous pouvez voir le travail que la classe d'annotations cliente effectue à votre place. Cela implique de créer le contexte de [chiffrement DynamoDB](concepts.md#encryption-context) et de s'assurer que les attributs de clé primaire sont toujours signés, mais jamais chiffrés. Pour créer le contexte de chiffrement et découvrir la clé primaire, les classes d'assistance client appellent l'opération DynamoDB [DescribeTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeTable.html). Pour exécuter ce code, vous devez avoir l'autorisation d'appeler cette opération.

**Consultez l'exemple de code complet** : [aws\$1kms\$1encrypted\$1table.py](https://github.com/aws/aws-dynamodb-encryption-python/blob/master/examples/src/dynamodb_encryption_sdk_examples/aws_kms_encrypted_table.py)

Étape 1 : Créer la table  
Commencez par créer une instance d'une table DynamoDB standard avec le nom de la table.  

```
table_name='test-table'
table = boto3.resource('dynamodb').Table(table_name)
```

Étape 2 : Créer un fournisseur CMP  
Créez une instance du [fournisseur CMP](crypto-materials-providers.md) que vous avez sélectionné.  
Cet exemple utilise le [fournisseur KMS direct](direct-kms-provider.md), mais vous pouvez utiliser n'importe quel fournisseur CMP compatible. Pour créer un fournisseur KMS direct, spécifiez un [AWS KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys). Cet exemple utilise le Amazon Resource Name (ARN) du AWS KMS key, mais vous pouvez utiliser n'importe quel identifiant de clé valide.  

```
kms_key_id='arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'
kms_cmp = AwsKmsCryptographicMaterialsProvider(key_id=kms_key_id)
```

Étape 3 : Créer l'objet actions d'attribut  
Les [actions d'attribut](DDBEC-legacy-concepts.md#legacy-attribute-actions) informent le chiffreur d'élément des actions à exécuter sur chaque attribut de l'élément. L'objet `AttributeActions` de l'exemple chiffre et signe tous les éléments à l'exception de l'attribut `test`, qui est ignoré.  
Ne spécifiez pas d'actions d'attribut pour les attributs de clé primaire quand vous utilisez une classe d'annotations cliente. La classe `EncryptedTable` signe, mais ne chiffre jamais, les attributs de clé primaire.  

```
actions = AttributeActions(
    default_action=CryptoAction.ENCRYPT_AND_SIGN,
    attribute_actions={'test': CryptoAction.DO_NOTHING}
)
```

Étape 4 : Créer la table chiffrée  
Créez la table chiffrée à l'aide de la table standard, du fournisseur KMS direct et des actions d'attribut. Cette étape termine la configuration.   

```
encrypted_table = EncryptedTable(
    table=table,
    materials_provider=kms_cmp,
    attribute_actions=actions
)
```

Étape 5 : Placer l'élément en texte brut dans la table  
Lorsque vous appelez la `put_item` méthode sur le`encrypted_table`, les éléments de votre table sont chiffrés, signés et ajoutés de manière transparente à votre table DynamoDB.  
Tout d'abord, définissez l'élément de table.  

```
plaintext_item = {
    'partition_attribute': 'value1',
    'sort_attribute': 55
    'example': 'data',
    'numbers': 99,
    'binary': Binary(b'\x00\x01\x02'),
    'test': 'test-value'
}
```
Puis, insérez-le dans la table.  

```
encrypted_table.put_item(Item=plaintext_item)
```

Pour obtenir l'élément de la table DynamoDB sous sa forme cryptée, appelez `get_item` la méthode sur l'objet. `table` Pour obtenir l'élément chiffré, appelez la méthode `get_item` sur l'objet `encrypted_table`.

## Utilisation du chiffreur d'élément
<a name="python-example-item-encryptor"></a>

Cet exemple montre comment interagir directement avec le chiffreur d'[éléments dans le client de chiffrement DynamoDB lors du chiffrement d'éléments de table, au lieu d'utiliser les classes d'[assistance du client qui interagissent avec le](python-using.md#python-helpers) crypteur](DDBEC-legacy-concepts.md#item-encryptor) d'éléments à votre place. 

Lorsque vous utilisez cette technique, vous créez le contexte de chiffrement DynamoDB et l'objet `CryptoConfig` de configuration () manuellement. Vous cryptez également les éléments lors d'un appel et vous les placez dans votre table DynamoDB lors d'un appel distinct. Cela vous permet de personnaliser vos `put_item` appels et d'utiliser le client de chiffrement DynamoDB pour chiffrer et signer les données structurées qui ne sont jamais envoyées à DynamoDB.

Cet exemple utilise le [fournisseur KMS direct](direct-kms-provider.md), mais vous pouvez utiliser n'importe quel fournisseur CMP compatible.

**Voir l'exemple de code complet** : [aws\$1kms\$1encrypted\$1item.py](https://github.com/aws/aws-dynamodb-encryption-python/blob/master/examples/src/dynamodb_encryption_sdk_examples/aws_kms_encrypted_item.py)

Étape 1 : Créer la table  
Commencez par créer une instance d'une ressource de table DynamoDB standard avec le nom de la table.  

```
table_name='test-table'
table = boto3.resource('dynamodb').Table(table_name)
```

Étape 2 : Créer un fournisseur CMP  
Créez une instance du [fournisseur CMP](crypto-materials-providers.md) que vous avez sélectionné.  
Cet exemple utilise le [fournisseur KMS direct](direct-kms-provider.md), mais vous pouvez utiliser n'importe quel fournisseur CMP compatible. Pour créer un fournisseur KMS direct, spécifiez un [AWS KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys). Cet exemple utilise le Amazon Resource Name (ARN) du AWS KMS key, mais vous pouvez utiliser n'importe quel identifiant de clé valide.  

```
kms_key_id='arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'
kms_cmp = AwsKmsCryptographicMaterialsProvider(key_id=kms_key_id)
```

Étape 3 : Utiliser la classe TableInfo d'assistance  
Pour obtenir des informations sur la table à partir de DynamoDB, créez une instance de [TableInfo](python-using.md#python-helpers)la classe d'assistance. Lorsque vous travaillez directement avec le chiffreur d'élément, vous devez créer une instance `TableInfo` et appeler ses méthodes. Les [classes d'annotation clientes](python-using.md#python-helpers) le font pour vous.  
La `refresh_indexed_attributes` méthode `TableInfo` utilise l'opération [DescribeTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeTable.html)DynamoDB pour obtenir des informations précises et en temps réel sur la table. Elles incluent la clé primaire et ses index secondaires locaux et globaux. L'appelant doit avoir l'autorisation d'appeler `DescribeTable`.  

```
table_info = TableInfo(name=table_name)
table_info.refresh_indexed_attributes(table.meta.client)
```

Étape 4 : Création du contexte de chiffrement DynamoDB  
Le contexte de [chiffrement DynamoDB](concepts.md#encryption-context) contient des informations sur la structure de la table et sur la manière dont elle est chiffrée et signée. Cet exemple crée un contexte de chiffrement DynamoDB de manière explicite, car il interagit avec le chiffreur d'éléments. Les [classes d'assistance client](python-using.md#python-helpers) créent le contexte de chiffrement DynamoDB pour vous.   
Pour obtenir la clé de partition et la clé de tri, vous pouvez utiliser les propriétés de la classe d'[TableInfo](python-using.md#python-helpers)assistance.   

```
index_key = {
    'partition_attribute': 'value1',
    'sort_attribute': 55
}

encryption_context = EncryptionContext(
    table_name=table_name,
    partition_key_name=table_info.primary_index.partition,
    sort_key_name=table_info.primary_index.sort,
    attributes=dict_to_ddb(index_key)
)
```

Étape 5 : Créer l'objet actions d'attribut  
Les [actions d'attribut](DDBEC-legacy-concepts.md#legacy-attribute-actions) informent le chiffreur d'élément des actions à exécuter sur chaque attribut de l'élément. L'objet `AttributeActions` de l'exemple chiffre et signe tous les éléments à l'exception des attributs de clé primaire, qui sont signés, mais pas chiffrés, et de l'attribut `test`, qui est ignoré.  
Lorsque vous interagissez directement avec le chiffreur d'élément et que votre action par défaut est `ENCRYPT_AND_SIGN`, vous devez spécifier une autre action pour la clé primaire. Vous pouvez utiliser la méthode `set_index_keys`, qui utilise `SIGN_ONLY` pour la clé primaire, ou `DO_NOTHING` s'il s'agit de l'action par défaut.  
Pour spécifier la clé primaire, cet exemple utilise les clés d'index de l'[TableInfo](python-using.md#python-helpers)objet, qui sont renseignées par un appel à DynamoDB. Cette technique est plus sûre que le codage en dur des noms de clé primaire.  

```
actions = AttributeActions(
    default_action=CryptoAction.ENCRYPT_AND_SIGN,
    attribute_actions={'test': CryptoAction.DO_NOTHING}
)
actions.set_index_keys(*table_info.protected_index_keys())
```

Étape 6 : Créer la configuration pour l'élément  
Pour configurer le client de chiffrement DynamoDB, utilisez les objets que vous venez de créer dans [CryptoConfig](https://aws-dynamodb-encryption-python.readthedocs.io/en/latest/lib/encrypted/config.html)une configuration pour l'élément de table. Les classes d'assistance client créent le CryptoConfig pour vous.   

```
crypto_config = CryptoConfig(
    materials_provider=kms_cmp,
    encryption_context=encryption_context,
    attribute_actions=actions
)
```

Étape 7 : Chiffrer l'élément  
Cette étape chiffre et signe l'élément, mais ne le place pas dans la table DynamoDB.   
Lorsque vous utilisez une classe d'assistance client, vos éléments sont chiffrés et signés de manière transparente, puis ajoutés à votre table DynamoDB lorsque vous appelez la méthode de la `put_item` classe d'assistance. Lorsque vous utilisez le chiffreur d'élément directement, les actions de chiffrage et de placement sont indépendantes.  
Tout d'abord, créez un élément en texte brut.  

```
plaintext_item = {
    'partition_attribute': 'value1',
    'sort_key': 55,
    'example': 'data',
    'numbers': 99,
    'binary': Binary(b'\x00\x01\x02'),
    'test': 'test-value'
}
```
Puis, chiffrez-le et signez-le. La méthode `encrypt_python_item` requiert l'objet de configuration `CryptoConfig`.  

```
encrypted_item = encrypt_python_item(plaintext_item, crypto_config)
```

Étape 8 : Placer l'élément dans la table  
Cette étape place l'élément chiffré et signé dans la table DynamoDB.  

```
table.put_item(Item=encrypted_item)
```

Pour afficher l'élément chiffré, appelez la méthode `get_item` sur l'objet original `table`, et non sur l'objet `encrypted_table`. Elle obtient l'élément de la table DynamoDB sans le vérifier et le déchiffrer.

```
encrypted_item = table.get_item(Key=partition_key)['Item']
```

L'illustration suivante présente une partie d'un exemple d'élément de table chiffré et signé.

Les valeurs des attributs chiffrés sont des données binaires. Les noms et valeurs des attributs de clé primaire (`partition_attribute` et `sort_attribute`) et l'attribut `test` demeurent en texte brut. La sortie affiche aussi l'attribut qui contient la signature (`*amzn-ddb-map-sig*`) et l'[attribut de description des matériaux](DDBEC-legacy-concepts.md#legacy-material-description) (`*amzn-ddb-map-desc*`).

![\[Extrait d'un élément de table chiffré et signé\]](http://docs.aws.amazon.com/fr_fr/database-encryption-sdk/latest/devguide/images/encrypted-item-closeup.png)
