View a markdown version of this page

Least-privilege izin - AWS Key Management Service

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

Least-privilege izin

Karena kunci KMS Anda melindungi informasi sensitif, kami sarankan mengikuti prinsip akses yang paling tidak memiliki hak istimewa. Mendelegasikan izin minimum yang diperlukan untuk melakukan tugas saat Anda menentukan kebijakan utama Anda. Hanya izinkan semua tindakan (kms:*) pada kebijakan kunci KMS jika Anda berencana untuk membatasi izin lebih lanjut dengan kebijakan IAM tambahan. Jika Anda berencana mengelola izin dengan kebijakan IAM, batasi siapa yang memiliki kemampuan untuk membuat dan melampirkan kebijakan IAM ke prinsipal IAM dan pantau perubahan kebijakan.

Jika Anda mengizinkan semua tindakan (kms:*) di kebijakan utama dan kebijakan IAM, prinsipal memiliki izin administratif dan penggunaan ke kunci KMS. Sebagai praktik terbaik keamanan, sebaiknya hanya mendelegasikan izin ini ke prinsipal tertentu. Anda dapat melakukan ini dengan secara eksplisit menamai prinsipal dalam kebijakan utama atau dengan membatasi prinsipal mana yang dilampirkan kebijakan IAM. Anda juga dapat menggunakan kunci kondisi untuk membatasi izin. Misalnya, Anda dapat menggunakan aws:PrincipalTag untuk mengizinkan semua tindakan jika prinsipal yang membuat panggilan API memiliki tag yang ditentukan dalam aturan kondisi.

Untuk bantuan memahami bagaimana pernyataan kebijakan dievaluasi di AWS, lihat Logika evaluasi kebijakan di Panduan Pengguna IAM. Sebaiknya tinjau topik ini sebelum menulis kebijakan untuk mengurangi kemungkinan kebijakan Anda memiliki efek yang tidak diinginkan, seperti menyediakan akses ke kepala sekolah yang seharusnya tidak memiliki akses.

Tip

Saat menguji aplikasi di lingkungan non-produksi, gunakan Penganalisis Akses IAM untuk membantu Anda menerapkan hak istimewa terkecil ke kebijakan IAM Anda.

Jika Anda menggunakan pengguna IAM alih-alih peran IAM, sebaiknya aktifkan otentikasi AWS multi-faktor (MFA) untuk mengurangi kerentanan kredentif jangka panjang. Anda dapat menggunakan MFA untuk melakukan hal berikut:

  • Memwajibkan pengguna memvalidasi kredensialnya dengan MFA sebelum melakukan tindakan istimewa, seperti menjadwalkan penghapusan kunci.

  • Pisahkan kepemilikan kata sandi akun administrator dan perangkat MFA antara individu untuk menerapkan otorisasi terpisah.

Menerapkan izin yang paling tidak memiliki hak istimewa

Saat Anda memberikan izin AWS layanan untuk menggunakan kunci KMS, pastikan izin tersebut hanya valid untuk sumber daya yang harus diakses layanan atas nama Anda. Strategi hak istimewa terendah ini membantu mencegah penggunaan kunci KMS yang tidak sah saat permintaan diteruskan antar AWS layanan.

Untuk menerapkan strategi hak istimewa yang paling sedikit, gunakan kami sarankan menggunakan kunci kondisi konteks AWS KMS enkripsi dan ARN sumber global atau kunci kondisi akun sumber.

Menggunakan kunci kondisi konteks enkripsi

Cara paling efektif untuk menerapkan izin yang paling tidak memiliki hak istimewa saat menggunakan AWS KMS sumber daya adalah dengan menyertakan kunci kms:EncryptionContextKeys kondisi kms:EncryptionContext:context-key atau dalam kebijakan yang memungkinkan prinsipal memanggil operasi AWS KMS kriptografi. Kunci kondisi ini sangat efektif karena mengaitkan izin dengan konteks en kripsi yang terikat ke ciphertext saat sumber daya dienkripsi.

Gunakan kunci kondisi konteks enkripsi hanya jika tindakan dalam pernyataan kebijakan adalah CreateGrant atau operasi kriptografi AWS KMS simetris yang mengambil EncryptionContext parameter, seperti operasi seperti GenerateDataKey atau Dekripsi. (Untuk daftar operasi yang didukung, lihat kms:EncryptionContext:context-key atau kms:EncryptionContextKeys.) Jika Anda menggunakan kunci kondisi ini untuk mengizinkan operasi lain, seperti DescribeKey, izin akan ditolak.

Tetapkan nilai ke konteks enkripsi yang digunakan layanan saat mengenkripsi sumber daya. Informasi ini biasanya tersedia di bagian Keamanan dokumentasi layanan. Misalnya, konteks en kripsi untuk AWS Proton mengidentifikasi sumber daya AWS Proton dan template terkaitnya. Kon AWS Secrets Manager teks enkripsi mengidentifikasi rahasia dan versinya. Konteks enkripsi untuk Lokasi Amazon mengidentifikasi pelacak atau koleksi.

Contoh pernyataan kebijakan utama berikut memungkinkan Layanan Lokasi Amazon untuk membuat hibah atas nama pengguna yang berwenang. Pernyataan kebijakan ini membatasi izin dengan menggunakan kms: ViaService, kms: CallerAccount, dan kunci kms:EncryptionContext:context-key kondisi untuk mengikat izin ke sumber daya pelacak tertentu.

{ "Sid": "Allow Amazon Location to create grants on behalf of authorized users", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::111122223333:role/LocationTeam" }, "Action": "kms:CreateGrant", "Resource": "*", "Condition": { "StringEquals": { "kms:ViaService": "geo.us-west-2.amazonaws.com", "kms:CallerAccount": "111122223333", "kms:EncryptionContext:aws:geo:arn": "arn:aws:geo:us-west-2:111122223333:tracker/SAMPLE-Tracker" } } }

Menggunakan aws: SourceArn atau aws: kunci SourceAccount kondisi

Jika prinsipal dalam pernyataan kebijakan utama adalah AWS prinsipal layanan, kami sangat menyarankan Anda menggunakan kunci kondisi aws:SourceArn atau aws:SourceAccount global, selain kunci kms:EncryptionContext:context-key kondisi. Nilai ARN dan akun disertakan dalam konteks otorisasi hanya ketika permintaan datang AWS KMS dari AWS layanan lain. Kombinasi kondisi ini menerapkan izin yang paling tidak istimewa dan menghindari skenario wakil yang mungkin membingungkan. Prinsip layanan biasanya tidak digunakan sebagai prinsipal dalam kebijakan utama, tetapi beberapa AWS layanan, seperti AWS CloudTrail, memerlukannya.

Untuk menggunakan kunci kondisi aws:SourceArn atau aws:SourceAccount global, tetapkan nilai ke Nama Sumber Daya Amazon (ARN) atau akun sumber daya yang sedang dienkripsi. Misalnya, dalam pernyataan kebijakan kunci yang memberikan AWS CloudTrail izin untuk mengenkripsi jejak, tetapkan nilai aws:SourceArn ke ARN jejak. Bila memungkinkan, gunakanaws:SourceArn, yang lebih spesifik. Tetapkan nilai ke ARN atau pola ARN dengan karakter wildcard. Jika Anda tidak tahu ARN sumber daya, gunakan sebagai aws:SourceAccount gantinya.

catatan

Jika ARN sumber daya menyertakan karakter yang tidak diizinkan dalam kebijakan AWS KMS kunci, Anda tidak dapat menggunakan ARN sumber daya tersebut dalam nilai kunci aws:SourceArn kondisi. Sebagai gantinya, gunakan kunci aws:SourceAccount kondisi. Untuk detail tentang aturan dokumen kebijakan utama, lihatFormat kebijakan utama.

Dalam contoh kebijakan kunci berikut, kepala sekolah yang mendapatkan izin adalah prinsi AWS CloudTrail pal layanan,cloudtrail.amazonaws.com. Untuk menerapkan hak istimewa terkecil, kebijakan ini menggunakan kunci kms:EncryptionContext:context-key kondisi aws:SourceArn dan. Pernyataan kebijakan memungkinkan CloudTrail untuk menggunakan kunci KMS untuk menghasilkan kunci data yang digunakan untuk mengenkripsi jejak. Kondisi aws:SourceArn dan kms:EncryptionContext:context-key kondisi dievaluasi secara independen. Setiap permintaan untuk menggunakan kunci KMS untuk operasi yang ditentukan harus memenuhi kedua kondisi tersebut.

Untuk membatasi izin layanan ke finance jejak di akun contoh (111122223333) dan Wil us-west-2 ayah, pernyataan kebijakan ini menetapkan kunci aws:SourceArn kondisi ke ARN dari jejak tertentu. Pernyataan kondisi menggunakan ArnEquals operator untuk memastikan bahwa setiap elemen dalam ARN dievaluasi secara independen saat mencocokkan. Contoh ini juga menggunakan kunci kms:EncryptionContext:context-key kondisi untuk membatasi izin untuk melacak di akun dan Wilayah tertentu.

Sebelum menggunakan kebijakan kunci ini, ganti contoh ID akun, Wilayah, dan nama jejak dengan nilai yang valid dari akun Anda.

JSON
{ "Version":"2012-10-17", "Statement": [ { "Sid": "AllowCloudTrailToEncryptLogs", "Effect": "Allow", "Principal": { "Service": "cloudtrail.amazonaws.com" }, "Action": "kms:GenerateDataKey", "Resource": "*", "Condition": { "ArnEquals": { "aws:SourceArn": [ "arn:aws:cloudtrail:us-west-2:111122223333:trail/finance" ] }, "StringLike": { "kms:EncryptionContext:aws:cloudtrail:arn": [ "arn:aws:cloudtrail:*:111122223333:trail/*" ] } } } ] }