Menggunakan enkripsi sisi server dengan AWS KMS kunci (SSE-KMS) - Amazon Simple Storage Service

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

Menggunakan enkripsi sisi server dengan AWS KMS kunci (SSE-KMS)

penting

Amazon S3 sekarang menerapkan enkripsi sisi server dengan kunci terkelola Amazon S3 (SSE-S3) sebagai tingkat dasar enkripsi untuk setiap bucket di Amazon S3. Mulai 5 Januari 2023, semua unggahan objek baru ke Amazon S3 secara otomatis akan dienkripsi tanpa biaya tambahan dan tidak akan berdampak pada kinerja. Status enkripsi otomatis untuk konfigurasi enkripsi default bucket S3 dan untuk unggahan objek baru tersedia di AWS CloudTrail log, Inventaris S3, Lensa Penyimpanan S3, konsol Amazon S3, dan sebagai header respons Amazon S3 tambahan di API AWS Command Line Interface and AWS SDKs. Untuk informasi selengkapnya, lihat Enkripsi default FAQ.

Enkripsi di sisi server adalah enkripsi data di tempat tujuan oleh aplikasi atau layanan yang menerimanya.

Amazon S3 secara otomatis mengaktifkan enkripsi sisi server dengan kunci terkelola Amazon S3 (SSE-S3) untuk unggahan objek baru.

Kecuali Anda menentukan sebaliknya, bucket menggunakan SSE -S3 secara default untuk mengenkripsi objek. Namun, Anda dapat memilih untuk mengonfigurasi bucket untuk menggunakan enkripsi sisi server AWS Key Management Service (AWS KMS) kunci (SSE-KMS) sebagai gantinya. Untuk informasi selengkapnya, lihat Menentukan enkripsi sisi server dengan AWS KMS (SSE-KMS).

AWS KMS adalah layanan yang menggabungkan perangkat keras dan perangkat lunak yang aman dan sangat tersedia untuk menyediakan sistem manajemen kunci yang diskalakan untuk cloud. Amazon S3 menggunakan enkripsi sisi server dengan AWS KMS (SSE-KMS) untuk mengenkripsi data objek S3 Anda. Juga, ketika SSE - KMS diminta untuk objek, checksum S3 (sebagai bagian dari metadata objek) disimpan dalam bentuk terenkripsi. Untuk informasi selengkapnya tentang checksum, silakan lihat Memeriksa integritas objek.

Jika Anda menggunakan KMS kunci, Anda dapat menggunakan AWS KMS melalui AWS Management Consoleatau AWS KMS APIuntuk melakukan hal berikut:

  • Membuat, melihat, mengedit, memantau, mengaktifkan atau menonaktifkan, memutar, dan menjadwalkan penghapusan kunci secara terpusat. KMS

  • Tentukan kebijakan yang mengontrol bagaimana dan oleh siapa KMS kunci dapat digunakan.

  • Audit penggunaannya untuk membuktikan bahwa mereka digunakan dengan benar. Audit didukung oleh AWS KMS API, tetapi tidak oleh AWS KMSAWS Management Console.

Kontrol keamanan di AWS KMS dapat membantu Anda memenuhi persyaratan kepatuhan terkait enkripsi. Anda dapat menggunakan KMS kunci ini untuk melindungi data Anda di bucket Amazon S3. Saat Anda menggunakan SSE - KMS enkripsi dengan ember S3, AWS KMS keys harus berada di Wilayah yang sama dengan ember.

Ada biaya tambahan untuk penggunaan AWS KMS keys. Untuk informasi lebih lanjut, lihat AWS KMS key konsep dalam AWS Key Management Service Panduan Pengembang dan AWS KMS harga.

Izin

Untuk mengunggah objek yang dienkripsi dengan AWS KMS key ke Amazon S3, Anda memerlukan kms:GenerateDataKey izin pada kuncinya. Untuk mengunduh objek yang dienkripsi dengan AWS KMS key, Anda memerlukan kms:Decrypt izin. Untuk informasi tentang AWS KMS izin yang diperlukan untuk upload multipart, lihat. Unggahan API dan izin multibagian

penting

Tinjau izin yang diberikan dalam kebijakan KMS utama Anda dengan cermat. Selalu batasi izin kebijakan KMS kunci yang dikelola pelanggan hanya untuk prinsipal dan IAM AWS layanan yang harus mengakses yang relevan AWS KMS tindakan kunci. Untuk informasi selengkapnya, lihat Kebijakan utama di AWS KMS.

AWS KMS keys

Bila Anda menggunakan enkripsi sisi server dengan AWS KMS (SSE-KMS), Anda dapat menggunakan default AWS kunci terkelola, atau Anda dapat menentukan kunci terkelola pelanggan yang telah Anda buat. AWS KMS mendukung enkripsi amplop. S3 menggunakan AWS KMS fitur untuk enkripsi amplop untuk lebih melindungi data Anda. Enkripsi amplop adalah praktik mengenkripsi data teks biasa Anda dengan kunci data, dan kemudian mengenkripsi kunci data itu dengan kunci. KMS Untuk informasi selengkapnya tentang enkripsi amplop, lihat Enkripsi amplop di AWS Key Management Service Panduan Pengembang.

Jika Anda tidak menentukan kunci terkelola pelanggan, Amazon S3 secara otomatis membuat Kunci yang dikelola AWS dalam dirimu Akun AWS pertama kali Anda menambahkan objek yang dienkripsi dengan SSE - KMS ke ember. Secara default, Amazon S3 menggunakan KMS kunci ini untuk SSE -. KMS

catatan

Objek dienkripsi menggunakan SSE - dengan KMS Kunci yang dikelola AWStidak dapat dibagikan lintas akun. Jika Anda perlu berbagi SSE - KMS data lintas akun, Anda harus menggunakan kunci yang dikelola pelanggan dari AWS KMS.

Jika Anda ingin menggunakan kunci yang dikelola pelanggan untuk SSE -KMS, buat kunci terkelola pelanggan enkripsi simetris sebelum Anda mengonfigurasi SSE -KMS. Kemudian, saat Anda mengonfigurasi SSE - KMS untuk bucket Anda, tentukan kunci terkelola pelanggan yang ada. Untuk informasi selengkapnya tentang kunci enkripsi simetris, lihat KMSKunci enkripsi simetris di AWS Key Management Service Panduan Pengembang.

Membuat CMK memberikan Anda lebih banyak fleksibilitas dan kendali atas pelanggan. Misalnya, Anda dapat membuat, memutar, dan menonaktifkan CMK. Anda juga dapat menentukan kontrol akses dan mengaudit CMK yang Anda gunakan untuk melindungi data Anda. Untuk informasi lebih lanjut tentang pelanggan yang dikelola dan AWS kunci terkelola, lihat Kunci pelanggan dan AWS kunci di AWS Key Management Service Panduan Pengembang.

catatan

Saat Anda menggunakan enkripsi sisi server dengan kunci terkelola pelanggan yang disimpan di toko kunci eksternal, tidak seperti KMS kunci standar, Anda bertanggung jawab untuk memastikan ketersediaan dan daya tahan materi kunci Anda. Untuk informasi selengkapnya tentang penyimpanan kunci eksternal dan bagaimana mereka mengubah model tanggung jawab bersama, lihat Penyimpanan kunci eksternal di AWS Key Management Service Panduan Pengembang.

Menggunakan SSE - KMS enkripsi untuk operasi lintas akun

Saat menggunakan enkripsi untuk operasi lintas akun, perhatikan hal berikut:

  • Jika AWS KMS key Amazon Resource Name (ARN) atau alias tidak disediakan pada saat permintaan atau melalui konfigurasi enkripsi default bucket, Kunci yang dikelola AWS (aws/s3) digunakan.

  • Jika Anda mengunggah atau mengakses objek S3 dengan menggunakan AWS Identity and Access Management (IAM) prinsipal yang sama Akun AWS Sebagai KMS kunci Anda, Anda dapat menggunakan Kunci yang dikelola AWS (aws/s3).

  • Jika Anda ingin memberikan akses lintas akun ke objek S3 Anda, gunakan CMK. Anda dapat mengonfigurasi kebijakan CMK untuk mengizinkan akses dari akun lain.

  • Jika Anda menentukan kunci yang dikelola pelanggan, sebaiknya gunakan KMS kunci yang sepenuhnya memenuhi syaratKMS. ARN Jika Anda menggunakan alias KMS kunci sebagai gantinya, AWS KMS menyelesaikan kunci dalam akun pemohon. Perilaku ini dapat menghasilkan data yang dienkripsi dengan KMS kunci milik pemohon, dan bukan pemilik bucket.

  • Anda harus menentukan kunci yang kepada Anda (pemohon) telah diberikan izin Encrypt. Untuk informasi selengkapnya, lihat Mengizinkan pengguna kunci menggunakan KMS kunci untuk operasi kriptografi di AWS Key Management Service Panduan Pengembang.

Untuk informasi lebih lanjut tentang kapan harus menggunakan kunci yang dikelola pelanggan dan AWS KMSkunci terkelola, lihat Haruskah saya menggunakan Kunci yang dikelola AWS atau kunci yang dikelola pelanggan untuk mengenkripsi objek saya di Amazon S3?

SSE- alur kerja KMS enkripsi

Jika Anda memilih untuk mengenkripsi data Anda menggunakan Kunci yang dikelola AWS atau kunci yang dikelola pelanggan, AWS KMS dan Amazon S3 melakukan tindakan enkripsi amplop berikut:

  1. Amazon S3 meminta kunci data plaintext dan salinan kunci yang dienkripsi di bawah kunci yang ditentukan. KMS

  2. AWS KMS menghasilkan kunci data, mengenkripsinya di bawah KMS kunci, dan mengirimkan kunci data teks biasa dan kunci data terenkripsi ke Amazon S3.

  3. Amazon S3 mengenkripsi data menggunkaan kunci data dan menghapus kunci plaintext dari memori sesegera mungkin setelah digunakan.

  4. Amazon S3 menyimpan kunci data terenkripsi sebagai metadata dengan data terenkripsi.

Saat Anda meminta agar data Anda didekripsi, Amazon S3 dan AWS KMS melakukan tindakan berikut:

  1. Amazon S3 mengirimkan kunci data terenkripsi ke AWS KMS dalam Decrypt permintaan.

  2. AWS KMS mendekripsi kunci data terenkripsi dengan menggunakan kunci yang sama dan mengembalikan KMS kunci data teks biasa ke Amazon S3.

  3. Amazon S3 mendekripsi data terenkripsi, menggunakan kunci data teks biasa, dan menghapus kunci data teks biasa dari memori sesegera mungkin.

penting

Saat Anda menggunakan AWS KMS key untuk enkripsi sisi server di Amazon S3, Anda harus memilih kunci enkripsi simetris. KMS Amazon S3 hanya mendukung kunci enkripsi simetris. KMS Untuk informasi selengkapnya tentang kunci ini, lihat KMSKunci enkripsi simetris di AWS Key Management Service Panduan Pengembang.

Audit SSE - enkripsi KMS

Untuk mengidentifikasi permintaan yang menentukan SSE -KMS, Anda dapat menggunakan metrik Semua SSE KMS permintaan dan% semua SSE KMS permintaan dalam metrik Amazon S3 Storage Lens. Lensa Penyimpanan S3 adalah fitur analisis penyimpanan cloud yang dapat Anda gunakan untuk mendapatkan visibilitas seluruh organisasi ke dalam penggunaan dan aktivitas penyimpanan objek. Anda juga dapat menggunakan bucket count SSE - KMS enabled bucket dan% SSE - KMS enabled bucket untuk memahami jumlah bucket yang (SSE-KMS) untuk enkripsi bucket default. Untuk informasi selengkapnya, lihat Menilai aktivitas penyimpanan dan penggunaan Anda dengan Lensa Penyimpanan S3. Untuk daftar lengkap metrik, lihat Glosarium metrik Lensa Penyimpanan S3.

Untuk mengaudit penggunaan AWS KMS kunci untuk data KMS terenkripsi AndaSSE, Anda dapat menggunakan AWS CloudTrail log. Anda bisa mendapatkan wawasan tentang operasi kriptografi Anda, seperti GenerateDataKey dan Decrypt. CloudTrail mendukung banyak nilai atribut untuk memfilter pencarian Anda, termasuk nama acara, nama pengguna, dan sumber acara.

Kunci Bucket Amazon S3

Saat Anda mengonfigurasi enkripsi sisi server menggunakan AWS KMS (SSE-KMS), Anda dapat mengonfigurasi bucket Anda untuk menggunakan S3 Bucket Keys untuk SSE -. KMS Menggunakan kunci tingkat ember untuk SSE - dapat mengurangi KMS AWS KMS meminta biaya hingga 99 persen dengan mengurangi lalu lintas permintaan dari Amazon S3 ke AWS KMS.

Saat Anda mengonfigurasi bucket untuk menggunakan Kunci Bucket S3 untuk SSE - KMS pada objek baru, AWS KMS menghasilkan kunci tingkat ember yang digunakan untuk membuat kunci data unik untuk objek di bucket. Kunci Bucket S3 ini digunakan untuk jangka waktu terbatas dalam Amazon S3, yang selanjutnya mengurangi kebutuhan Amazon S3 untuk mengajukan permintaan AWS KMS untuk menyelesaikan operasi enkripsi. Untuk informasi lebih lanjut tentang menggunakan Kunci Bucket S3, lihat Mengurangi biaya SSE - KMS dengan Amazon S3 Bucket Keys.

Membutuhkan enkripsi di sisi server

Untuk mewajibkan enkripsi di sisi server terhadap semua objek dalam bucket Amazon S3 tertentu, Anda dapat menggunakan kebijakan bucket. Misalnya, kebijakan bucket berikut menolak izin upload object (s3:PutObject) untuk semua orang jika permintaan tidak menyertakan x-amz-server-side-encryption-aws-kms-key-id header yang meminta enkripsi sisi server dengan -. SSE KMS

{ "Version":"2012-10-17", "Id":"PutObjectPolicy", "Statement":[{ "Sid":"DenyObjectsThatAreNotSSEKMS", "Effect":"Deny", "Principal":"*", "Action":"s3:PutObject", "Resource":"arn:aws:s3:::amzn-s3-demo-bucket1/*", "Condition":{ "Null":{ "s3:x-amz-server-side-encryption-aws-kms-key-id":"true" } } } ] }

Untuk mewajibkan yang khusus AWS KMS key digunakan untuk mengenkripsi objek dalam ember, Anda dapat menggunakan tombol s3:x-amz-server-side-encryption-aws-kms-key-id kondisi. Untuk menentukan KMS kunci, Anda harus menggunakan kunci Amazon Resource Name (ARN) yang ada dalam arn:aws:kms:region:acct-id:key/key-id format. AWS Identity and Access Management tidak memvalidasi jika string untuk s3:x-amz-server-side-encryption-aws-kms-key-id ada.

catatan

Saat mengunggah objek, Anda dapat menentukan KMS kunci dengan menggunakan x-amz-server-side-encryption-aws-kms-key-id header atau mengandalkan konfigurasi enkripsi bucket default Anda. Jika PutObject permintaan Anda menentukan aws:kms di x-amz-server-side-encryption header, tetapi tidak menentukan x-amz-server-side-encryption-aws-kms-key-id header, maka Amazon S3 mengasumsikan bahwa Anda ingin menggunakan Kunci yang dikelola AWS. Terlepas dari itu, AWS KMS ID kunci yang digunakan Amazon S3 untuk enkripsi objek harus cocok dengan AWS KMS ID kunci dalam kebijakan, jika tidak Amazon S3 menolak permintaan tersebut.

Untuk daftar lengkap kunci kondisi khusus Amazon S3, lihat Kunci kondisi untuk Amazon S3 di Referensi Otorisasi Layanan.

Konteks enkripsi

Konteks enkripsi adalah seperangkat pasangan nilai kunci yang berisi informasi kontekstual tambahan terkait data. Konteks enkripsi tidak dienkripsi. Ketika konteks enkripsi ditentukan untuk operasi enkripsi, Amazon S3 harus menentukan konteks enkripsi yang sama untuk operasi dekripsi. Jika tidak, dekripsi gagal. AWS KMS menggunakan konteks enkripsi sebagai data otentikasi tambahan (AAD) untuk mendukung enkripsi yang diautentikasi. Untuk informasi selengkapnya tentang konteks enkripsi, lihat Konteks enkripsi di AWS Key Management Service Panduan Pengembang.

Secara default, Amazon S3 menggunakan objek atau bucket Amazon Resource Name (ARN) sebagai pasangan konteks enkripsi:

  • Jika Anda menggunakan SSE - KMS tanpa mengaktifkan S3 Bucket Key, objek ARN digunakan sebagai konteks enkripsi.

    arn:aws:s3:::object_ARN
  • Jika Anda menggunakan SSE - KMS dan mengaktifkan S3 Bucket Key, bucket ARN digunakan sebagai konteks enkripsi. Untuk informasi selengkapnya tentang Kunci Bucket S3, lihat Mengurangi biaya SSE - KMS dengan Amazon S3 Bucket Keys.

    arn:aws:s3:::bucket_ARN

Anda secara opsional dapat memberikan pasangan konteks enkripsi tambahan dengan menggunakan x-amz-server-side-encryption-context header dalam permintaan s3: PutObject. Namun, karena konteks enkripsi tidak dienkripsi, pastikan bahwa itu tidak menyertakan informasi yang sensitif. Amazon S3 menyimpan pasangan kunci tambahan ini bersama dengan konteks enkripsi default. Saat memproses permintaan PUT Anda, Amazon S3 menambahkan konteks enkripsi default ke aws:s3:arn yang Anda berikan.

Anda dapat menggunakan konteks enkripsi untuk mengidentifikasi dan mengategorikan operasi kriptografi Anda. Anda juga dapat menggunakan ARN nilai konteks enkripsi default untuk melacak permintaan yang relevan di AWS CloudTrail dengan melihat Amazon S3 ARN mana yang digunakan dengan kunci enkripsi mana.

Di requestParameters bidang file CloudTrail log, konteks enkripsi terlihat mirip dengan yang berikut.

"encryptionContext": { "aws:s3:arn": "arn:aws:s3:::amzn-s3-demo-bucket1/file_name" }

Saat Anda menggunakan SSE - KMS dengan fitur S3 Bucket Keys opsional, nilai konteks enkripsi adalah bucket. ARN

"encryptionContext": { "aws:s3:arn": "arn:aws:s3:::amzn-s3-demo-bucket1" }

Mengirim permintaan untuk AWS KMS objek terenkripsi

penting

Semua GET dan PUT permintaan untuk AWS KMS objek terenkripsi harus dibuat menggunakan Secure Sockets Layer (SSL) atau Transport Layer Security (TLS). Permintaan juga harus ditandatangani menggunakan kredensil yang valid, seperti AWS Tanda Tangan Versi 4 (atau AWS Versi Tanda Tangan 2).

AWS Signature Version 4 adalah proses menambahkan informasi otentikasi ke AWS permintaan dikirim olehHTTP. Untuk keamanan, sebagian besar permintaan untuk AWS harus ditandatangani dengan kunci akses, yang terdiri dari ID kunci akses dan kunci akses rahasia. Kedua kunci ini umumnya disebut sebagai kredensial keamanan Anda. Untuk informasi selengkapnya, lihat Mengautentikasi Permintaan (AWS Signature Version 4) dan proses penandatanganan Signature Version 4.

penting

Jika objek Anda menggunakan SSE -KMS, jangan kirim header permintaan enkripsi untuk GET permintaan dan HEAD permintaan. Jika tidak, Anda akan mendapatkan kesalahan HTTP400 Bad Request.