Mengubah model data Anda - AWS Enkripsi Database SDK

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

Mengubah model data Anda

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.

Setiap kali mengenkripsi atau mendekripsi item, Anda perlu memberikan tindakan atribut yang memberi tahu DynamoDB Encryption Client atribut mana yang perlu dienkripsi dan ditandatangani, atribut mana yang perlu ditanandatangani (tapi tidak dienkripsi), dan mana yang diabaikan. Atribut tindakan tidak disimpan dalam item yang dienkripsi dan DynamoDB Encryption Client tidak memperbarui tindakan atribut Anda secara otomatis.

penting

Klien Enkripsi DynamoDB tidak mendukung enkripsi data tabel DynamoDB yang sudah ada dan tidak terenkripsi.

Setiap kali Anda mengubah model data Anda, yaitu, ketika Anda menambahkan atau menghapus atribut dari item tabel Anda, Anda berisiko mendapatkan masalah. Jika tindakan atribut yang Anda tentukan tidak mencakup semua atribut dalam item, item tersebut mungkin tidak dienkripsi dan ditandatangani sesuai keinginan Anda. Lebih penting lagi, jika tindakan atribut yang Anda berikan saat mendekripsi item berbeda dari tindakan atribut yang Anda berikan saat mengenkripsi item, verifikasi tanda tangan mungkin gagal.

Sebagai contoh, jika tindakan atribut yang digunakan untuk mengenkripsi item memberitahu untuk menandatangani atribut test, tanda tangan dalam item akan mencakup atribut test. Namun, jika tindakan atribut yang digunakan untuk mendekripsi item tidak memperhitungkan atribut test, verifikasi akan gagal karena klien akan mencoba untuk memverifikasi tanda tangan yang tidak termasuk atribut test.

Ini adalah masalah ketika beberapa aplikasi membaca dan menulis item DynamoDB sama karena DynamoDB Encryption Client harus menghitung tanda tangan yang sama untuk item di semua aplikasi. Ini juga masalah untuk aplikasi terdistribusi karena perubahan dalam tindakan atribut harus menyebar ke semua host. Bahkan jika tabel DynamoDB Anda diakses oleh satu host dalam satu proses, membangun proses praktek terbaik akan membantu mencegah kesalahan jika proyek pernah menjadi lebih kompleks.

Untuk menghindari kesalahan validasi tanda tangan yang mencegah Anda membaca item tabel Anda, gunakan panduan berikut.

  • Menambahkan atribut — Jika atribut baru mengubah tindakan atribut Anda, sepenuhnya men-deploy perubahan tindakan atribut sebelum menyertakan atribut baru dalam item.

  • Menghapus atribut — Jika Anda berhenti menggunakan atribut dalam item Anda, jangan mengubah tindakan atribut Anda.

  • Mengubah tindakan - Setelah Anda telah menggunakan konfigurasi tindakan atribut untuk mengenkripsi item tabel Anda, Anda tidak dapat dengan aman mengubah tindakan default atau tindakan untuk atribut yang ada tanpa mereenkripsi setiap item dalam tabel Anda.

Kesalahan validasi tanda tangan bisa sangat sulit diatasi, jadi pendekatan terbaik adalah mencegahnya.

Menambahkan atribut

Saat menambahkan atribut baru ke item tabel, Anda mungkin perlu mengubah tindakan atribut Anda. Untuk mencegah kesalahan validasi tanda tangan, sebaiknya Anda menerapkan perubahan ini dalam proses dua tahap. Verifikasi bahwa tahap pertama selesai sebelum memulai tahap kedua.

  1. Ubah tindakan atribut di semua aplikasi yang membaca atau menulis ke tabel. Deploy perubahan ini dan konfirmasi bahwa pembaruan telah disebarkan ke semua host tujuan.

  2. Tulis nilai ke atribut baru dalam item tabel Anda.

Pendekatan dua tahap ini memastikan bahwa semua aplikasi dan host memiliki tindakan atribut yang sama, dan akan menghitung tanda tangan yang sama, sebelum menemui atribut baru. Hal ini penting bahkan ketika tindakan untuk atribut adalah Jangan lakukan apa-apa (jangan mengenkripsi atau menandatangani), karena default untuk beberapa enkriptor adalah mengenkripsi dan menandatangani.

Contoh berikut menunjukkan kode untuk tahap pertama dalam proses ini. Atribut item baru ditambahkan, link, yang menyimpan link ke item tabel lain. Karena link ini harus tetap dalam teks biasa, contoh menetapkan itu tindakan tanda-saja. Setelah sepenuhnya men-deploy perubahan ini dan kemudian memverifikasi bahwa semua aplikasi dan host memiliki tindakan atribut baru, Anda dapat mulai menggunakan atribut link dalam item tabel Anda.

Java DynamoDB Mapper

Saat menggunakan DynamoDB Mapper dan AttributeEncryptor secara default, semua atribut dienkripsi dan ditandatangani kecuali kunci utama, yang ditandatangani tetapi tidak dienkripsi. Untuk menentukan tindakan tanda-saja, gunakan anotasi @DoNotEncrypt.

Contoh ini menggunakan anotasi @DoNotEncrypt untuk atribut link baru.

@DynamoDBTable(tableName = "ExampleTable") public static final class DataPoJo { private String partitionAttribute; private int sortAttribute; private String link; @DynamoDBHashKey(attributeName = "partition_attribute") public String getPartitionAttribute() { return partitionAttribute; } public void setPartitionAttribute(String partitionAttribute) { this.partitionAttribute = partitionAttribute; } @DynamoDBRangeKey(attributeName = "sort_attribute") public int getSortAttribute() { return sortAttribute; } public void setSortAttribute(int sortAttribute) { this.sortAttribute = sortAttribute; } @DynamoDBAttribute(attributeName = "link") @DoNotEncrypt public String getLink() { return link; } public void setLink(String link) { this.link = link; } @Override public String toString() { return "DataPoJo [partitionAttribute=" + partitionAttribute + ", sortAttribute=" + sortAttribute + ", link=" + link + "]"; } }
Java DynamoDB encryptor

Dalam enkriptor DynamoDB di level yang lebih rendah, Anda mesti menetapkan tindakan untuk setiap atribut. Contoh ini menggunakan pernyataan switch yang mana default adalah encryptAndSign dan pengecualian dispesifikasikan untuk kunci partisi, kunci penyortiran, dan atribut link baru. Dalam contoh ini, jika kode atribut tautan tidak sepenuhnya di-deploy sebelum digunakan, atribut tautan akan dienkripsi dan ditandatangani oleh beberapa aplikasi, tetapi hanya ditandatangani oleh orang lain.

for (final String attributeName : record.keySet()) { switch (attributeName) { case partitionKeyName: // fall through to the next case case sortKeyName: // partition and sort keys must be signed, but not encrypted actions.put(attributeName, signOnly); break; case "link": // only signed actions.put(attributeName, signOnly); break; default: // Encrypt and sign all other attributes actions.put(attributeName, encryptAndSign); break; } }
Python

Dalam DynamoDB Encryption Client untuk Python, Anda dapat menentukan tindakan default untuk semua atribut dan kemudian menentukan pengecualian.

Jika Anda menggunakan sebuah kelas pembantu klien Python, Anda tidak perlu menentukan tindakan atribut untuk atribut kunci primer. Kelas pembantu klien mencegah Anda mengenkripsi kunci utama Anda. Namun, jika Anda tidak menggunakan kelas pembantu klien, Anda harus mengatur ONLY tindakan SIGN _ pada kunci partisi dan kunci sortir Anda. Jika Anda secara tidak sengaja mengenkripsi kunci partisi atau sortir Anda, Anda tidak akan dapat memulihkan data tanpa pemindaian tabel lengkap.

Contoh ini menentukan pengecualian untuk atribut link baru, yang mendapat tindakan SIGN_ONLY.

actions = AttributeActions( default_action=CryptoAction.ENCRYPT_AND_SIGN, attribute_actions={ 'example': CryptoAction.DO_NOTHING, 'link': CryptoAction.SIGN_ONLY } )

Menghapus atribut

Jika Anda tidak lagi membutuhkan atribut dalam item yang telah dienkripsi dengan DynamoDB Encryption Client, Anda dapat berhenti menggunakan atribut. Namun, jangan menghapus atau mengubah tindakan untuk atribut tersebut. Jika Anda melakukannya, dan kemudian menemukan item dengan atribut itu, tanda tangan yang dihitung untuk item tidak akan cocok dengan tanda tangan asli, dan validasi tanda tangan akan gagal.

Meskipun Anda mungkin tergoda untuk menghapus semua jejak atribut dari kode Anda, tambahkan komentar bahwa item tidak lagi digunakan, alih-alih menghapusnya. Bahkan jika Anda melakukan pemindaian tabel secara penuh untuk menghapus semua instans atribut, item yang dienkripsi dengan atribut yang mungkin disembunyikan atau dalam proses di suatu tempat di konfigurasi Anda.