Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Mengonfigurasi AWS SDK Enkripsi Basis Data
| Pustaka enkripsi sisi klien kami diubah namanya menjadi SDK Enkripsi AWS Database. Panduan pengembang ini masih memberikan informasi tentang Klien Enkripsi DynamoDB. |
AWS Database Encryption SDK dirancang agar mudah digunakan. Meskipun AWS Database Encryption SDK memiliki beberapa opsi konfigurasi, nilai default dipilih dengan cermat agar praktis dan aman untuk sebagian besar aplikasi. Namun, Anda mungkin perlu menyesuaikan konfigurasi untuk meningkatkan kinerja atau menyertakan fitur khusus dalam desain Anda.
Topik
Memilih bahasa pemrograman
AWS Database Encryption SDK untuk DynamoDB tersedia dalam beberapa bahasa pemrograman. Implementasi bahasa dirancang agar sepenuhnya dapat dioperasikan dan menawarkan fitur yang sama, meskipun mereka mungkin diimplementasikan dengan cara yang berbeda. Biasanya, Anda menggunakan pustaka yang kompatibel dengan aplikasi Anda.
Memilih tombol pembungkus
AWS Database Encryption SDK menghasilkan kunci data simetris unik untuk mengenkripsi setiap bidang. Anda tidak perlu mengkonfigurasi, mengelola, atau menggunakan kunci data. AWS Database Encryption SDK melakukannya untuk Anda.
Namun, Anda harus memilih satu atau lebih kunci pembungkus untuk mengenkripsi setiap kunci data. AWS Database Encryption SDK mendukung AWS Key Management Service (AWS KMS) kunci KMS enkripsi simetris dan kunci RSA KMS asimetris. Ini juga mendukung kunci simetris AES dan kunci asimetris RSA yang Anda berikan dalam berbagai ukuran. Anda bertanggung jawab atas keamanan dan daya tahan kunci pembungkus Anda, jadi kami menyarankan Anda menggunakan kunci enkripsi dalam modul keamanan perangkat keras atau layanan infrastruktur kunci, seperti AWS KMS.
Untuk menentukan kunci pembungkus Anda untuk enkripsi dan dekripsi, Anda menggunakan gantungan kunci. Tergantung pada jenis gantungan kunci yang Anda gunakan, Anda dapat menentukan satu kunci pembungkus atau beberapa kunci pembungkus dari jenis yang sama atau berbeda. Jika Anda menggunakan beberapa kunci pembungkus untuk membungkus kunci data, setiap kunci pembungkus akan mengenkripsi salinan kunci data yang sama. Kunci data terenkripsi (satu per kunci pembungkus) disimpan dalam deskripsi material yang disimpan di samping bidang terenkripsi. Untuk mendekripsi data, AWS Database Encryption SDK harus terlebih dahulu menggunakan salah satu kunci pembungkus Anda untuk mendekripsi kunci data terenkripsi.
Sebaiknya gunakan salah satu gantungan AWS KMS kunci bila memungkinkan. AWS Database Encryption SDK menyediakan AWS KMS keyring dan keyring AWS KMS hierarkis, yang mengurangi jumlah panggilan yang dilakukan ke. AWS KMS Untuk menentukan sebuah AWS KMS key dalam keyring, gunakan pengenal AWS KMS kunci yang didukung. Jika Anda menggunakan keyring AWS KMS hierarkis, Anda harus menentukan kunci ARN. Untuk detail tentang pengidentifikasi kunci untuk AWS KMS kunci, lihat Pengi dentifikasi K unci di Panduan AWS Key Management Service Pengembang.
-
Saat mengenkripsi dengan AWS KMS keyring, Anda dapat menentukan pengidentifikasi kunci yang valid (kunci ARN, nama alias, alias ARN, atau ID kunci) untuk kunci KMS enkripsi simetris. Jika Anda menggunakan kunci RSA KMS asimetris, Anda harus menentukan kunci ARN.
Jika Anda menentukan nama alias atau ARN alias untuk kunci KMS saat mengenkripsi, SDK Enkripsi AWS Database menyimpan kunci ARN yang saat ini terkait dengan alias itu; itu tidak menyimpan alias. Perubahan alias tidak memengaruhi kunci KMS yang digunakan untuk mendekripsi kunci data Anda.
-
Secara default, AWS KMS keyring mendekripsi catatan dalam mode ketat (di mana Anda menentukan kunci KMS tertentu). Anda harus menggunakan kunci ARN AWS KMS keys untuk mengidentifikasi dekripsi.
Saat Anda mengenkripsi dengan AWS KMS keyring, AWS Database Encryption SDK menyimpan kunci ARN AWS KMS key dalam deskripsi materi dengan kunci data terenkripsi. Saat mendekripsi dalam mode ketat, AWS Database Encryption SDK memverifikasi bahwa kunci ARN yang sama muncul di keyring sebelum mencoba menggunakan kunci pembungkus untuk mendekripsi kunci data terenkripsi. Jika Anda menggunakan pengidentifikasi kunci yang berbeda, SDK Enkripsi AWS Database tidak akan mengenali atau menggunakannya AWS KMS key, bahkan jika pengidentifikasi merujuk ke kunci yang sama.
-
Saat mendekripsi dalam mode penemuan, Anda tidak menentukan kunci pembungkus apa pun. Pertama, AWS Database Encryption SDK mencoba mendekripsi catatan dengan kunci ARN yang disimpan dalam deskripsi material. Jika itu tidak berhasil, AWS Database Encryption SDK meminta AWS KMS untuk mendekripsi catatan menggunakan kunci KMS yang mengenkripsinya, terlepas dari siapa yang memiliki atau memiliki akses ke kunci KMS tersebut.
Untuk menentukan kunci AES mentah atau pasangan kunci RSA mentah sebagai kunci pembungkus dalam keyring, Anda harus menentukan namespace dan nama. Saat mendekripsi, Anda harus menggunakan namespace dan nama yang sama persis untuk setiap kunci pembungkus mentah seperti yang Anda gunakan saat mengenkripsi. Jika Anda menggunakan namespace atau nama yang berbeda, AWS Database Encryption SDK tidak akan mengenali atau menggunakan kunci pembungkus, meskipun materi kuncinya sama.
Membuat filter penemuan
Saat mendekripsi data yang dienkripsi dengan kunci KMS, ini adalah praktik terbaik untuk mendekripsi dalam mode ketat, yaitu membatasi kunci pembungkus yang digunakan hanya untuk yang Anda tentukan. Namun, jika perlu, Anda juga dapat mendekripsi dalam mode penemuan, di mana Anda tidak menentukan kunci pembungkus apa pun. Dalam mode ini, AWS KMS dapat mendekripsi kunci data terenkripsi menggunakan kunci KMS yang mengenkripsinya, terlepas dari siapa yang memiliki atau memiliki akses ke kunci KMS tersebut.
Jika Anda harus mendekripsi dalam mode penemuan, kami sarankan Anda selalu menggunakan filter penemuan, yang membatasi kunci KMS yang dapat digunakan untuk kunci di partisi Akun AWS dan tertentu. Filter penemuan bersifat opsional, tetapi ini adalah praktik terbaik.
Gunakan tabel berikut untuk menentukan nilai partisi untuk filter penemuan Anda.
| Region | Partition |
|---|---|
| Wilayah AWS | aws |
| Wilayah China | aws-cn |
| AWS GovCloud (US) Regions | aws-us-gov |
Contoh berikut menunjukkan cara membuat filter penemuan. Sebelum menggunakan kode, ganti nilai contoh dengan nilai yang valid untuk parti Akun AWS si Anda.
Bekerja dengan database multitenant
Dengan AWS Database Encryption SDK, Anda dapat mengonfigurasi enkripsi sisi klien untuk database dengan skema bersama dengan mengisolasi setiap penyewa dengan materi enkripsi yang berbeda. Saat mempertimbangkan database multitenant, luangkan waktu untuk meninjau persyaratan keamanan Anda dan bagaimana multitenancy dapat memengaruhi mereka. Misalnya, menggunakan database multitenant dapat memengaruhi kemampuan Anda untuk menggabungkan SDK Enkripsi AWS Database dengan solusi enkripsi sisi server lainnya.
Jika Anda memiliki beberapa pengguna yang melakukan operasi enkripsi dalam database Anda, Anda dapat menggunakan salah satu gant AWS KMS ungan kunci untuk memberikan setiap pengguna kunci yang berbeda untuk digunakan dalam operasi kriptografi mereka. Mengelola kunci data untuk solusi enkripsi sisi klien multitenant bisa rumit. Kami sarankan mengatur data Anda berdasarkan penyewa bila memungkinkan. Jika penyewa diidentifikasi oleh nilai kunci utama (misalnya, kunci partisi dalam tabel Amazon DynamoDB), maka mengelola kunci Anda lebih mudah.
Anda dapat menggunakan gantungan AWS KMS kunci untuk mengisolasi setiap penyewa dengan gantungan kunci yang berbeda AWS KMS dan. AWS KMS keys Berdasarkan volume AWS KMS panggilan yang dilakukan per penyewa, Anda mungkin ingin menggunakan keyring AWS KMS hierarkis untuk meminimalkan panggilan Anda ke AWS KMS. Keyring AWS KMS hierarkis adalah solusi caching materi kriptografi yang mengurangi jumlah AWS KMS panggilan dengan menggunakan kunci cabang yang AWS KMS dilindungi yang disimpan dalam tabel Amazon Dynam oDB, dan kemudian cache materi kunci cabang secara lokal yang digunakan dalam operasi enkripsi dan dekripsi. Anda harus menggunakan keyring AWS KMS hierarkis untuk menerapkan enkripsi yang dapat dicari di database Anda.
Membuat beacon yang ditandatangani
AWS Database Encryption SDK menggunakan beacon standar dan beacon maj emuk untuk menyediakan solusi enkripsi yang dapat dicari yang memungkinkan Anda mencari catatan terenkripsi tanpa mendekripsi seluruh database yang ditanyakan. Namun, AWS Database Encryption SDK juga mendukung beacon ber tanda tangan yang dapat dikonfigurasi seluruhnya dari bidang yang ditandatangani plaintext. Suar bertanda tangan adalah jenis suar majemuk yang mengindeks dan melakukan kueri kompleks pada SIGN_ONLY dan SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT bidang.
Misalnya, jika Anda memiliki database multitenant, Anda mungkin ingin membuat suar bertanda tangan yang memungkinkan Anda menanyakan database Anda untuk catatan yang dienkripsi oleh kunci penyewa tertentu. Untuk informasi selengkapnya, lihat Menanyakan beacon dalam database multitenant.
Anda harus menggunakan keyring AWS KMS hierarkis untuk membuat beacon yang ditandatangani.
Untuk mengonfigurasi suar yang ditandatangani, berikan nilai-nilai berikut.
Anda dapat menentukan bagian yang ditandatangani dalam daftar yang ditentukan secara lokal atau global. Sebaiknya tentukan bagian yang ditandatangani dalam daftar global dalam versi suar bila memungkinkan. Dengan mendefinisikan bagian yang ditandatangani secara global, Anda dapat menentukan setiap bagian sekali dan kemudian menggunakan kembali bagian dalam beberapa konfigurasi suar majemuk. Jika Anda hanya ingin menggunakan bagian yang ditandatangani satu kali, Anda dapat mendefinisikannya dalam daftar lokal dalam konfigurasi suar yang ditandatangani. Anda dapat mereferensikan bagian lokal dan global dalam daftar constructor parts konstruktor Anda.
Jika Anda menentukan daftar bagian yang ditandatangani secara global, Anda harus memberikan daftar bagian konstruktor yang mengidentifikasi semua kemungkinan cara suar yang ditandatangani dapat merakit bidang dalam konfigurasi suar Anda.
catatan
Untuk menentukan daftar bagian yang ditandatangani secara global, Anda harus menggunakan versi 3.2 atau yang lebih baru dari AWS Database Encryption SDK. Terapkan versi baru ke semua pembaca sebelum menentukan bagian baru secara global.
Anda tidak dapat memperbarui konfigurasi suar yang ada untuk menentukan daftar suku cadang yang ditandatangani secara global.
- Nama suar
-
Nama yang Anda gunakan saat menanyakan suar.
Nama suar yang ditandatangani tidak boleh memiliki nama yang sama dengan bidang yang tidak dienkripsi. Tidak ada dua beacon yang dapat memiliki nama suar yang sama.
- Pisahkan karakter
-
Karakter yang digunakan untuk memisahkan bagian-bagian yang membentuk suar Anda yang ditandatangani.
Karakter split tidak dapat muncul dalam nilai plaintext dari salah satu bidang tempat suar yang ditandatangani dibuat.
- Daftar bagian yang ditandatangani
-
Mengidentifikasi bidang yang ditandatangani termasuk dalam suar yang ditandatangani.
Setiap bagian harus menyertakan nama, sumber, dan awalan. Sumber adalah
SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXTbidangSIGN_ONLYatau yang diidentifikasi oleh bagian tersebut. Sumber harus berupa nama bidang atau indeks yang mengacu pada nilai bidang bersarang. Jika nama bagian Anda mengidentifikasi sumber, Anda dapat menghilangkan sumber dan AWS Database Encryption SDK akan secara otomatis menggunakan nama sebagai sumbernya. Sebaiknya tentukan sumber sebagai nama bagian bila memungkinkan. Awalan bisa berupa string apa saja, tetapi harus unik. Tidak ada dua bagian yang ditandatangani dalam suar bertanda tangan yang dapat memiliki awalan yang sama. Sebaiknya gunakan nilai pendek yang membedakan bagian dari bagian lain yang dilayani oleh suar majemuk.Sebaiknya tentukan bagian yang ditandatangani secara global bila memungkinkan. Anda dapat mempertimbangkan untuk mendefinisikan bagian yang ditandatangani secara lokal jika Anda hanya bermaksud menggunakannya dalam satu suar majemuk. Bagian yang ditentukan secara lokal tidak dapat memiliki awalan atau nama yang sama dengan bagian yang didefinisikan secara global.
- Daftar konstruktor (Opsional)
-
Mengidentifikasi konstruktor yang menentukan cara berbeda bahwa bagian yang ditandatangani dapat dirakit oleh suar yang ditandatangani.
Jika Anda tidak menentukan daftar konstruktor, AWS Database Encryption SDK merakit suar yang ditandatangani dengan konstruktor default berikut.
-
Semua bagian yang ditandatangani sesuai urutan ditambahkan ke daftar bagian yang ditandatangani
-
Semua bagian diperlukan
- Konstruktor
-
Setiap konstruktor adalah daftar bagian konstruk tor yang diurutkan yang mendefinisikan satu cara agar suar yang ditandatangani dapat dirakit. Bagian konstruktor digabungkan bersama dalam urutan ditambahkan ke daftar, dengan setiap bagian dipisahkan oleh karakter split yang ditentukan.
Setiap bagian konstruktor memberi nama bagian yang ditandatangani, dan mendefinisikan apakah bagian itu diperlukan atau opsional dalam konstruktor. Misalnya, jika Anda ingin menanyakan suar yang ditandatangani pada
Field1,, danField1.Field2Field1.Field2.Field3, tandaiField2danField3sebagai opsional dan buat satu konstruktor.Setiap konstruktor harus memiliki setidaknya satu bagian yang diperlukan. Sebaiknya buat bagian pertama di setiap konstruktor diperlukan sehingga Anda dapat menggunakan
BEGINS_WITHoperator dalam kueri Anda.Konstruktor berhasil jika semua bagian yang diperlukan ada dalam catatan. Saat Anda menulis catatan baru, suar yang ditandatangani menggunakan daftar konstruktor untuk menentukan apakah suar dapat dirakit dari nilai yang disediakan. Ini mencoba untuk merakit suar dalam urutan konstruktor ditambahkan ke daftar konstruktor, dan menggunakan konstruktor pertama yang berhasil. Jika tidak ada konstruktor yang berhasil, suar tidak ditulis ke catatan.
Semua pembaca dan penulis harus menentukan urutan konstruktor yang sama untuk memastikan bahwa hasil kueri mereka benar.
Gunakan prosedur berikut untuk menentukan daftar konstruktor Anda sendiri.
-
Buat bagian konstruktor untuk setiap bagian yang ditandatangani untuk menentukan apakah bagian itu diperlukan atau tidak.
Nama bagian konstruktor harus berupa nama bidang yang ditandatangani.
Contoh berikut menunjukkan cara membuat bagian konstruktor untuk satu bidang yang ditandatangani.
-
Buat konstruktor untuk setiap cara yang memungkinkan suar yang ditandatangani dapat dirakit menggunakan bagian konstruktor yang Anda buat di Langkah 1.
Misalnya, jika Anda ingin menanyakan
Field1.Field2.Field3danField4.Field2.Field3, maka Anda harus membuat dua konstruktor.Field1danField4keduanya dapat diperlukan karena mereka didefinisikan dalam dua konstruktor terpisah. -
Buat daftar konstruktor yang mencakup semua konstruktor yang Anda buat di Langkah 2.
-
Tentukan
constructorListkapan Anda membuat suar yang ditandatangani.
-