

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

# Enkripsi DynamoDB saat diam
<a name="EncryptionAtRest"></a>

Semua data pengguna yang disimpan di Amazon DynamoDB dienkripsi sepenuhnya saat diam. Enkripsi DynamoDB saat diam memberikan keamanan yang ditingkatkan dengan mengenkripsi semua data diam Anda menggunakan kunci enkripsi yang disimpan di [AWS Key Management Service (AWS KMS)](https://aws.amazon.com/kms/). Fungsi ini membantu mengurangi beban operasional dan kompleksitas yang terlibat dalam melindungi data sensitif. Dengan enkripsi saat diam, Anda dapat membuat aplikasi yang sensitif terhadap keamanan yang memenuhi persyaratan kepatuhan dan peraturan enkripsi yang ketat.

Enkripsi DynamoDB saat diam menyediakan lapisan tambahan perlindungan data dengan selalu mengamankan data Anda dalam tabel terenkripsi, termasuk kunci primer, indeks sekunder lokal dan global, aliran, tabel global, cadangan, dan klaster DynamoDB Accelerator (DAX) setiap kali data disimpan dalam media yang tahan lama. Kebijakan organisasi, peraturan industri atau pemerintah, dan persyaratan kepatuhan kerap mewajibkan penggunaan enkripsi saat diam untuk meningkatkan keamanan data aplikasi Anda. Untuk informasi selengkapnya tentang enkripsi untuk aplikasi database, lihat [SDK Enkripsi AWS Database](https://docs.aws.amazon.com/database-encryption-sdk/latest/devguide/what-is-database-encryption-sdk.html).

Enkripsi saat istirahat terintegrasi dengan AWS KMS untuk mengelola kunci enkripsi yang digunakan untuk mengenkripsi tabel Anda. Untuk informasi selengkapnya tentang tipe dan status kunci, lihat [AWS Key Management Service konsep](https://docs.aws.amazon.com/kms/latest/developerguide/key-state.html#key-state-cmk-type) di *Panduan AWS Key Management Service Pengembang*.

Saat membuat tabel baru, Anda dapat memilih salah satu AWS KMS key jenis berikut untuk mengenkripsi tabel Anda. Anda dapat beralih di antara jenis-jenis kunci ini kapan saja.
+ **Kunci milik AWS —** Jenis enkripsi default. Kuncinya dimiliki oleh DynamoDB (tanpa biaya tambahan).
+ **Kunci yang dikelola AWS —** Kunci disimpan di akun Anda dan dikelola oleh AWS KMS (AWS KMS dikenakan biaya).
+ **Kunci yang dikelola pelanggan –** Kunci disimpan di akun Anda serta dibuat, dimiliki, dan dikelola oleh Anda. Anda memiliki kontrol penuh atas kunci KMS (AWS KMS dikenakan biaya).

Untuk informasi selengkapnya tentang jenis kunci, lihat [Kunci dan AWS kunci pelanggan](/kms/latest/developerguide/concepts.html#key-mgmt).

**catatan**  
Saat membuat klaster DAX baru dengan enkripsi saat diam diaktifkan, Kunci yang dikelola AWS akan digunakan untuk mengenkripsi data diam di klaster.
Jika tabel Anda memiliki kunci urutan, beberapa kunci urutan yang menandai batas kisaran disimpan dalam plaintext di metadata tabel.

Ketika Anda mengakses tabel terenkripsi, DynamoDB mendekripsi data tabel secara transparan. Anda tidak perlu mengubah kode atau aplikasi apa pun untuk menggunakan atau mengelola tabel terenkripsi. DynamoDB terus memberikan latensi milidetik satu digit yang sama yang Anda harapkan, dan semua kueri DynamoDB bekerja dengan lancar pada data terenkripsi Anda.

Anda dapat menentukan kunci enkripsi saat membuat tabel baru atau mengganti kunci enkripsi pada tabel yang ada dengan menggunakan Konsol Manajemen AWS, AWS Command Line Interface (AWS CLI), atau Amazon DynamoDB API. Untuk mempelajari caranya, lihat [Mengelola tabel yang dienkripsi di DynamoDB](encryption.tutorial.md).

Enkripsi saat istirahat menggunakan Kunci milik AWS ditawarkan tanpa biaya tambahan. Namun, AWS KMS biaya berlaku untuk Kunci yang dikelola AWS dan untuk kunci yang dikelola pelanggan. Untuk informasi selengkapnya tentang harga, silakan lihat [harga AWS KMS](https://aws.amazon.com/kms/pricing).

Enkripsi DynamoDB saat istirahat tersedia di AWS semua Wilayah, termasuk Wilayah AWS Tiongkok (Beijing) dan AWS China (Ningxia) dan Wilayah (AS). AWS GovCloud Untuk informasi selengkapnya, lihat [Enkripsi DynamoDB saat istirahat: Cara kerjanya](encryption.howitworks.md) dan [Catatan penggunaan enkripsi DynamoDB saat diam](encryption.usagenotes.md).

# Enkripsi DynamoDB saat istirahat: Cara kerjanya
<a name="encryption.howitworks"></a>

Enkripsi Amazon DynamoDB saat diam mengenkripsi data Anda menggunakan Advanced Encryption Standard 256-bit (AES-256), yang membantu mengamankan data Anda dari akses tidak sah ke penyimpanan dasar.

Enkripsi saat istirahat terintegrasi dengan AWS Key Management Service (AWS KMS) untuk mengelola kunci enkripsi yang digunakan untuk mengenkripsi tabel Anda.

**catatan**  
Pada Mei 2022, AWS KMS mengubah jadwal rotasi Kunci yang dikelola AWS dari setiap tiga tahun (sekitar 1.095 hari) menjadi setiap tahun (sekitar 365 hari).  
Baru Kunci yang dikelola AWS secara otomatis diputar satu tahun setelah dibuat, dan kira-kira setiap tahun setelahnya.  
Yang Kunci yang dikelola AWS ada secara otomatis diputar satu tahun setelah rotasi terbaru mereka, dan setiap tahun setelahnya.

## Kunci milik AWS
<a name="ddb-owned"></a>

 Kunci milik AWS tidak disimpan di AWS akun Anda. Mereka adalah bagian dari kumpulan kunci KMS yang AWS memiliki dan mengelola untuk digunakan di beberapa AWS akun. AWS Layanan dapat digunakan Kunci milik AWS untuk melindungi data Anda. Kunci milik AWS digunakan oleh DynamoDB diputar setiap tahun (sekitar 365 hari). 

Anda tidak dapat melihat, mengelola, atau menggunakan Kunci milik AWS, atau mengaudit penggunaannya. Namun, Anda tidak perlu melakukan hal apa pun atau mengubah program apa pun untuk melindungi kunci yang mengenkripsi data Anda.

Anda tidak dikenakan biaya bulanan atau biaya penggunaan untuk penggunaan Kunci milik AWS, dan mereka tidak dihitung terhadap AWS KMS kuota untuk akun Anda.

## Kunci yang dikelola AWS
<a name="managed-key-service-default-kms"></a>

Kunci yang dikelola AWS adalah kunci KMS di akun Anda yang dibuat, dikelola, dan digunakan atas nama Anda oleh AWS layanan yang terintegrasi dengannya AWS KMS. Anda dapat melihat Kunci yang dikelola AWS di akun Anda, melihat kebijakan kuncinya, dan mengaudit penggunaannya di log AWS CloudTrail . Namun, Anda tidak dapat mengelola kunci KMS ini atau mengubah izinnya.

Enkripsi saat istirahat secara otomatis terintegrasi dengan AWS KMS untuk mengelola untuk DynamoDB `aws/dynamodb` () yang digunakan Kunci yang dikelola AWS untuk mengenkripsi tabel Anda. Jika Kunci yang dikelola AWS tidak ada saat Anda membuat tabel DynamoDB terenkripsi, AWS KMS secara otomatis membuat kunci baru untuk Anda. Kunci ini digunakan dengan tabel terenkripsi yang dibuat di masa depan. AWS KMS menggabungkan perangkat keras dan perangkat lunak yang aman dan sangat tersedia untuk menyediakan sistem manajemen kunci yang diskalakan untuk cloud.

Untuk informasi selengkapnya tentang mengelola izin Kunci yang dikelola AWS, lihat [Mengotorisasi penggunaan Kunci yang dikelola AWS dalam Panduan AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/services-dynamodb.html#dynamodb-authz) *Pengembang*.

## Kunci yang dikelola pelanggan
<a name="managed-key-customer-managed"></a>

Kunci yang dikelola pelanggan adalah kunci KMS di AWS akun Anda yang Anda buat, miliki, dan kelola. Anda memiliki kontrol penuh atas KMS ini, termasuk membangun dan memelihara kebijakan kuncinya, kebijakan IAM, dan pemberian izin; mengaktifkan dan menonaktifkannya; merotasi materi kriptografinya; menambahkan tag; membuat alias yang merujuk kepadanya; dan menjadwalkan penghapusan KMS tersebut. Untuk informasi selengkapnya tentang mengelola izin kunci terkelola pelanggan, lihat [Kunci terkelola pelanggan](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk).

Saat Anda menentukan kunci yang dikelola pelanggan sebagai kunci enkripsi tingkat tabel, tabel DynamoDB, indeks sekunder lokal dan global, dan aliran dienkripsi dengan kunci yang sama dengan yang dikelola pelanggan. Cadangan sesuai permintaan dienkripsi dengan kunci enkripsi tingkat tabel yang ditentukan pada saat cadangan dibuat. Memperbarui kunci enkripsi tingkat tabel tidak mengubah kunci enkripsi yang terkait dengan cadangan sesuai permintaan yang ada.

Mengatur status kunci yang dikelola pelanggan ke nonaktif atau menjadwalkannya untuk dihapus akan membuat semua pengguna dan layanan DynamoDB tidak dapat mengenkripsi atau mendekripsi data serta melakukan operasi baca dan tulis pada tabel. DynamoDB harus memiliki akses ke kunci enkripsi Anda untuk memastikan bahwa Anda dapat terus mengakses tabel Anda dan untuk mencegah kehilangan data.

Jika Anda menonaktifkan kunci yang dikelola pelanggan atau menjadwalkan penghapusannya, status tabel Anda menjadi **Tidak dapat diakses**. Untuk memastikan bahwa Anda dapat terus bekerja dengan tabel, Anda harus memberikan akses DynamoDB ke kunci enkripsi yang ditentukan dalam waktu tujuh hari. Segera setelah layanan mendeteksi bahwa kunci enkripsi Anda tidak dapat diakses, DynamoDB mengirimkan pemberitahuan email untuk mengingatkan Anda.

**catatan**  
Jika kunci yang dikelola pelanggan tetap tidak dapat diakses untuk layanan DynamoDB selama lebih dari tujuh hari, tabel diarsipkan dan tidak dapat diakses lagi. DynamoDB menciptakan cadangan sesuai permintaan atas tabel Anda, dan Anda menerima tagihan terkait cadangan tersebut. Anda dapat menggunakan cadangan sesuai permintaan ini untuk memulihkan data Anda ke tabel baru. Untuk memulai pemulihan, kunci yang dikelola pelanggan terakhir pada tabel harus diaktifkan, dan DynamoDB harus dapat mengaksesnya.
Jika kunci yang dikelola pelanggan yang digunakan untuk mengenkripsi replika tabel global tidak dapat diakses, DynamoDB akan menghapus replika ini dari grup replikasi. Replika ini tidak akan dihapus dan replikasi dari dan ke wilayah ini akan dihentikan, 20 jam setelah mendeteksi bahwa kunci yang dikelola pelanggan tidak dapat diakses.

Untuk informasi selengkapnya, lihat [mengaktifkan kunci](/kms/latest/developerguide/enabling-keys.html) dan [menghapus kunci](/kms/latest/developerguide/deleting-keys.html). 

## Catatan tentang penggunaan Kunci yang dikelola AWS
<a name="managed-key-notes"></a>

Amazon DynamoDB tidak dapat membaca data tabel Anda kecuali memiliki akses ke kunci KMS yang disimpan di akun Anda. AWS KMS DynamoDB menggunakan enkripsi amplop dan hierarki kunci untuk mengenkripsi data. Kunci AWS KMS enkripsi Anda digunakan untuk mengenkripsi kunci root hierarki kunci ini. Untuk informasi lebih lanjut, lihat [Enkripsi amplop](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#enveloping) di *Panduan Developer AWS Key Management Service *.

 DynamoDB tidak AWS KMS memanggil setiap operasi DynamoDB. Kuncinya disegarkan setiap 5 menit sekali per penelepon dengan lalu lintas aktif.

Pastikan bahwa Anda telah mengonfigurasi SDK untuk menggunakan kembali koneksi. Jika tidak, Anda akan mengalami latensi dari DynamoDB yang harus membangun kembali entri AWS KMS cache baru untuk setiap operasi DynamoDB. Selain itu, Anda mungkin harus menghadapi CloudTrail biaya AWS KMS dan biaya yang lebih tinggi. Misalnya, untuk melakukannya menggunakan SDK Node.js, Anda dapat membuat agen HTTPS baru dengan `keepAlive` diaktifkan. Untuk informasi selengkapnya, lihat [Mengonfigurasi keepAlive di Node.js](https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/node-reusing-connections.html) di *Panduan Developer AWS SDK untuk JavaScript *.

# Catatan penggunaan enkripsi DynamoDB saat diam
<a name="encryption.usagenotes"></a>

Pertimbangkan hal berikut saat Anda menggunakan enkripsi saat diam di Amazon DynamoDB.

## Semua data tabel dienkripsi
<a name="encryption.usagenotes.tabledata"></a>

Enkripsi di sisi server saat diam diaktifkan pada semua data tabel DynamoDB dan tidak dapat dinonaktifkan. Anda tidak dapat mengenkripsi subset item saja dalam tabel.

Enkripsi saat diam hanya mengenkripsi data saat statis (saat diam) pada media penyimpanan persisten. Jika keamanan data menjadi perhatian atas data bergerak atau data dalam penggunaan, Anda mungkin perlu melakukan tindakan tambahan:
+ Data bergerak: Semua data Anda di DynamoDB dienkripsi saat bergerak. Secara default, komunikasi ke dan dari DynamoDB menggunakan protokol HTTPS, yang melindungi lalu lintas jaringan menggunakan enkripsi Secure Sockets Layer (SSL)/Keamanan Lapisan Pengangkutan (TLS).
+ Data dalam penggunaan: Melindungi data Anda sebelum mengirimkannya ke DynamoDB menggunakan enkripsi di sisi klien. Untuk informasi selengkapnya, lihat [Enkripsi di sisi klien dan di sisi server](https://docs.aws.amazon.com/dynamodb-encryption-client/latest/devguide/client-server-side.html) dalam *Panduan Developer Amazon DynamoDB Encryption Client*.

Anda dapat menggunakan aliran dengan tabel terenkripsi. Aliran DynamoDB selalu dienkripsi dengan kunci enkripsi tingkat tabel. Untuk informasi selengkapnya, lihat [Tangkapan data perubahan DynamoDB Streams](Streams.md).

Cadangan DynamoDB dienkripsi, dan tabel yang dipulihkan dari cadangan juga diaktifkan enkripsinya. Anda dapat menggunakan Kunci milik AWS, Kunci yang dikelola AWS, atau kunci yang dikelola pelanggan untuk mengenkripsi data cadangan Anda. Untuk informasi selengkapnya, lihat [Backup dan restore untuk DynamoDB](Backup-and-Restore.md).

Indeks sekunder lokal dan indeks sekunder global dienkripsi menggunakan kunci yang sama seperti tabel dasar.

## Jenis enkripsi
<a name="encryption.usagenotes.encryptiontypes"></a>

**catatan**  
Kunci yang dikelola pelanggan tidak didukung di Tabel Global Versi 2017. Jika ingin menggunakan kunci yang dikelola pelanggan di Tabel Global DynamoDB, Anda perlu meningkatkan tabel ke Tabel Global Versi 2019, lalu mengaktifkannya.

Pada Konsol Manajemen AWS, jenis enkripsi adalah `KMS` ketika Anda menggunakan Kunci yang dikelola AWS atau kunci yang dikelola pelanggan untuk mengenkripsi data Anda. Jenis enkripsi adalah `DEFAULT` ketika Anda menggunakan Kunci milik AWS. Di Amazon DynamoDB API, jenis enkripsi `KMS` adalah saat Anda menggunakan atau kunci Kunci yang dikelola AWS yang dikelola pelanggan. Apabila tidak ada jenis enkripsi, data Anda dienkripsi menggunakan Kunci milik AWS. Anda dapat beralih antara Kunci milik AWS, Kunci yang dikelola AWS, dan kunci yang dikelola pelanggan pada waktu tertentu. Anda dapat menggunakan konsol, AWS Command Line Interface (AWS CLI), atau Amazon DynamoDB API untuk mengganti kunci enkripsi.

Perhatikan batasan berikut saat menggunakan kunci yang dikelola pelanggan:
+ Anda tidak dapat menggunakan kunci yang dikelola pelanggan dengan klaster DynamoDB Accelerator (DAX). Untuk informasi selengkapnya, lihat [Enkripsi DAX saat diam](DAXEncryptionAtRest.md).
+ Anda dapat menggunakan kunci yang dikelola pelanggan untuk mengenkripsi tabel yang menggunakan transaksi. Namun, guna memastikan ketahanan untuk propagasi transaksi, salinan permintaan transaksi disimpan sementara oleh layanan dan dienkripsi menggunakan Kunci milik AWS. Data yang ditempatkan di tabel dan indeks sekunder Anda selalu dienkripsi saat diam menggunakan kunci yang dikelola pelanggan.
+ Anda dapat menggunakan kunci yang dikelola pelanggan untuk mengenkripsi tabel yang menggunakan Contributor Insights. Namun, data yang dikirimkan ke Amazon CloudWatch dienkripsi dengan file. Kunci milik AWS
+ Saat Anda beralih ke kunci terkelola pelanggan baru, pastikan untuk tetap mengaktifkan kunci asli hingga proses selesai. AWS masih akan membutuhkan kunci asli untuk mendekripsi data sebelum mengenkripsi dengan kunci baru. Proses akan selesai ketika SSEDescription Status tabel DIAKTIFKAN dan kunci KMSMaster KeyArn yang dikelola pelanggan baru ditampilkan. Pada titik ini, kunci asli dapat dinonaktifkan atau dijadwalkan untuk dihapus.
+ Setelah kunci yang dikelola pelanggan baru ditampilkan, tabel dan cadangan sesuai permintaan baru dienkripsi dengan kunci baru.
+ Setiap cadangan sesuai permintaan yang ada tetap dienkripsi dengan kunci yang dikelola pelanggan yang digunakan saat cadangan tersebut dibuat. Anda akan membutuhkan kunci yang sama untuk memulihkan cadangan tersebut. Anda dapat mengidentifikasi kunci untuk periode ketika setiap cadangan dibuat dengan menggunakan DescribeBackup API untuk melihat cadangan tersebut SSEDescription.
+ Jika Anda menonaktifkan kunci yang dikelola pelanggan atau menjadwalkannya untuk dihapus, data apa pun di DynamoDB Streams masih dikenakan masa aktif 24 jam. Data aktivitas yang tidak diambil memenuhi syarat untuk dipangkas saat berusia lebih dari 24 jam.
+ Jika Anda menonaktifkan kunci yang dikelola pelanggan atau menjadwalkannya untuk dihapus, penghapusan Waktu untuk Tayang (TTL) berlanjut selama 30 menit. Penghapusan TTL ini terus dipancarkan ke DynamoDB Streams dan tunduk pada interval standar. trimming/retention 

  Untuk informasi selengkapnya, lihat [mengaktifkan kunci](/kms/latest/developerguide/enabling-keys.html) dan [menghapus kunci](/kms/latest/developerguide/deleting-keys.html). 

## Menggunakan kunci KMS dan kunci data
<a name="dynamodb-kms"></a>

Fitur enkripsi DynamoDB saat istirahat menggunakan AWS KMS key dan hierarki kunci data untuk melindungi data tabel Anda. DynamoDB menggunakan hierarki kunci yang sama untuk melindungi aliran, tabel global, dan cadangan DynamoDB ketika ditulis ke media tahan lama.

Kami menyarankan Anda merencanakan strategi enkripsi Anda sebelum menerapkan tabel Anda di DynamoDB. Jika Anda menyimpan data sensitif atau rahasia di DynamoDB, pertimbangkan untuk menyertakan enkripsi di sisi klien dalam paket Anda. Dengan cara ini, Anda dapat mengenkripsi data sedekat mungkin dengan asalnya, dan memastikan perlindungannya sepanjang siklus hidupnya. Untuk informasi selengkapnya, lihat dokumentasi [klien enkripsi DynamoDB](https://docs.aws.amazon.com/dynamodb-encryption-client/latest/devguide/what-is-ddb-encrypt.html).

**AWS KMS key**  
Enkripsi saat diam melindungi tabel DynamoDB Anda di bawah AWS KMS key. Secara default, DynamoDB menggunakan [Kunci milik AWS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk), kunci enkripsi multi-penghuni yang dibuat dan dikelola di akun layanan DynamoDB. Namun Anda dapat mengenkripsi tabel DynamoDB Anda di bawah [kunci yang dikelola pelanggan](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk) untuk DynamoDB (`aws/dynamodb`) di Akun AWS Anda. Anda dapat memilih kunci KMS yang berbeda untuk setiap tabel. Kunci KMS yang Anda pilih untuk tabel juga digunakan untuk mengenkripsi indeks sekunder lokal dan global, aliran, dan cadangan.  
Anda memilih kunci KMS untuk tabel saat membuat atau memperbarui tabel. Anda dapat mengubah kunci KMS untuk tabel kapan saja, baik di konsol DynamoDB atau dengan menggunakan operasi. [UpdateTable](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateTable.html) Proses pengalihan kunci berjalan tanpa hambatan dan tidak memerlukan waktu henti atau menurunkan layanan.  
DynamoDB hanya mendukung [kunci KMS simetris](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#symmetric-cmks). Anda tidak dapat menggunakan [kunci KMS asimetris](https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html#asymmetric-cmks) untuk mengenkripsi tabel DynamoDB Anda. 
Gunakan kunci yang dikelola pelanggan untuk mendapatkan fitur berikut:  
+ Anda membuat dan mengelola kunci KMS, termasuk menetapkan [kebijakan kunci](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html), [kebijakan IAM](https://docs.aws.amazon.com/kms/latest/developerguide/iam-policies.html), dan [pemberian izin](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html) untuk mengontrol akses ke kunci KMS. Anda dapat [mengaktifkan dan menonaktifkan](https://docs.aws.amazon.com/kms/latest/developerguide/enabling-keys.html) kunci KMS, mengaktifkan dan menonaktifkan [rotasi kunci otomatis](https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html), dan [menghapus kunci KMS](https://docs.aws.amazon.com/kms/latest/developerguide/deleting-keys.html) ketika sudah tidak digunakan.
+ Anda dapat menggunakan kunci yang dikelola pelanggan dengan [material kunci yang diimpor](https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html) atau kunci yang dikelola pelanggan di [penyimpanan kunci kustom](https://docs.aws.amazon.com/kms/latest/developerguide/custom-key-store-overview.html) yang Anda miliki dan kelola. 
+ [Anda dapat mengaudit enkripsi dan dekripsi tabel DynamoDB Anda dengan memeriksa panggilan API DynamoDB ke dalam log. AWS KMSAWS CloudTrail](https://docs.aws.amazon.com/kms/latest/developerguide/services-dynamodb.html#dynamodb-cmk-trail)
Gunakan Kunci yang dikelola AWS jika Anda memerlukan salah satu fitur berikut:  
+ Anda dapat [melihat kunci KMS](https://docs.aws.amazon.com/kms/latest/developerguide/viewing-keys.html) dan [melihat kebijakan kuncinya](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-viewing.html). (Anda tidak dapat mengubah kebijakan kunci.)
+ [Anda dapat mengaudit enkripsi dan dekripsi tabel DynamoDB Anda dengan memeriksa panggilan API DynamoDB ke dalam log. AWS KMSAWS CloudTrail](https://docs.aws.amazon.com/kms/latest/developerguide/services-dynamodb.html#dynamodb-cmk-trail)
Namun, Kunci milik AWS ini gratis dan penggunaannya tidak dihitung terhadap [AWS KMS sumber daya atau kuota permintaan](https://docs.aws.amazon.com/kms/latest/developerguide/limits.html). Kunci yang dikelola pelanggan dan Kunci yang dikelola AWS [dikenakan biaya](https://aws.amazon.com/kms/pricing/) untuk setiap panggilan API dan AWS KMS kuota berlaku untuk kunci KMS ini.

**Kunci tabel**  
DynamoDB menggunakan kunci KMS untuk tabel guna [menghasilkan](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) dan mengenkripsi [kunci data](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#data-keys) unik untuk tabel tersebut, yang dikenal sebagai *kunci tabel*. Kunci tabel bertahan sepanjang masa hidup tabel terenkripsi.   
Kunci tabel digunakan sebagai kunci enkripsi kunci. DynamoDB menggunakan kunci tabel ini untuk melindungi kunci enkripsi data yang digunakan untuk mengenkripsi data tabel. DynamoDB menghasilkan kunci enkripsi data yang unik untuk setiap struktur dasar dalam tabel, tetapi beberapa item tabel mungkin dilindungi oleh kunci enkripsi data yang sama.  

![\[Mengenkripsi tabel DynamoDB dengan enkripsi saat diam\]](http://docs.aws.amazon.com/id_id/amazondynamodb/latest/developerguide/images/service-ddb-encrypt.png)

Saat pertama kali mengakses tabel terenkripsi, DynamoDB mengirimkan permintaan untuk menggunakan kunci KMS AWS KMS untuk mendekripsi kunci tabel. Kemudian, layanan ini menggunakan kunci tabel plaintext untuk mendekripsi kunci enkripsi data, dan menggunakan kunci enkripsi data plaintext untuk mendekripsi data tabel.  
DynamoDB menyimpan dan menggunakan kunci tabel dan kunci enkripsi data di luar. AWS KMS Layanan ini melindungi semua kunci dengan enkripsi [Advanced Encryption Standard](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard) (AES) dan kunci enkripsi 256-bit. Kemudian, layanan ini menyimpan kunci terenkripsi dengan data terenkripsi agar kunci tersebut tersedia untuk mendekripsi data tabel sesuai permintaan.  
Jika Anda mengubah kunci KMS untuk tabel Anda, DynamoDB menghasilkan kunci tabel baru. Kemudian, layanan ini menggunakan kunci tabel baru untuk melakukan enkripsi ulang kunci enkripsi data.

**Melakukan cache pada kunci tabel**  
Untuk menghindari panggilan AWS KMS untuk setiap operasi DynamoDB, DynamoDB menyimpan tombol tabel plaintext untuk setiap pemanggil dalam memori. Jika DynamoDB mendapat permintaan untuk kunci tabel cache setelah lima menit tidak aktif, ia akan mengirimkan permintaan baru AWS KMS untuk mendekripsi kunci tabel. Panggilan ini akan menangkap setiap perubahan yang dibuat pada kebijakan akses kunci KMS di AWS KMS atau AWS Identity and Access Management (IAM) sejak permintaan terakhir untuk mendekripsi kunci tabel.

## Mengotorisasi penggunaan kunci KMS Anda
<a name="dynamodb-kms-authz"></a>

Jika Anda menggunakan [kunci yang dikelola pelanggan](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk) atau [Kunci yang dikelola AWS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk) di akun Anda untuk melindungi tabel DynamoDB Anda, kebijakan pada kunci KMS tersebut harus memberikan izin kepada DynamoDB untuk menggunakannya atas nama Anda. Konteks otorisasi pada Kunci yang dikelola AWS for DynamoDB menyertakan kebijakan utamanya dan hibah yang mendelegasikan izin untuk menggunakannya. 

Anda memiliki kontrol penuh atas kebijakan dan pemberian izin pada kunci yang dikelola pelanggan. Karena Kunci yang dikelola AWS ada di akun Anda, Anda dapat melihat kebijakan dan pemberian izinnya. Tetapi, karena dikelola oleh AWS, Anda tidak dapat mengubah kebijakan.

DynamoDB tidak memerlukan otorisasi tambahan untuk menggunakan default untuk melindungi tabel DynamoDB di tabel [Kunci milik AWS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys)Anda. Akun AWS

**Topics**
+ [Kebijakan utama untuk sebuah Kunci yang dikelola AWS](#dynamodb-policies)
+ [Kebijakan kunci untuk kunci yang dikelola pelanggan](#dynamodb-customer-cmk-policy)
+ [Menggunakan pemberian izin untuk mengotorisasi DynamoDB](#dynamodb-grants)

### Kebijakan utama untuk sebuah Kunci yang dikelola AWS
<a name="dynamodb-policies"></a>

Ketika DynamoDB menggunakan [Kunci yang dikelola AWS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk) untuk DynamoDB (`aws/dynamodb`) dalam operasi kriptografi, layanan ini melakukannya atas nama pengguna yang mengakses [sumber daya DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/access-control-overview.html). Kebijakan utama pada Kunci yang dikelola AWS memberikan semua pengguna di akun izin untuk menggunakan Kunci yang dikelola AWS untuk operasi tertentu. Namun izin hanya diberikan ketika DynamoDB membuat permintaan atas nama pengguna. [ViaService Kondisi](https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-via-service) dalam kebijakan kunci tidak mengizinkan pengguna untuk menggunakan Kunci yang dikelola AWS kecuali permintaan berasal dari layanan DynamoDB.

Kebijakan utama ini, seperti kebijakan semua Kunci yang dikelola AWS, ditetapkan oleh AWS. Anda tidak dapat mengubahnya, tetapi Anda dapat melihatnya kapan saja. Untuk detailnya, lihat [Melihat kebijakan kunci](https://docs.aws.amazon.com//kms/latest/developerguide/key-policy-viewing.html).

Pernyataan kebijakan dalam kebijakan kunci memiliki efek sebagai berikut:
+ Izinkan pengguna di akun untuk menggunakan Kunci yang dikelola AWS for DynamoDB dalam operasi kriptografi ketika permintaan berasal dari DynamoDB atas nama mereka. Kebijakan ini juga memungkinkan pengguna untuk [membuat pemberian izin](https://docs.aws.amazon.com/kms/latest/developerguide/services-dynamodb.html#dynamodb-grants) untuk kunci KMS.
+ Memungkinkan identitas IAM yang diotorisasi di akun untuk melihat properti Kunci yang dikelola AWS untuk DynamoDB dan [mencabut pemberian izin](https://docs.aws.amazon.com/kms/latest/APIReference/API_RevokeGrant.html) yang memungkinkan DynamoDB menggunakan kunci KMS. DynamoDB menggunakan [pemberian izin](https://docs.aws.amazon.com/kms/latest/developerguide/services-dynamodb.html#dynamodb-grants) untuk operasi pemeliharaan berkelanjutan.
+ Memungkinkan DynamoDB melakukan operasi read-only untuk menemukan DynamoDB untuk akun Kunci yang dikelola AWS Anda.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Id" : "auto-dynamodb-1",
  "Statement" : [ {
    "Sid" : "Allow access through Amazon DynamoDB for all principals in the account that are authorized to use Amazon DynamoDB",
    "Effect" : "Allow",
    "Principal" : {
      "AWS" : "*"
    },
    "Action" : [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:CreateGrant", "kms:DescribeKey" ],
    "Resource" : "*",
    "Condition" : {
      "StringEquals" : {
        "kms:CallerAccount" : "111122223333",
        "kms:ViaService" : "dynamodb.us-west-2.amazonaws.com"
      }
    }
  }, {
    "Sid" : "Allow direct access to key metadata to the account",
    "Effect" : "Allow",
    "Principal" : {
      "AWS" : "arn:aws:iam::111122223333:root"
    },
    "Action" : [ "kms:Describe*", "kms:Get*", "kms:List*", "kms:RevokeGrant" ],
    "Resource" : "*"
  }, {
    "Sid" : "Allow DynamoDB Service with service principal name dynamodb.amazonaws.com to describe the key directly",
    "Effect" : "Allow",
    "Principal" : {
      "Service" : "dynamodb.amazonaws.com"
    },
    "Action" : [ "kms:Describe*", "kms:Get*", "kms:List*" ],
    "Resource" : "*"
  } ]
}
```

------

### Kebijakan kunci untuk kunci yang dikelola pelanggan
<a name="dynamodb-customer-cmk-policy"></a>

Saat Anda memilih [kunci yang dikelola pelanggan](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk) untuk melindungi tabel DynamoDB, DynamoDB mendapat izin untuk menggunakan kunci KMS atas nama pengguna utama yang membuat pilihan. Pengguna utama tersebut, pengguna atau peran, harus memiliki izin pada kunci KMS yang dibutuhkan DynamoDB. Anda dapat memberikan izin ini dalam [kebijakan kunci](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html), [kebijakan IAM](https://docs.aws.amazon.com/kms/latest/developerguide/iam-policies.html), atau [pemberian izin](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html).

Minimal, DynamoDB memerlukan izin berikut pada kunci yang dikelola pelanggan:
+ [kms:Encrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html)
+ [kms:Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)
+ [kms: ReEncrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html) \$1 (untuk kms: ReEncryptFrom dan kms:ReEncryptTo)
+ kms: GenerateDataKey \$1 (untuk [kms: GenerateDataKey dan [kms](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html):](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)) GenerateDataKeyWithoutPlaintext
+ [km: DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)
+ [km: CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html)

Sebagai contoh, kebijakan kunci berikut hanya menyediakan izin yang diperlukan. Kebijakan ini memiliki efek sebagai berikut:
+ Memungkinkan DynamoDB untuk menggunakan kunci KMS dalam operasi kriptografi dan membuat pemberian izin, tetapi hanya ketika bertindak atas nama pengguna utama di akun yang memiliki izin untuk menggunakan DynamoDB. Jika pengguna utama yang disebutkan dalam pernyataan kebijakan tidak memiliki izin untuk menggunakan DynamoDB, panggilan gagal, bahkan ketika panggilan berasal dari layanan DynamoDB. 
+ Kunci ViaService kondisi [kms:](https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-via-service) mengizinkan izin hanya jika permintaan berasal dari DynamoDB atas nama prinsipal yang tercantum dalam pernyataan kebijakan. Pengguna utama ini tidak dapat memanggil operasi ini secara langsung. Perhatikan bahwa nilai `kms:ViaService`, `dynamodb.*.amazonaws.com`, memiliki tanda bintang (\$1) di posisi Wilayah. [DynamoDB memerlukan izin untuk independen dari apa pun sehingga dapat membuat panggilan lintas Wilayah AWS wilayah untuk mendukung tabel global DynamoDB.](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GlobalTables.html)
+ Memberikan administrator kunci KMS (pengguna yang dapat mengasumsikan peran `db-team`) akses hanya-baca ke kunci KMS dan izin untuk mencabut pemberian izin, termasuk [pemberian izin yang diperlukan DynamoDB](#dynamodb-grants) untuk melindungi tabel.

Sebelum menggunakan kebijakan kunci contoh, ganti prinsip contoh dengan prinsip aktual dari Anda. Akun AWS

------
#### [ JSON ]

****  

```
{
  "Id": "key-policy-dynamodb",
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid" : "Allow access through Amazon DynamoDB for all principals in the account that are authorized to use Amazon DynamoDB",
      "Effect": "Allow",
      "Principal": {"AWS": "arn:aws:iam::111122223333:user/db-lead"},
      "Action": [
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:ReEncrypt*",
        "kms:GenerateDataKey*",
        "kms:DescribeKey",
        "kms:CreateGrant"
      ],
      "Resource": "*",      
      "Condition": { 
         "StringLike": {
           "kms:ViaService" : "dynamodb.*.amazonaws.com"
         }
      }
    },
    {
      "Sid":  "Allow administrators to view the KMS key and revoke grants",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::111122223333:role/db-team"
       },
      "Action": [
        "kms:Describe*",
        "kms:Get*",
        "kms:List*",
        "kms:RevokeGrant"
      ],
      "Resource": "*"
    }
  ]
}
```

------

### Menggunakan pemberian izin untuk mengotorisasi DynamoDB
<a name="dynamodb-grants"></a>

Selain kebijakan kunci, DynamoDB menggunakan pemberian izin untuk mengatur izin pada kunci yang dikelola pelanggan atau Kunci yang dikelola AWS untuk DynamoDB (`aws/dynamodb`). Untuk melihat hibah pada kunci KMS di akun Anda, gunakan operasi. [ListGrants](https://docs.aws.amazon.com/kms/latest/APIReference/API_ListGrants.html) DynamoDB tidak memerlukan pemberian izin, atau izin tambahan apa pun, untuk menggunakan [Kunci milik AWS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk) untuk melindungi tabel Anda.

DynamoDB menggunakan izin yang diberikan ketika melakukan pemeliharaan sistem latar belakang dan tugas perlindungan data berkelanjutan. Layanan ini juga menggunakan pemberian izin untuk menghasilkan [kunci tabel](https://docs.aws.amazon.com/kms/latest/developerguide/services-dynamodb.html#dynamodb-encrypt).

Setiap pemberian izin berlaku spesifik pada sebuah tabel. Jika akun mencakup beberapa tabel yang dienkripsi di bawah kunci KMS yang sama, ada pemberian izin dari setiap jenis untuk setiap tabel. Hibah dibatasi oleh [konteks enkripsi DynamoDB](#dynamodb-encryption-context), yang mencakup nama tabel dan Akun AWS ID, dan itu termasuk izin untuk [pensiun hibah jika tidak lagi diperlukan](https://docs.aws.amazon.com/kms/latest/APIReference/API_RetireGrant.html). 

Untuk membuat pemberian izin, DynamoDB harus memiliki izin untuk memanggil `CreateGrant` atas nama pengguna yang membuat tabel terenkripsi. Untuk Kunci yang dikelola AWS, DynamoDB `kms:CreateGrant` mendapat izin dari kebijakan [kunci](#dynamodb-policies), yang memungkinkan pengguna akun untuk [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html)memanggil kunci KMS hanya ketika DynamoDB membuat permintaan atas nama pengguna yang berwenang. 

Kebijakan kunci juga dapat memungkinkan akun untuk [mencabut pemberian izin](https://docs.aws.amazon.com/kms/latest/APIReference/API_RevokeGrant.html) pada kunci KMS. Namun, jika Anda mencabut pemberian izin pada tabel dienkripsi yang aktif, DynamoDB tidak akan mampu melindungi dan menjaga tabel tersebut.

## Konteks enkripsi DynamoDB
<a name="dynamodb-encryption-context"></a>

[Konteks enkripsi](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context) adalah seperangkat pasangan kunci-nilai yang berisi data non-rahasia yang arbitrer. Ketika Anda menyertakan konteks enkripsi dalam permintaan untuk mengenkripsi data, secara AWS KMS kriptografis mengikat konteks enkripsi ke data terenkripsi. Untuk mendekripsi data, Anda harus meneruskan konteks enkripsi yang sama. 

DynamoDB menggunakan konteks enkripsi yang sama di semua operasi kriptografi. AWS KMS Jika Anda menggunakan [kunci yang dikelola pelanggan](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk) atau [Kunci yang dikelola AWS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk) untuk melindungi tabel DynamoDB Anda, Anda dapat menggunakan konteks enkripsi untuk mengidentifikasi penggunaan kunci KMS dalam catatan dan log audit. Itu juga muncul dalam plaintext di log, seperti dan [AWS CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html)[Amazon CloudWatch ](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) Logs. 

Konteks enkripsi juga dapat digunakan sebagai syarat untuk otorisasi dalam kebijakan dan pemberian izin. DynamoDB menggunakan konteks enkripsi untuk membatasi hibah [yang](#dynamodb-grants) memungkinkan akses ke kunci yang dikelola pelanggan Kunci yang dikelola AWS atau di akun dan wilayah Anda.

Dalam permintaannya AWS KMS, DynamoDB menggunakan konteks enkripsi dengan dua pasangan kunci-nilai.

```
"encryptionContextSubset": {
    "aws:dynamodb:tableName": "Books"
    "aws:dynamodb:subscriberId": "111122223333"
}
```
+ **Tabel** – Pasangan kunci–nilai pertama mengidentifikasi tabel yang dienkripsi DynamoDB. Kuncinya adalah `aws:dynamodb:tableName`. Nilainya adalah nama tabel.

  ```
  "aws:dynamodb:tableName": "<table-name>"
  ```

  Contoh:

  ```
  "aws:dynamodb:tableName": "Books"
  ```
+ **Akun** – Pasangan kunci–nilai kedua mengidentifikasi Akun AWS. Kuncinya adalah `aws:dynamodb:subscriberId`. Nilainya adalah ID akun.

  ```
  "aws:dynamodb:subscriberId": "<account-id>"
  ```

  Contoh:

  ```
  "aws:dynamodb:subscriberId": "111122223333"
  ```

## Memantau interaksi DynamoDB dengan AWS KMS
<a name="dynamodb-cmk-trail"></a>

Jika Anda menggunakan [kunci yang dikelola pelanggan](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk) atau [Kunci yang dikelola AWS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk)untuk melindungi tabel DynamoDB, Anda dapat AWS CloudTrail menggunakan log untuk melacak permintaan yang dikirimkan DynamoDB atas nama Anda. AWS KMS 

Permintaan `GenerateDataKey`, `Decrypt`, dan `CreateGrant` dibahas dalam bagian ini. Selain itu, DynamoDB menggunakan [DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)operasi untuk menentukan apakah kunci KMS yang Anda pilih ada di akun dan wilayah. Ini juga menggunakan [RetireGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_RetireGrant.html)operasi untuk menghapus hibah saat Anda menghapus tabel. 

**GenerateDataKey**  
Ketika Anda mengaktifkan enkripsi saat diam pada tabel, DynamoDB menciptakan kunci tabel unik. Ini mengirimkan *[GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)*permintaan untuk AWS KMS yang menentukan kunci KMS untuk tabel.   
Peristiwa yang mencatat operasi `GenerateDataKey` serupa dengan peristiwa contoh berikut. Pengguna adalah akun layanan DynamoDB. Parameternya mencakup Amazon Resource Name (ARN) dari kunci KMS, penentu kunci yang memerlukan kunci 256-bit, dan [konteks enkripsi](#dynamodb-encryption-context) yang mengidentifikasi tabel dan Akun AWS.  

```
{
    "eventVersion": "1.05",
    "userIdentity": {
        "type": "AWSService", 
        "invokedBy": "dynamodb.amazonaws.com" 
    },
    "eventTime": "2018-02-14T00:15:17Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "GenerateDataKey",
    "awsRegion": "us-west-2",
    "sourceIPAddress": "dynamodb.amazonaws.com",
    "userAgent": "dynamodb.amazonaws.com",
    "requestParameters": {
        "encryptionContext": {
            "aws:dynamodb:tableName": "Services",
            "aws:dynamodb:subscriberId": "111122223333"
        }, 
        "keySpec": "AES_256", 
        "keyId": "1234abcd-12ab-34cd-56ef-1234567890ab"
    }, 
    "responseElements": null,
    "requestID": "229386c1-111c-11e8-9e21-c11ed5a52190",
    "eventID": "e3c436e9-ebca-494e-9457-8123a1f5e979",
    "readOnly": true,
    "resources": [
        {
            "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "accountId": "111122223333",
            "type": "AWS::KMS::Key" 
        } 
    ],
    "eventType": "AwsApiCall",
    "recipientAccountId": "111122223333",
    "sharedEventID": "bf915fa6-6ceb-4659-8912-e36b69846aad"
}
```

**Dekripsi**  
Ketika Anda mengakses tabel DynamoDB yang dienkripsi, DynamoDB perlu mendekripsi kunci tabel agar dapat mendekripsi kunci di bawahnya dalam hierarki. Layanan ini kemudian mendekripsi data dalam tabel. Untuk mendekripsi kunci tabel. DynamoDB mengirimkan permintaan Dekripsi [yang](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) menentukan kunci AWS KMS KMS untuk tabel.  
Peristiwa yang mencatat operasi `Decrypt` serupa dengan peristiwa contoh berikut. Pengguna adalah kepala sekolah Anda Akun AWS yang mengakses tabel. Parameter termasuk kunci tabel terenkripsi (sebagai gumpalan ciphertext) dan [konteks enkripsi](#dynamodb-encryption-context) yang mengidentifikasi tabel dan file. Akun AWS AWS KMS memperoleh ID kunci KMS dari ciphertext.   

```
{
    "eventVersion": "1.05",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROAIGDTESTANDEXAMPLE:user01",
        "arn": "arn:aws:sts::111122223333:assumed-role/Admin/user01",
        "accountId": "111122223333",
        "accessKeyId": "AKIAIOSFODNN7EXAMPLE",
        "sessionContext": {
            "attributes": {
                "mfaAuthenticated": "false", 
                "creationDate": "2018-02-14T16:42:15Z"
            },
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AROAIGDT3HGFQZX4RY6RU",
                "arn": "arn:aws:iam::111122223333:role/Admin",
                "accountId": "111122223333",
                "userName": "Admin" 
            }
        },
        "invokedBy": "dynamodb.amazonaws.com"
    },
    "eventTime": "2018-02-14T16:42:39Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "Decrypt",
    "awsRegion": "us-west-2",
    "sourceIPAddress": "dynamodb.amazonaws.com",
    "userAgent": "dynamodb.amazonaws.com",
    "requestParameters": 
    {
        "encryptionContext":
        {
            "aws:dynamodb:tableName": "Books",
            "aws:dynamodb:subscriberId": "111122223333" 
        }
    }, 
    "responseElements": null, 
    "requestID": "11cab293-11a6-11e8-8386-13160d3e5db5",
    "eventID": "b7d16574-e887-4b5b-a064-bf92f8ec9ad3", 
    "readOnly": true, 
    "resources": [ 
        {
            "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "accountId": "111122223333", 
            "type": "AWS::KMS::Key" 
        }
    ],
    "eventType": "AwsApiCall", 
    "recipientAccountId": "111122223333"
}
```

**CreateGrant**  
Saat Anda menggunakan [kunci yang dikelola pelanggan](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk) atau [Kunci yang dikelola AWS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-managed-cmk) untuk melindungi tabel DynamoDB Anda, DynamoDB menggunakan [pemberian izin](#dynamodb-grants) untuk mengizinkan layanan guna melakukan perlindungan dan pemeliharaan data berkelanjutan serta tugas ketahanan. Pemberian izin ini tidak diperlukan pada [Kunci milik AWS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#aws-owned-cmk).  
Pemberian izin yang dibuat DynamoDB spesifik pada sebuah tabel. Prinsip dalam [CreateGrant](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateGrant.html)permintaan adalah pengguna yang membuat tabel.   
Peristiwa yang mencatat operasi `CreateGrant` serupa dengan peristiwa contoh berikut. Parameternya mencakup Amazon Resource Name (ARN) dari kunci KMS untuk tabel tersebut, pengguna utama yang izin dan pengguna utama yang dipensiunkan (layanan DynamoDB), serta operasi yang dicakup oleh pemberian izin. Hal ini juga mencakup kendala yang mengharuskan semua operasi enkripsi menggunakan [konteks enkripsi](#dynamodb-encryption-context) yang ditentukan.  

```
{ 
    "eventVersion": "1.05", 
    "userIdentity": 
    { 
        "type": "AssumedRole", 
        "principalId": "AROAIGDTESTANDEXAMPLE:user01", 
        "arn": "arn:aws:sts::111122223333:assumed-role/Admin/user01", 
        "accountId": "111122223333", 
        "accessKeyId": "AKIAIOSFODNN7EXAMPLE", 
        "sessionContext": { 
            "attributes": { 
                "mfaAuthenticated": "false", 
                "creationDate": "2018-02-14T00:12:02Z" 
            }, 
            "sessionIssuer": { 
                "type": "Role", 
                "principalId": "AROAIGDTESTANDEXAMPLE", 
                "arn": "arn:aws:iam::111122223333:role/Admin", 
                "accountId": "111122223333", 
                "userName": "Admin" 
            }
        }, 
        "invokedBy": "dynamodb.amazonaws.com" 
    }, 
    "eventTime": "2018-02-14T00:15:15Z", 
    "eventSource": "kms.amazonaws.com", 
    "eventName": "CreateGrant", 
    "awsRegion": "us-west-2", 
    "sourceIPAddress": "dynamodb.amazonaws.com", 
    "userAgent": "dynamodb.amazonaws.com", 
    "requestParameters": { 
        "keyId": "1234abcd-12ab-34cd-56ef-1234567890ab", 
        "retiringPrincipal": "dynamodb.us-west-2.amazonaws.com", 
        "constraints": { 
            "encryptionContextSubset": {
                "aws:dynamodb:tableName": "Books",
                "aws:dynamodb:subscriberId": "111122223333" 
            } 
        }, 
        "granteePrincipal": "dynamodb.us-west-2.amazonaws.com", 
        "operations": [ 
            "DescribeKey", 
            "GenerateDataKey", 
            "Decrypt", 
            "Encrypt", 
            "ReEncryptFrom", 
            "ReEncryptTo", 
            "RetireGrant" 
        ] 
    }, 
    "responseElements": { 
        "grantId": "5c5cd4a3d68e65e77795f5ccc2516dff057308172b0cd107c85b5215c6e48bde" 
    }, 
    "requestID": "2192b82a-111c-11e8-a528-f398979205d8", 
    "eventID": "a03d65c3-9fee-4111-9816-8bf96b73df01", 
    "readOnly": false, 
    "resources": [ 
        { 
            "ARN": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
            "accountId": "111122223333", 
            "type": "AWS::KMS::Key" 
        } 
    ], 
    "eventType": "AwsApiCall",
    "recipientAccountId": "111122223333"
}
```

# Mengelola tabel yang dienkripsi di DynamoDB
<a name="encryption.tutorial"></a>

Anda dapat menggunakan Konsol Manajemen AWS atau AWS Command Line Interface (AWS CLI) untuk menentukan kunci enkripsi pada tabel baru dan memperbarui kunci enkripsi pada tabel yang ada di Amazon DynamoDB.

**Topics**
+ [Menentukan kunci enkripsi untuk tabel baru](#encryption.tutorial-creating)
+ [Memperbarui kunci enkripsi](#encryption.tutorial-update)

## Menentukan kunci enkripsi untuk tabel baru
<a name="encryption.tutorial-creating"></a>

Ikuti langkah berikut untuk menentukan kunci enkripsi pada tabel baru menggunakan konsol Amazon DynamoDB atau AWS CLI.

### Membuat tabel yang dienkripsi (konsol)
<a name="encryption.tutorial-console"></a>

1. Masuk ke Konsol Manajemen AWS dan buka konsol DynamoDB di. [https://console.aws.amazon.com/dynamodb/](https://console.aws.amazon.com/dynamodb/)

1.  Di panel navigasi di sisi kiri konsol, pilih **Tabel**.

1. Pilih **Buat Tabel**. Untuk **Nama tabel**, masukkan **Music**. Untuk kunci primer, masukkan **Artist**, dan untuk kunci urutan, masukkan **SongTitle**, keduanya sebagai string.

1. Di **Pengaturan**, pastikan bahwa **Sesuaikan pengaturan** dipilih.
**catatan**  
Jika **Gunakan pengaturan default** dipilih, tabel dienkripsi saat istirahat dengan tanpa Kunci milik AWS biaya tambahan.

1. Di bawah **Enkripsi saat istirahat**, pilih jenis enkripsi - Kunci milik AWS Kunci yang dikelola AWS, atau kunci yang dikelola pelanggan.
   +  **Dimiliki oleh Amazon DynamoDB.** AWS kunci yang dimiliki, khusus dimiliki dan dikelola oleh DynamoDB. Anda tidak dikenakan biaya tambahan untuk menggunakan kunci ini.
   + **AWS kunci yang dikelola**. Alias kunci: `aws/dynamodb`. Kunci disimpan di akun Anda dan dikelola oleh AWS Key Management Service (AWS KMS). AWS KMS dikenakan biaya.
   +  **Disimpan di akun Anda, serta dimiliki dan dikelola oleh Anda.** Kunci yang dikelola pelanggan. Kunci disimpan di akun Anda dan dikelola oleh AWS Key Management Service (AWS KMS). AWS KMS dikenakan biaya.
**catatan**  
Jika Anda memilih untuk memiliki dan mengelola kunci Anda sendiri, pastikan Kebijakan Kunci KMS diatur dengan tepat. Untuk informasi selengkapnya termasuk contoh, lihat [Kebijakan kunci untuk kunci yang dikelola pelanggan](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk).

1. Pilih **Buat tabel** untuk membuat tabel terenkripsi. Untuk mengonfirmasi jenis enkripsi, pilih detail tabel pada tab **Gambaran umum** dan tinjau bagian **Detail tambahan**.

### Membuat tabel yang dienkripsi (AWS CLI)
<a name="encryption.tutorial-cli"></a>

Gunakan AWS CLI untuk membuat tabel dengan default Kunci milik AWS, kunci Kunci yang dikelola AWS, atau yang dikelola pelanggan untuk Amazon DynamoDB.

**Untuk membuat tabel terenkripsi dengan default Kunci milik AWS**
+ Buat tabel `Music` yang dienkripsi seperti berikut.

  ```
  aws dynamodb create-table \
    --table-name Music \
    --attribute-definitions \
        AttributeName=Artist,AttributeType=S \
        AttributeName=SongTitle,AttributeType=S \
    --key-schema \
        AttributeName=Artist,KeyType=HASH \
        AttributeName=SongTitle,KeyType=RANGE \
    --provisioned-throughput \
        ReadCapacityUnits=10,WriteCapacityUnits=5
  ```
**catatan**  
Tabel ini sekarang dienkripsi menggunakan default Kunci milik AWS di akun layanan DynamoDB.

**Untuk membuat tabel terenkripsi dengan untuk Kunci yang dikelola AWS DynamoDB**
+ Buat tabel `Music` yang dienkripsi seperti berikut.

  ```
  aws dynamodb create-table \
    --table-name Music \
    --attribute-definitions \
        AttributeName=Artist,AttributeType=S \
        AttributeName=SongTitle,AttributeType=S \
    --key-schema \
        AttributeName=Artist,KeyType=HASH \
        AttributeName=SongTitle,KeyType=RANGE \
    --provisioned-throughput \
        ReadCapacityUnits=10,WriteCapacityUnits=5 \
    --sse-specification Enabled=true,SSEType=KMS
  ```

   Status `SSEDescription` tabel diatur menjadi `ENABLED` dan `SSEType` adalah `KMS`. 

  ```
  "SSEDescription": {
    "SSEType": "KMS",
    "Status": "ENABLED",
    "KMSMasterKeyArn": "arn:aws:kms:us-east-1:123456789012:key/abcd1234-abcd-1234-a123-ab1234a1b234",
  }
  ```

**Untuk membuat tabel yang dienkripsi dengan kunci yang dikelola pelanggan untuk DynamoDB**
+ Buat tabel `Music` yang dienkripsi seperti berikut.

  ```
  aws dynamodb create-table \
    --table-name Music \
    --attribute-definitions \
        AttributeName=Artist,AttributeType=S \
        AttributeName=SongTitle,AttributeType=S \
    --key-schema \
        AttributeName=Artist,KeyType=HASH \
        AttributeName=SongTitle,KeyType=RANGE \
    --provisioned-throughput \
        ReadCapacityUnits=10,WriteCapacityUnits=5 \
    --sse-specification Enabled=true,SSEType=KMS,KMSMasterKeyId=abcd1234-abcd-1234-a123-ab1234a1b234
  ```
**catatan**  
Untuk itu`KMSMasterKeyId`, Anda dapat menggunakan ID kunci, kunci ARN, atau alias kunci. Jika Anda menggunakan alias kunci (misalnya,`alias/my-key`), DynamoDB menyelesaikan alias dan mengaitkan kunci yang mendasarinya dengan tabel. AWS KMS Dalam deskripsi tabel, `KMSMasterKeyArn` akan selalu menampilkan ARN kunci dari kunci yang diselesaikan, bukan alias. Untuk informasi selengkapnya tentang pengidentifikasi kunci, lihat [Pengidentifikasi kunci (KeyId)](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id) di Panduan *AWS Key Management Service Pengembang*.

   Status `SSEDescription` dari deskripsi tabel diatur menjadi `ENABLED` dan `SSEType` adalah `KMS`.

  ```
  "SSEDescription": {
    "SSEType": "KMS",
    "Status": "ENABLED",
    "KMSMasterKeyArn": "arn:aws:kms:us-east-1:123456789012:key/abcd1234-abcd-1234-a123-ab1234a1b234",
  }
  ```

## Memperbarui kunci enkripsi
<a name="encryption.tutorial-update"></a>

Anda juga dapat menggunakan konsol DynamoDB atau AWS CLI untuk memperbarui kunci enkripsi tabel yang ada antara Kunci yang dikelola AWS,, dan kunci Kunci milik AWS yang dikelola pelanggan kapan saja.

### Memperbarui kunci enkripsi (konsol)
<a name="encryption.tutorial-update-console"></a>

1. Masuk ke Konsol Manajemen AWS dan buka konsol DynamoDB di. [https://console.aws.amazon.com/dynamodb/](https://console.aws.amazon.com/dynamodb/)

1.  Di panel navigasi di sisi kiri konsol, pilih **Tabel**.

1. Pilih tabel yang akan Anda perbarui.

1. Pilih dropdown **Tindakan**, lalu pilih opsi **Perbarui pengaturan**.

1. Buka tab **Pengaturan tambahan**.

1. Di bawah **Enkripsi**, pilih **Kelola enkripsi**.

1. Pilih jenis enkripsi:
   +  **Dimiliki oleh Amazon DynamoDB.** AWS KMS Kuncinya dimiliki dan dikelola oleh DynamoDB. Anda tidak dikenakan biaya tambahan untuk menggunakan kunci ini.
   + **AWS kunci terkelola** Alias kunci:`aws/dynamodb`. Kuncinya disimpan di akun Anda dan dikelola oleh AWS Key Management Service. (AWS KMS). AWS KMS dikenakan biaya.
   +  **Disimpan di akun Anda, serta dimiliki dan dikelola oleh Anda.** Kuncinya disimpan di akun Anda dan dikelola oleh AWS Key Management Service. (AWS KMS). AWS KMS dikenakan biaya.
**catatan**  
Jika Anda memilih untuk memiliki dan mengelola kunci Anda sendiri, pastikan Kebijakan Kunci KMS diatur dengan tepat. Untuk informasi selengkapnya, lihat [Kebijakan kunci untuk kunci yang dikelola pelanggan](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#customer-cmk).

   Lalu pilih **Simpan** untuk memperbarui tabel yang dienkripsi. Untuk mengonfirmasi jenis enkripsi, periksa detail tabel di bawah tab **Gambaran Umum**.

### Memperbarui kunci enkripsi (AWS CLI)
<a name="encryption.tutorial-update-cli"></a>

Contoh-contoh berikut menunjukkan cara memperbarui tabel yang dienkripsi menggunakan AWS CLI.

**Untuk memperbarui tabel terenkripsi dengan default Kunci milik AWS**
+ Perbarui tabel `Music` yang dienkripsi, seperti pada contoh berikut.

  ```
  aws dynamodb update-table \
    --table-name Music \
    --sse-specification Enabled=false
  ```
**catatan**  
Tabel ini sekarang dienkripsi menggunakan default Kunci milik AWS di akun layanan DynamoDB.

**Untuk memperbarui tabel terenkripsi dengan untuk Kunci yang dikelola AWS DynamoDB**
+ Perbarui tabel `Music` yang dienkripsi, seperti pada contoh berikut.

  ```
  aws dynamodb update-table \
    --table-name Music \
    --sse-specification Enabled=true
  ```

   Status `SSEDescription` dari deskripsi tabel diatur menjadi `ENABLED` dan `SSEType` adalah `KMS`.

  ```
  "SSEDescription": {
    "SSEType": "KMS",
    "Status": "ENABLED",
    "KMSMasterKeyArn": "arn:aws:kms:us-east-1:123456789012:key/abcd1234-abcd-1234-a123-ab1234a1b234",
  }
  ```

**Untuk memperbarui tabel yang dienkripsi dengan kunci yang dikelola pelanggan untuk DynamoDB**
+ Perbarui tabel `Music` yang dienkripsi, seperti pada contoh berikut.

  ```
  aws dynamodb update-table \
    --table-name Music \
    --sse-specification Enabled=true,SSEType=KMS,KMSMasterKeyId=abcd1234-abcd-1234-a123-ab1234a1b234
  ```
**catatan**  
Untuk itu`KMSMasterKeyId`, Anda dapat menggunakan ID kunci, kunci ARN, atau alias kunci. Jika Anda menggunakan alias kunci (misalnya,`alias/my-key`), DynamoDB menyelesaikan alias dan mengaitkan kunci yang mendasarinya dengan tabel. AWS KMS Dalam deskripsi tabel, `KMSMasterKeyArn` akan selalu menampilkan ARN kunci dari kunci yang diselesaikan, bukan alias.

   Status `SSEDescription` dari deskripsi tabel diatur menjadi `ENABLED` dan `SSEType` adalah `KMS`. 

  ```
  "SSEDescription": {
    "SSEType": "KMS",
    "Status": "ENABLED",
    "KMSMasterKeyArn": "arn:aws:kms:us-east-1:123456789012:key/abcd1234-abcd-1234-a123-ab1234a1b234",
  }
  ```