Penyedia Bahan KMS Langsung - AWS SDK Enkripsi Basis Data

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

Penyedia Bahan KMS Langsung

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.

Penyedia Bahan KMS Langsung (Penyedia KMS Langsung) melindungi item tabel Anda di bawah item AWS KMS keyyang tidak pernah meninggalkan AWS Key Management Service(AWS KMS) tidak terenkripsi. Penyedia bahan kriptografi ini mengembalikan kunci enkripsi yang unik dan kunci penandatanganan untuk setiap item tabel. Untuk melakukannya, ia memanggil AWS KMS setiap kali Anda mengenkripsi atau mendekripsi item.

Jika Anda memproses item DynamoDB pada frekuensi tinggi dan skala besar, Anda mungkin melebihi batas, menyebabkan AWS KMS requests-per-secondpenundaan pemrosesan. Jika Anda perlu melebihi batas, buat kasing di AWS Dukungan Pusat. Anda juga dapat mempertimbangkan untuk menggunakan penyedia bahan kriptografi dengan penggunaan kembali kunci secara terbatas, seperti Penyedia Terbaru.

Untuk menggunakan Penyedia KMS Langsung, penelepon harus memiliki Akun AWS, setidaknya satu AWS KMS key, dan izin untuk memanggil GenerateDataKeydan mendekripsi operasi pada. AWS KMS key AWS KMS key Harus berupa kunci enkripsi simetris; Klien Enkripsi DynamoDB tidak mendukung enkripsi asimetris. Jika Anda menggunakan tabel global DynamoDB, Anda mungkin ingin menentukan kunci multi-Wilayah AWS KMS. Untuk detailnya, lihat Cara menggunakannya.

catatan

Saat Anda menggunakan Penyedia KMS Langsung, nama dan nilai atribut kunci utama Anda muncul dalam teks biasa dalam konteks AWS KMS enkripsi dan AWS CloudTrail log operasi terkait. AWS KMS Namun, DynamoDB Encryption Client tidak pernah mengekspos plaintext dari nilai-nilai atribut terenkripsi.

Direct KMS Provider adalah salah satu dari beberapa penyedia materi kriptografi (CMPs) yang didukung oleh Klien Enkripsi DynamoDB. Untuk informasi tentang yang lain CMPs, lihatPenyedia bahan kriptografi.

Misalnya kode, lihat:

Cara menggunakannya

Untuk membuat Penyedia KMS Langsung, gunakan parameter ID kunci untuk menentukan kunci KMS enkripsi simetris di akun Anda. Nilai parameter ID kunci dapat berupa ID kunci, ARN kunci, nama alias, atau alias ARN dari. AWS KMS key Untuk detail tentang pengidentifikasi kunci, lihat Pengidentifikasi kunci dalam Panduan Developer AWS Key Management Service .

Penyedia KMS Langsung memerlukan kunci KMS enkripsi simetris. Anda tidak dapat menggunakan kunci KMS asimetris. Namun, Anda dapat menggunakan kunci KMS Multi-wilayah, kunci KMS dengan bahan kunci yang diimpor, atau kunci KMS di toko kunci khusus. Anda harus memiliki izin kms: GenerateDataKey dan kms:Decrypt pada kunci KMS. Dengan demikian, Anda harus menggunakan kunci yang dikelola pelanggan, bukan kunci KMS yang AWS dikelola atau AWS dimiliki.

Klien Enkripsi DynamoDB untuk Python menentukan Wilayah untuk AWS KMS memanggil dari Wilayah dalam nilai parameter ID kunci, jika termasuk satu. Jika tidak, ia menggunakan Wilayah di AWS KMS klien, jika Anda menentukan satu, atau Wilayah yang Anda konfigurasikan di AWS SDK untuk Python (Boto3). Untuk informasi tentang pemilihan Wilayah dengan Python, lihat Konfigurasi di AWS SDK for Python (Boto3) API Referensi.

Klien Enkripsi DynamoDB untuk Java menentukan Wilayah untuk AWS KMS memanggil dari Wilayah di AWS KMS klien, jika klien yang Anda tentukan menyertakan Wilayah. Jika tidak, ia akan menggunakan Wilayah yang Anda konfigurasi di AWS SDK untuk Java. Untuk informasi tentang pemilihan Wilayah di AWS SDK untuk Java, lihat Wilayah AWS seleksi di Panduan AWS SDK untuk Java Pengembang.

Java
// Replace the example key ARN and Region with valid values for your application final String keyArn = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' final String region = 'us-west-2' final AWSKMS kms = AWSKMSClientBuilder.standard().withRegion(region).build(); final DirectKmsMaterialProvider cmp = new DirectKmsMaterialProvider(kms, keyArn);
Python

Contoh berikut menggunakan kunci ARN untuk menentukan. AWS KMS key Jika pengenal kunci Anda tidak menyertakan Wilayah AWS, Klien Enkripsi DynamoDB mendapatkan Wilayah dari sesi Botocore yang dikonfigurasi, jika ada, atau dari default Boto.

# Replace the example key ID with a valid value kms_key = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' kms_cmp = AwsKmsCryptographicMaterialsProvider(key_id=kms_key)

Jika Anda menggunakan tabel global Amazon DynamoDB, sebaiknya enkripsi data Anda di bawah kunci Multi-wilayah. AWS KMS Kunci Multi-Region berbeda Wilayah AWS yang dapat digunakan secara bergantian karena memiliki ID kunci dan bahan kunci yang sama. AWS KMS keys Untuk detailnya, lihat Menggunakan kunci multi-Wilayah dalam Panduan Developer AWS Key Management Service .

catatan

Jika Anda menggunakan tabel global versi 2017.11.29, Anda harus menetapkan tindakan atribut agar bidang replikasi yang dicadangkan tidak dienkripsi atau ditandatangani. Untuk detailnya, lihat Masalah dengan tabel global versi lama.

Untuk menggunakan kunci multi-Wilayah dengan DynamoDB Encryption Client, buat kunci multi-Wilayah dan replikasi ke Wilayah di mana aplikasi Anda berjalan. Kemudian konfigurasi Penyedia Langsung KMS untuk menggunakan kunci multi-Wilayah di wilayah di mana klien DynamoDB Encryption Client memanggil AWS KMS.

Contoh berikut mengonfigurasi DynamoDB Encryption Client untuk mengenkripsi data di Wilayah AS Timur (N. Virginia) (us-east-1) dan mendekripsi di Wilayah AS Barat (Oregon) (us-west-2) menggunakan kunci multi-Wilayah.

Java

Dalam contoh ini, Klien Enkripsi DynamoDB mendapatkan Wilayah untuk AWS KMS memanggil dari Wilayah di klien. AWS KMS Nilai keyArn mengidentifikasi kunci multi-Wilayah dalam Wilayah yang sama.

// Encrypt in us-east-1 // Replace the example key ARN and Region with valid values for your application final String usEastKey = 'arn:aws:kms:us-east-1:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab' final String region = 'us-east-1' final AWSKMS kms = AWSKMSClientBuilder.standard().withRegion(region).build(); final DirectKmsMaterialProvider cmp = new DirectKmsMaterialProvider(kms, usEastKey);
// Decrypt in us-west-2 // Replace the example key ARN and Region with valid values for your application final String usWestKey = 'arn:aws:kms:us-west-2:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab' final String region = 'us-west-2' final AWSKMS kms = AWSKMSClientBuilder.standard().withRegion(region).build(); final DirectKmsMaterialProvider cmp = new DirectKmsMaterialProvider(kms, usWestKey);
Python

Dalam contoh ini, Klien Enkripsi DynamoDB mendapatkan Wilayah untuk AWS KMS memanggil dari Wilayah di ARN kunci.

# Encrypt in us-east-1 # Replace the example key ID with a valid value us_east_key = 'arn:aws:kms:us-east-1:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab' kms_cmp = AwsKmsCryptographicMaterialsProvider(key_id=us_east_key)
# Decrypt in us-west-2 # Replace the example key ID with a valid value us_west_key = 'arn:aws:kms:us-west-2:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab' kms_cmp = AwsKmsCryptographicMaterialsProvider(key_id=us_west_key)

Cara kerjanya

Penyedia KMS Langsung mengembalikan kunci enkripsi dan penandatanganan yang dilindungi oleh AWS KMS key yang Anda tentukan, seperti yang ditunjukkan pada diagram berikut.

Input, pemrosesan, dan output dari Penyedia KMS Langsung di DynamoDB Encryption Client
  • Untuk menghasilkan materi enkripsi, Penyedia KMS Langsung meminta AWS KMS untuk membuat kunci data unik untuk setiap item menggunakan AWS KMS key yang Anda tentukan. Penyedia ini mendapatkan kunci enkripsi dan penandatanganan untuk item dari salinan plaintext dari kunci data, kemudian mengembalikan kunci enkripsi dan penandatanganan, bersama dengan kunci data terenkripsi, yang disimpan dalam atribut deskripsi bahan item tersebut.

    Enkriptor item menggunakan kunci enkripsi dan penandatanganan serta membuangnya dari memori secepat mungkin. Hanya salinan terenkripsi dari kunci data dari lokasi mereka diambil yang disimpan dalam item yang dienkripsi.

  • Untuk menghasilkan materi dekripsi, Penyedia KMS Langsung meminta AWS KMS untuk mendekripsi kunci data terenkripsi. Kemudian, ia mendapatkan verifikasi dan kunci penandatanganan dari kunci data plaintext, dan mengembalikan mereka ke enkriptor item.

    Enkriptor item memverifikasi item dan, jika verifikasi berhasil, mendekripsi nilai terenkripsi. Kemudian, ia menghapus kunci dari memori sesegera mungkin.

Dapatkan bahan enkripsi

Bagian ini menjelaskan secara detail input, output, dan pemrosesan Penyedia KMS Langsung ketika menerima permintaan bahan enkripsi dari enkriptor item.

Input (dari aplikasi)

  • ID kunci dari sebuah AWS KMS key.

Input (dari enkriptor item)

Output (untuk enkriptor item)

  • Kunci enkripsi (plaintext)

  • Kunci penandatanganan

  • Dalam deskripsi bahan aktual: Nilai-nilai ini disimpan dalam atribut deskripsi bahan yang ditambahkan klien ke item.

    • amzn-ddb-env-key: Kunci data yang dikodekan Base64 dienkripsi oleh AWS KMS key

    • amzn-ddb-env-alg: Algoritma enkripsi, secara default AES/256

    • amzn-ddb-sig-alg: Algoritma penandatanganan, secara default, Hmac /256 SHA256

    • amzn-ddb-wrap-alg: km

Pengolahan

  1. Penyedia KMS Langsung mengirimkan AWS KMS permintaan untuk menggunakan yang ditentukan AWS KMS key untuk menghasilkan kunci data unik untuk item tersebut. Operasi mengembalikan kunci plaintext dan salinan yang dienkripsi di bawah file. AWS KMS key Hal ini dikenal sebagai bahan kunci awal.

    Permintaan tersebut mencakup nilai-nilai berikut dalam plaintext pada konteks enkripsi AWS KMS. Nilai-nilai non-rahasia ini secara kriptografi terikat pada objek terenkripsi, sehingga konteks enkripsi yang sama diperlukan pada dekripsi. Anda dapat menggunakan nilai-nilai ini untuk mengidentifikasi panggilan ke AWS KMS dalam AWS CloudTrail log.

    • amzn-ddb-env-alg — Algoritma enkripsi, secara default AES/256

    • amzn-ddb-sig-alg — Algoritma penandatanganan, secara default Hmac /256 SHA256

    • (Opsional) aws-kms-table - table name

    • (Opsional) partition key name - partition key value (nilai biner adalah Base64-dikodekan)

    • (Opsional) sort key name - sort key value (nilai biner adalah Base64-dikodekan)

    Direct KMS Provider mendapatkan nilai untuk konteks AWS KMS enkripsi dari konteks enkripsi DynamoDB untuk item tersebut. Jika konteks enkripsi DynamoDB tidak menyertakan nilai, seperti nama tabel, pasangan nama-nilai itu dihilangkan dari konteks enkripsi. AWS KMS

  2. Penyedia KMS Langsung mendapat kunci enkripsi simetris dan kunci penandatanganan dari kunci data. Secara default, ia menggunakan Secure Hash Algorithm (SHA) 256 dan Fungsi Derivasi Kunci RFC5869 berbasis HMAC untuk mendapatkan kunci enkripsi simetris AES 256-bit dan kunci penandatanganan HMAC-SHA-256 256-bit.

  3. Penyedia KMS Langsung mengembalikan output ke enkriptor item.

  4. Enkriptor item menggunakan kunci enkripsi untuk mengenkripsi atribut yang ditentukan dan kunci penandatanganan untuk menandatanganinya, menggunakan algoritma yang ditentukan dalam deskripsi bahan yang aktual. Ia akan menghapus kunci plaintext dari memori sesegera mungkin.

Dapatkan materi dekripsi

Bagian ini menjelaskan secara detail input, output, dan pemrosesan Penyedia KMS Langsung ketika menerima permintaan bahan dekripsi dari enkriptor item.

Input (dari aplikasi)

  • ID kunci dari sebuah AWS KMS key.

    Nilai ID kunci dapat berupa ID kunci, kunci ARN, nama alias atau alias ARN dari. AWS KMS key Nilai apa pun yang tidak disertakan dalam ID kunci, seperti Wilayah, harus tersedia di profil AWS bernama. Kunci ARN menyediakan semua nilai yang AWS KMS dibutuhkan.

Input (dari enkriptor item)

Output (untuk enkriptor item)

  • Kunci enkripsi (plaintext)

  • Kunci penandatanganan

Pengolahan

  1. Penyedia KMS Langsung mendapatkan kunci data terenkripsi dari atribut deskripsi material dalam item yang dienkripsi.

  2. Ia meminta AWS KMS untuk menggunakan yang ditentukan AWS KMS key untuk mendekripsi kunci data terenkripsi. Operasi mengembalikan kunci plaintext.

    Permintaan ini harus menggunakan konteks enkripsi AWS KMS yang digunakan untuk membuat dan mengenkripsi kunci data.

    • aws-kms-table – table name

    • partition key namepartition key value (nilai biner adalah Base64-dikodekan)

    • (Opsional) sort key name - sort key value (nilai biner adalah Base64-dikodekan)

    • amzn-ddb-env-alg — Algoritma enkripsi, secara default AES/256

    • amzn-ddb-sig-alg — Algoritma penandatanganan, secara default Hmac /256 SHA256

  3. Penyedia KMS Langsung menggunakan Secure Hash Algorithm (SHA) 256 dan Fungsi Derivasi Kunci RFC5869 berbasis HMAC untuk mendapatkan kunci enkripsi simetris AES 256-bit dan kunci penandatanganan HMAC-SHA-256 256-bit dari kunci data.

  4. Penyedia KMS Langsung mengembalikan output ke enkriptor item.

  5. Enkriptor item menggunakan kunci penandatanganan untuk memverifikasi item. Jika berhasil, ia menggunakan kunci enkripsi simetris untuk mendekripsi nilai atribut terenkripsi. Operasi ini menggunakan algoritma enkripsi dan penandatanganan yang ditentukan dalam deskripsi bahan aktual. Enkriptor item akan menghapus kunci plaintext dari memori sesegera mungkin.