Contoh kode untuk DynamoDB Encryption Client untuk Python - AWS Enkripsi Database SDK

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 Enkripsi Database. AWS 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 Enkripsi AWS Database SDK 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-pythonrepositori di. GitHub

Gunakan kelas pembantu EncryptedTable klien

Contoh berikut menunjukkan cara menggunakan Direct KMS Provider dengan class EncryptedTable client helper. 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 instance penyedia materi kriptografi (CMP) yang Anda pilih.

Contoh ini menggunakan KMSPenyedia Langsung, tetapi Anda dapat menggunakan apa pun yang kompatibelCMP. Untuk membuat Direct KMS Provider, tentukan AWS KMS key. 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 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

Buat tabel terenkripsi menggunakan tabel standar, Direct KMS Provider, 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

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 KMSPenyedia Langsung, tetapi Anda dapat menggunakan apa pun yang kompatibelCMP.

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 instance penyedia materi kriptografi (CMP) yang Anda pilih.

Contoh ini menggunakan KMSPenyedia Langsung, tetapi Anda dapat menggunakan apa pun yang kompatibelCMP. Untuk membuat Direct KMS Provider, tentukan AWS KMS key. 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 TableInfokelas helper. Apabila Anda bekerja secara langsung dengan enkriptor item, Anda perlu membuat instans TableInfo dan memanggil metodenya. Kelas pembantu klien melakukan ini untuk Anda.

refresh_indexed_attributesMetode TableInfo menggunakan 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 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 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 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 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 CryptoConfigkonfigurasi 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 (*amzn-ddb-map-desc*).

Kutipan dari item yang dienkripsi dan ditandatangani