Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Contoh kode untuk DynamoDB Encryption Client untuk Python
catatan
Pustaka enkripsi sisi klien kami diubah namanya menjadi AWS Database Encryption SDK. 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.
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
Gunakan kelas pembantu EncryptedTable klien
Contoh berikut menunjukkan cara menggunakan Provider KMS Langsungdengan kelas pembantu klien EncryptedTable. Contoh ini menggunakan penyedia bahan kriptografi yang sama seperti contoh Gunakan enkriptor item berikut. Namun, contoh tersebut menggunakan kelas EncryptedTable alih-alih berinteraksi langsung dengan enkriptor item 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 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. Untuk menjalankan kode ini, Anda harus memiliki izin untuk memanggil operasi ini.
Lihat contoh kode lengkap: 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 (CMP) yang Anda pilih.
Contoh ini menggunakan Penyedia KMS Langsung, tetapi Anda dapat menggunakan CMP mana pun yang kompatibel. Untuk membuat Penyedia KMS Langsung, tentukan. AWS KMS key Contoh ini menggunakan Amazon Resource Name (ARN) dari AWS KMS key, tetapi Anda dapat menggunakan pengidentifikasi 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 memberitahukan kepada enkriptor item tentang tindakan yang dilakukan pada setiap atribut item. Objek
AttributeActionsdalam contoh ini mengenkripsi dan menandatangani semua item kecuali untuk atributtest, yang diabaikan.Jangan tentukan tindakan atribut untuk atribut kunci primer saat Anda menggunakan kelas pembantu klien. Kelas
EncryptedTablemenandatangani, 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_itemdiencrypted_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
Contoh ini menunjukkan kepada Anda bagaimana untuk berinteraksi langsung dengan enkriptor item di DynamoDB Encryption Client ketika mengenkripsi item tabel, alih-alih menggunakan kelas pembantu klien 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, tetapi Anda dapat menggunakan CMP kompatibel.
Lihat contoh kode lengkap: aws_kms_encrypted_table.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 (CMP) yang Anda pilih.
Contoh ini menggunakan Penyedia KMS Langsung, tetapi Anda dapat menggunakan CMP mana pun yang kompatibel. Untuk membuat Penyedia KMS Langsung, tentukan. AWS KMS key Contoh ini menggunakan Amazon Resource Name (ARN) dari AWS KMS key, tetapi Anda dapat menggunakan pengidentifikasi 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 TableInfokelas helper. Apabila Anda bekerja secara langsung dengan enkriptor item, Anda perlu membuat instans
TableInfodan memanggil metodenya. Kelas pembantu klien melakukan ini untuk Anda.refresh_indexed_attributesMetodeTableInfomenggunakan operasi DescribeTableDynamoDB untuk mendapatkan informasi real-time dan akurat tentang tabel. Ini termasuk kunci primer dan indeks sekunder lokal dan global. Pemanggil perlu memiliki izin untuk memanggilDescribeTable.table_info = TableInfo(name=table_name) table_info.refresh_indexed_attributes(table.meta.client) - Langkah 4: Buat konteks enkripsi DynamoDB
-
Konteks enkripsi DynamoDB 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 membuat konteks enkripsi DynamoDB untuk Anda.
Untuk mendapatkan kunci partisi dan kunci sortir, Anda dapat menggunakan properti kelas TableInfopembantu.
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 memberitahukan kepada enkriptor item tentang tindakan yang dilakukan pada setiap atribut item. Objek
AttributeActionsdalam contoh ini mengenkripsi dan menandatangani semua item kecuali atribut kunci utama, yang ditandatangani, tetapi tidak dienkripsi, dan atributtest, 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 metodeset_index_keys, yang menggunakanSIGN_ONLYuntuk kunci primer, atau menggunakanDO_NOTHINGjika itu adalah tindakan default.Untuk menentukan kunci utama, contoh ini menggunakan kunci indeks dalam TableInfoobjek, 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
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_itemkelas 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_itemmemerlukan objek konfigurasiCryptoConfig.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 (*amzn-ddb-map-desc*).