

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

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