

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# DynamoDB Encryption Client untuk Python
<a name="python"></a>

**catatan**  
Pustaka enkripsi sisi klien kami [diubah namanya menjadi AWS Database Encryption SDK](DDBEC-rename.md). Topik berikut memberikan informasi tentang versi 1. *x* —2. *x* dari DynamoDB Encryption Client untuk Java dan versi 1. *x* —3. *x* dari Klien Enkripsi DynamoDB untuk Python. Untuk informasi selengkapnya, lihat [SDK Enkripsi AWS Database untuk dukungan versi DynamoDB](legacy-dynamodb-encryption-client.md#legacy-support).

Topik ini menjelaskan cara menginstal dan menggunakan DynamoDB Encryption Client untuk Python. Anda dapat menemukan kode di [aws-dynamodb-encryption-python](https://github.com/aws/aws-dynamodb-encryption-python/)repositori GitHub, termasuk [kode sampel](https://github.com/aws/aws-dynamodb-encryption-python/tree/master/examples) lengkap dan teruji untuk membantu Anda memulai.

**catatan**  
Versi 1. *x*. *x* dan 2. *x*. *x* [dari Klien Enkripsi DynamoDB untuk Python sedang end-of-support dalam fase efektif Juli 2022.](what-is-database-encryption-sdk.md#support) Tingkatkan ke versi yang lebih baru sesegera mungkin.

**Topics**
+ [Prasyarat](#python-prerequisites)
+ [Penginstalan](#python-installation)
+ [Menggunakan DynamoDB Encryption Client untuk Python](python-using.md)
+ [Contoh Python](python-examples.md)

## Prasyarat
<a name="python-prerequisites"></a>

Sebelum Anda menginstal Amazon DynamoDB Encryption Client untuk Python, pastikan Anda memiliki prasyarat berikut.

**Versi Python yang didukung**  
Python 3.8 atau yang lebih baru diperlukan oleh Klien Enkripsi Amazon DynamoDB untuk Python versi 3.3.0 dan yang lebih baru. Untuk mengunduh Python, lihat [Unduh Python](https://www.python.org/downloads/).  
Versi sebelumnya dari Amazon DynamoDB Encryption Client untuk Python mendukung Python 2.7 dan Python 3.4 dan yang lebih baru, tetapi kami menyarankan Anda menggunakan versi terbaru dari DynamoDB Encryption Client.

**Alat instalasi pip untuk Python**  
Python 3.6 dan yang lebih baru menyertakan **pip**, meskipun Anda mungkin ingin memutakhirkannya. Untuk informasi selengkapnya tentang meningkatkan atau menginstal pip, lihat [Instalasi](https://pip.pypa.io/en/latest/installation/) dalam dokumentasi **pip**.

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

Gunakan **pip** untuk menginstal Amazon DynamoDB Encryption Client, seperti yang ditunjukkan dalam contoh berikut.

**Pasang versi terbaru**  

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

Untuk detail lebih lanjut tentang menggunakan **pip** untuk menginstal dan meng-upgrade paket, lihat [Menginstal Paket](https://packaging.python.org/tutorials/installing-packages/).

DynamoDB Encryption Client memerlukan [pustaka kriptografi](https://cryptography.io/en/latest/) di semua platform. Semua versi **pip** menginstal dan membangun **kriptografi** pada pip. **Windows** 8.1 dan versi lebih baru menginstal dan membangun **kriptografi** di Linux. Jika Anda menggunakan versi sebelumnya dari **pip** dan lingkungan Linux Anda tidak memiliki alat yang diperlukan untuk membangun **pustaka** kriptografi, Anda perlu menginstalnya. Untuk informasi selengkapnya, lihat [Membangun kriptografi di Linux](https://cryptography.io/en/latest/installation/#building-cryptography-on-linux).

Anda bisa mendapatkan versi pengembangan terbaru dari DynamoDB Encryption Client dari [aws-dynamodb-encryption-python](https://github.com/aws/aws-dynamodb-encryption-python/)repositori. GitHub

Setelah Anda menginstal DynamoDB Encryption Client, mulailah dengan melihat kode contoh Python dalam panduan ini.

# Menggunakan DynamoDB Encryption Client untuk Python
<a name="python-using"></a>

**catatan**  
Pustaka enkripsi sisi klien kami [diubah namanya menjadi AWS Database Encryption SDK](DDBEC-rename.md). Topik berikut memberikan informasi tentang versi 1. *x* —2. *x* dari DynamoDB Encryption Client untuk Java dan versi 1. *x* —3. *x* dari Klien Enkripsi DynamoDB untuk Python. Untuk informasi selengkapnya, lihat [SDK Enkripsi AWS Database untuk dukungan versi DynamoDB](legacy-dynamodb-encryption-client.md#legacy-support).

Topik ini menjelaskan beberapa fitur DynamoDB Encryption Client untuk Python yang mungkin tidak ditemukan dalam implementasi bahasa pemrograman lainnya. Fitur-fitur ini dirancang untuk membuatnya lebih mudah untuk menggunakan DynamoDB Encryption Client dengan cara yang paling aman. Jika Anda tidak memiliki kasus penggunaan yang tidak biasa, kami sarankan Anda menggunakannya.

[Untuk detail tentang pemrograman dengan Klien Enkripsi DynamoDB, lihat contoh [Python](python-examples.md) dalam panduan ini, contoh di repositori GitHub aktif, dan dokumentasi [Python aws-dynamodb-encryption-python](https://aws-dynamodb-encryption-python.readthedocs.io/en/latest/) untuk Klien Enkripsi DynamoDB.](https://github.com/aws/aws-dynamodb-encryption-python/tree/master/examples)

**Topics**
+ [Kelas pembantu klien](#python-helpers)
+ [TableInfo kelas](#table-info)
+ [Tindakan atribut di Python](#python-attribute-actions)

## Kelas pembantu klien
<a name="python-helpers"></a>

DynamoDB Encryption Client untuk Python termasuk beberapa kelas pembantu klien yang mencerminkan kelas-kelas Boto 3 untuk DynamoDB. Kelas-kelas pembantu ini dirancang untuk membuatnya lebih mudah untuk menambahkan enkripsi dan penandatanganan ke aplikasi DynamoDB yang ada dan menghindari masalah yang paling umum, sebagai berikut:
+ Mencegah Anda mengenkripsi kunci utama dalam item Anda, baik dengan menambahkan tindakan penggantian untuk kunci utama ke [AttributeActions](#python-attribute-actions)objek, atau dengan melempar pengecualian jika `AttributeActions` objek Anda secara eksplisit memberi tahu klien untuk mengenkripsi kunci utama. Jika tindakan default di objek `AttributeActions` Anda adalah `DO_NOTHING`, kelas pembantu klien menggunakan tindakan tersebut untuk kunci primer. Jika tidak, mereka menggunakan `SIGN_ONLY`.
+ Buat [TableInfo objek](#python-helpers) dan isi konteks [enkripsi DynamoDB berdasarkan panggilan ke DynamoDB](concepts.md#encryption-context). Ini membantu untuk memastikan bahwa konteks enkripsi DynamoDB Anda akurat dan klien dapat mengidentifikasi kunci utama.
+ Metode Support, seperti `put_item` dan `get_item`, yang secara transparan mengenkripsi dan mendekripsi tabel item ketika Anda menulis atau membaca dari tabel DynamoDB. Hanya metode `update_item` yang tidak didukung.

Anda dapat menggunakan kelas pembantu klien,alih-alih berinteraksi langsung dengan [enkriptor item](DDBEC-legacy-concepts.md#item-encryptor) yang tingkatnya lebih rendah. Gunakan kelas-kelas ini kecuali Anda perlu mengatur opsi lanjutan dalam enkriptor item.

Kelas pembantu klien meliputi:
+ [EncryptedTable](https://aws-dynamodb-encryption-python.readthedocs.io/en/latest/lib/encrypted/table.html#module-dynamodb_encryption_sdk.encrypted.table)untuk aplikasi yang menggunakan sumber daya [Tabel](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html#table) di DynamoDB untuk memproses satu tabel pada satu waktu.
+ [EncryptedResource](https://aws-dynamodb-encryption-python.readthedocs.io/en/latest/lib/encrypted/resource.html)untuk aplikasi yang menggunakan kelas [Service Resource](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html#service-resource) di DynamoDB untuk pemrosesan batch.
+ [EncryptedClient](https://aws-dynamodb-encryption-python.readthedocs.io/en/latest/lib/encrypted/client.html)untuk aplikasi yang menggunakan [klien tingkat rendah di DynamoDB](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html#client).

Untuk menggunakan kelas pembantu klien, pemanggil harus memiliki izin untuk memanggil operasi DynamoDB pada tabel target [DescribeTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeTable.html).

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

[TableInfo](https://aws-dynamodb-encryption-python.readthedocs.io/en/latest/lib/tools/structures.html#dynamodb_encryption_sdk.structures.TableInfo)Kelas adalah kelas pembantu yang mewakili tabel DynamoDB, lengkap dengan bidang untuk kunci utama dan indeks sekunder. Ini membantu Anda untuk mendapatkan informasi akurat dan real-time tentang tabel.

Jika Anda menggunakan[kelas pembantu klien](#python-helpers), itu menciptakan dan menggunakan objek `TableInfo` untuk Anda. Jika tidak, Anda dapat membuat satu secara eksplisit. Sebagai contoh, lihat [Gunakan enkriptor item](python-examples.md#python-example-item-encryptor).

Ketika Anda memanggil `refresh_indexed_attributes` metode pada `TableInfo` objek, itu mengisi nilai properti objek dengan memanggil operasi DynamoDB [DescribeTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeTable.html). Kueri tabel jauh lebih dapat diandalkan daripada nama indeks hard-coding. Kelas `TableInfo` juga mencakup sebuah properti `encryption_context_values` yang menyediakan nilai-nilai yang diperlukan untuk [konteks enkripsi DynamoDB](concepts.md#encryption-context). 

Untuk menggunakan `refresh_indexed_attributes` metode ini, pemanggil harus memiliki izin untuk memanggil operasi [DescribeTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeTable.html)DynamoDB pada tabel target.

## Tindakan atribut di Python
<a name="python-attribute-actions"></a>

[Tindakan atribut](DDBEC-legacy-concepts.md#legacy-attribute-actions) memberitahukan kepada enkriptor item tentang tindakan yang dilakukan pada setiap atribut item. Untuk menentukan tindakan atribut di Python, buat objek `AttributeActions` dengan tindakan default dan pengecualian untuk atribut tertentu. Nilai-nilai yang valid adalah untuk tindakan atribut yang didefinisikan dalam jenis `CryptoAction` yang disebutkan.

**penting**  
Setelah Anda menggunakan tindakan atribut untuk mengenkripsi item tabel Anda, menambahkan atau menghapus atribut dari model data Anda dapat menyebabkan kesalahan validasi tanda tangan yang mencegah Anda mendekripsi data Anda. Untuk penjelasan detail, lihat [Mengubah model data Anda](data-model.md).

```
DO_NOTHING = 0
SIGN_ONLY = 1
ENCRYPT_AND_SIGN = 2
```

Misalnya, objek `AttributeActions` ini menetapkan `ENCRYPT_AND_SIGN` sebagai default untuk semua atribut, dan menentukan pengecualian untuk atribut `ISBN` dan `PublicationYear`.

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

Jika Anda menggunakan sebuah [kelas pembantu klien](#python-helpers), Anda tidak perlu menentukan tindakan atribut untuk atribut kunci primer. Kelas pembantu klien mencegah Anda mengenkripsi kunci utama Anda.

Jika Anda tidak menggunakan kelas pembantu klien dan tindakan default adalah `ENCRYPT_AND_SIGN`, Anda harus menentukan tindakan untuk kunci primer. Tindakan yang direkomendasikan untuk kunci primer adalah `SIGN_ONLY`. Untuk mempermudahnya, gunakan metode `set_index_keys`, yang menggunakan SIGN\$1ONLY untuk kunci primer, atau DO\$1NOTHING, ketika itu adalah tindakan default.

**Awas**  
Jangan mengenkripsi atribut kunci utama. Atribut tersebut harus tetap dalam plaintext sehingga DynamoDB dapat menemukan item tanpa memindai keseluruhan tabel.

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

# Contoh kode untuk DynamoDB Encryption Client untuk Python
<a name="python-examples"></a>

**catatan**  
Pustaka enkripsi sisi klien kami [diubah namanya menjadi AWS Database Encryption SDK](DDBEC-rename.md). Topik berikut memberikan informasi tentang versi 1. *x* —2. *x* dari DynamoDB Encryption Client untuk Java dan versi 1. *x* —3. *x* dari Klien Enkripsi DynamoDB untuk Python. Untuk informasi selengkapnya, lihat [SDK Enkripsi AWS Database untuk dukungan versi DynamoDB](legacy-dynamodb-encryption-client.md#legacy-support).

Contoh berikut menunjukkan cara menggunakan DynamoDB Encryption Client untuk Python guna melindungi data DynamoDB dalam aplikasi Anda. Anda dapat menemukan lebih banyak contoh (dan berkontribusi sendiri) di direktori [contoh [aws-dynamodb-encryption-python](https://github.com/aws/aws-dynamodb-encryption-python/)](https://github.com/aws/aws-dynamodb-encryption-python/tree/master/examples)repositori di. GitHub

**Topics**
+ [Gunakan kelas pembantu EncryptedTable klien](#python-example-table)
+ [Gunakan enkriptor item](#python-example-item-encryptor)

## Gunakan kelas pembantu EncryptedTable klien
<a name="python-example-table"></a>

Contoh berikut menunjukkan cara menggunakan [Provider KMS Langsung](direct-kms-provider.md)dengan [kelas pembantu klien](python-using.md#python-helpers) `EncryptedTable`. Contoh ini menggunakan [penyedia bahan kriptografi](DDBEC-legacy-concepts.md#concept-material-provider) yang sama seperti contoh [Gunakan enkriptor item](#python-example-item-encryptor) berikut. Namun, contoh tersebut menggunakan kelas `EncryptedTable` alih-alih berinteraksi langsung dengan [enkriptor item](DDBEC-legacy-concepts.md#item-encryptor) yang tingkatnya lebih rendah.

Dengan membandingkan contoh-contoh ini, Anda dapat melihat pekerjaan yang kelas pembantu klien untuk Anda. Hal ini mencakup pembuatan [konteks enkripsi DynamoDB](concepts.md#encryption-context) dan memastikan atribut kunci primer selalu ditandatangani, tetapi tidak pernah dienkripsi. Untuk membuat konteks enkripsi dan menemukan kunci utama, kelas pembantu klien memanggil operasi DynamoDB [DescribeTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeTable.html). Untuk menjalankan kode ini, Anda harus memiliki izin untuk memanggil operasi ini.

**Lihat contoh kode lengkap**: [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)

Langkah 1: Buat Tabel  
Mulailah dengan membuat sebuah instans dari tabel DynamoDB standar dengan nama tabel.  

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

Langkah 2: Buat penyedia bahan kriptografi  
Buat instans [penyedia bahan kriptografi](crypto-materials-providers.md) (CMP) yang Anda pilih.  
Contoh ini menggunakan [Penyedia KMS Langsung](direct-kms-provider.md), tetapi Anda dapat menggunakan CMP mana pun yang kompatibel. Untuk membuat Penyedia KMS Langsung, tentukan. [AWS KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys) Contoh ini menggunakan Amazon Resource Name (ARN) dari AWS KMS key, tetapi Anda dapat menggunakan pengenal kunci yang valid.  

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

Langkah 3: Buat objek tindakan atribut  
[Tindakan atribut](DDBEC-legacy-concepts.md#legacy-attribute-actions) memberitahukan kepada enkriptor item tentang tindakan yang dilakukan pada setiap atribut item. Objek `AttributeActions` dalam contoh ini mengenkripsi dan menandatangani semua item kecuali untuk atribut `test`, yang diabaikan.  
Jangan tentukan tindakan atribut untuk atribut kunci primer saat Anda menggunakan kelas pembantu klien. Kelas `EncryptedTable` menandatangani, tetapi tidak pernah mengenkripsi, atribut kunci utama.  

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

Langkah 4: Buat tabel terenkripsi  
Membuat tabel dienkripsi menggunakan tabel standar, Penyedia KMS Langsung, dan tindakan atribut. Langkah ini melengkapi konfigurasi.   

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

Langkah 5: Masukkan item plaintext ke dalam tabel  
Ketika Anda memanggil metode `put_item` di `encrypted_table`, item tabel Anda secara transparan dienkripsi, ditandatangani, dan ditambahkan ke tabel DynamoDB Anda.  
Pertama, tentukan item tabel.  

```
plaintext_item = {
    'partition_attribute': 'value1',
    'sort_attribute': 55
    'example': 'data',
    'numbers': 99,
    'binary': Binary(b'\x00\x01\x02'),
    'test': 'test-value'
}
```
Lalu, taruh di tabel.  

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

Untuk mendapatkan item dari daftar tabel DynamoDB dalam bentuk terenkripsi, panggil metode `get_item` di objek `table`. Untuk mendapatkan item didekripsi, panggil metode `get_item` di objek `encrypted_table`.

## Gunakan enkriptor item
<a name="python-example-item-encryptor"></a>

Contoh ini menunjukkan kepada Anda bagaimana untuk berinteraksi langsung dengan [enkriptor item](DDBEC-legacy-concepts.md#item-encryptor) di DynamoDB Encryption Client ketika mengenkripsi item tabel, alih-alih menggunakan [kelas pembantu klien](python-using.md#python-helpers) yang berinteraksi dengan enkriptor item untuk Anda. 

Bila Anda menggunakan teknik ini, Anda membuat konteks enkripsi DynamoDB dan konfigurasi objek (`CryptoConfig`) secara manual. Anda juga mengenkripsi item dalam satu panggilan dan menempatkannya dalam tabel DynamoDB Anda dalam panggilan terpisah. Hal ini memungkinkan Anda untuk menyesuaikan panggilan `put_item` Anda dan menggunakan DynamoDB Encryption Client untuk mengenkripsi dan menandatangani data terstruktur yang tidak pernah dikirim ke DynamoDB.

Contoh ini menggunakan [Penyedia KMS Langsung](direct-kms-provider.md), tetapi Anda dapat menggunakan CMP kompatibel.

**Lihat contoh kode lengkap**: [aws\$1kms\$1encrypted\$1table.py](https://github.com/aws/aws-dynamodb-encryption-python/blob/master/examples/src/dynamodb_encryption_sdk_examples/aws_kms_encrypted_item.py)

Langkah 1: Buat Tabel  
Mulailah dengan membuat sebuah instans dari sumber daya tabel DynamoDB standar dengan nama tabel.  

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

Langkah 2: Buat penyedia bahan kriptografi  
Buat instans [penyedia bahan kriptografi](crypto-materials-providers.md) (CMP) yang Anda pilih.  
Contoh ini menggunakan [Penyedia KMS Langsung](direct-kms-provider.md), tetapi Anda dapat menggunakan CMP mana pun yang kompatibel. Untuk membuat Penyedia KMS Langsung, tentukan. [AWS KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys) Contoh ini menggunakan Amazon Resource Name (ARN) dari AWS KMS key, tetapi Anda dapat menggunakan pengenal kunci yang valid.  

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

Langkah 3: Gunakan TableInfo kelas pembantu  
Untuk mendapatkan informasi tentang tabel dari DynamoDB, buat instance dari [TableInfo](python-using.md#python-helpers)kelas helper. Apabila Anda bekerja secara langsung dengan enkriptor item, Anda perlu membuat instans `TableInfo` dan memanggil metodenya. [Kelas pembantu klien](python-using.md#python-helpers) melakukan ini untuk Anda.  
`refresh_indexed_attributes`Metode `TableInfo` menggunakan operasi [DescribeTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeTable.html)DynamoDB untuk mendapatkan informasi real-time dan akurat tentang tabel. Ini termasuk kunci primer dan indeks sekunder lokal dan global. Pemanggil perlu memiliki izin untuk memanggil `DescribeTable`.  

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

Langkah 4: Buat konteks enkripsi DynamoDB  
[Konteks enkripsi DynamoDB](concepts.md#encryption-context) berisi informasi tentang struktur tabel dan bagaimana tabel itu dienkripsi dan ditandatangani. Contoh ini menciptakan konteks enkripsi DynamoDB secara eksplisit, karena berinteraksi dengan enkriptor item. [Kelas pembantu klien](python-using.md#python-helpers) membuat konteks enkripsi DynamoDB untuk Anda.   
Untuk mendapatkan kunci partisi dan kunci sortir, Anda dapat menggunakan properti kelas [TableInfo](python-using.md#python-helpers)pembantu.   

```
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)
)
```

Langkah 5: Buat objek tindakan atribut  
[Tindakan atribut](DDBEC-legacy-concepts.md#legacy-attribute-actions) memberitahukan kepada enkriptor item tentang tindakan yang dilakukan pada setiap atribut item. Objek `AttributeActions` dalam contoh ini mengenkripsi dan menandatangani semua item kecuali atribut kunci utama, yang ditandatangani, tetapi tidak dienkripsi, dan atribut `test`, yang diabaikan.  
Ketika Anda berinteraksi langsung dengan item enkripsi dan tindakan default Anda adalah `ENCRYPT_AND_SIGN`, Anda harus menentukan tindakan alternatif untuk kunci primer. Anda dapat menggunakan metode `set_index_keys`, yang menggunakan `SIGN_ONLY` untuk kunci primer, atau menggunakan `DO_NOTHING` jika itu adalah tindakan default.  
Untuk menentukan kunci utama, contoh ini menggunakan kunci indeks dalam [TableInfo](python-using.md#python-helpers)objek, yang diisi oleh panggilan ke DynamoDB. Teknik ini lebih aman daripada nama kunci primer hard-coding.  

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

Langkah 6: Buat konfigurasi untuk item  
Untuk mengonfigurasi Klien Enkripsi DynamoDB, gunakan objek yang baru saja Anda buat dalam [CryptoConfig](https://aws-dynamodb-encryption-python.readthedocs.io/en/latest/lib/encrypted/config.html)konfigurasi untuk item tabel. Kelas pembantu klien membuat CryptoConfig untuk Anda.   

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

Langkah 7: Enkripsi item  
Langkah ini mengenkripsi dan menandai item, tetapi tidak memasukkannya ke dalam tabel DynamoDB.   
Ketika Anda menggunakan kelas pembantu klien, item Anda secara transparan dienkripsi dan ditandatangani, dan kemudian ditambahkan ke tabel DynamoDB Anda ketika Anda memanggil metode `put_item` kelas pembantu. Ketika Anda menggunakan item enkripsi secara langsung, enkripsi dan tindakan independen.  
Pertama, buat item plaintext.  

```
plaintext_item = {
    'partition_attribute': 'value1',
    'sort_key': 55,
    'example': 'data',
    'numbers': 99,
    'binary': Binary(b'\x00\x01\x02'),
    'test': 'test-value'
}
```
Kemudian, enkripsi dan tanda tangani. Metode `encrypt_python_item` memerlukan objek konfigurasi `CryptoConfig`.  

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

Langkah 8: Masukkan item ke dalam tabel DynamoDB  
Akhirnya, letakkan item yang dienkripsi dan ditandatangani ke dalam tabel DynamoDB.  

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

Untuk melihat item yang dienkripsi, panggil metode `get_item` pada objek `table` asli, bukan dari objek `encrypted_table`. Item didapatkan dari tabel DynamoDB tanpa memverifikasi dan mendekripsinya.

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

Gambar berikut menunjukkan bagian dari contoh item tabel yang dienkripsi dan ditandatangani.

Nilai atribut terenkripsi adalah data biner. Nama dan nilai atribut kunci primer (`partition_attribute` dan `sort_attribute`) dan atribut `test` tetap dalam plaintext. Output juga menunjukkan atribut yang berisi tanda tangan (`*amzn-ddb-map-sig*`) dan [atribut deskripsi materi](DDBEC-legacy-concepts.md#legacy-material-description) (`*amzn-ddb-map-desc*`).

![\[Kutipan dari item yang dienkripsi dan ditandatangani\]](http://docs.aws.amazon.com/id_id/database-encryption-sdk/latest/devguide/images/encrypted-item-closeup.png)
