View a markdown version of this page

Membuat pemberian 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.

Membuat pemberian izin

Sebelum membuat pemberian izin, pelajari tentang opsi untuk menyesuaikan pemberian izin Anda. Anda dapat menggunakan batas pemberian izin untuk membatasi izin dalam pemberian izin. Selain itu, pelajari tentang pemberian izin CreateGrant. Perwakilan yang mendapatkan izin untuk membuat pemberian izin dari pemberian izin terbatas dalam pemberian izin yang dapat dibuat.

Membuat pemberian izin

Untuk membuat hibah, panggil CreateGrant operasi. Tentukan kunci KMS, daftar operasi hibah yang diizinkan, dan kepala sekolah penerima hibah Perwakilan penerima atau kepala sekolah layanan penerima hibah.

Saat Anda menentukan prinsipal penerima hibah, Anda dapat secara opsional menunjuk kepala sekolah yang pensiun atau prinsipal layanan pensiun, dan menggunakan Constraints parameter untuk menentukan batasan hibah. https://docs.aws.amazon.com/kms/latest/APIReference/API_GrantConstraints.html Saat Anda menentukan prinsipal layanan penerima hibah, Anda harus menyertakan batasan hi SourceArn bah. Anda juga harus menentukan a RetiringServicePrincipal atau aRetiringPrincipal.

Saat Anda membuat, menghentikan, atau mencabut pemberian izin, akan ada penundaan singkat, biasanya kurang dari lima menit, sebelum perubahan tersedia di seluruh AWS KMS. Untuk informasi lebih lanjut, lihat Kon sistensi akhir (untuk hibah).

Misalnya, CreateGrant perintah berikut membuat hibah yang memungkinkan pengguna yang diberi wewenang untuk mengambil keyUserRole peran untuk memanggil operasi Decrypt pada kunci KMS simetris yang ditentukan. Pemberian izin akan menggunakan parameter RetiringPrincipal untuk menunjuk perwakilan yang dapat menghentikan pemberian izin. Ini juga mencakup batas pemberian izin yang memberikan izin hanya saat konteks enkripsi dalam permintaan berisi "Department": "IT".

$ aws kms create-grant \ --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ --grantee-principal arn:aws:iam::111122223333:role/keyUserRole \ --operations Decrypt \ --retiring-principal arn:aws:iam::111122223333:role/adminRole \ --constraints EncryptionContextSubset={Department=IT}

Jika kode Anda mencoba lagi operasi CreateGrant, atau menggunakan SDK AWS yang secara otomatis mencoba lagi permintaan, gunakan parameter Nama opsional untuk mencegah agar duplikat pemberian izin tidak dibuat. Jika AWS KMS mendapat CreateGrant permintaan hibah dengan properti yang sama dengan hibah yang ada, termasuk nama, itu mengakui permintaan tersebut sebagai percobaan ulang, dan tidak membuat hibah baru. Anda tidak dapat menggunakan nilai Name untuk mengidentifikasi pemberian izin dalam setiap operasi AWS KMS .

penting

Jangan sertakan informasi rahasia atau sensitif dalam nama hibah. Ini mungkin muncul dalam teks biasa di CloudTrail log dan output lainnya.

$ aws kms create-grant \ --name IT-1234abcd-keyUserRole-decrypt \ --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ --grantee-principal arn:aws:iam::111122223333:role/keyUserRole \ --operations Decrypt \ --retiring-principal arn:aws:iam::111122223333:role/adminRole \ --constraints EncryptionContextSubset={Department=IT}

Untuk contoh kode yang menunjukkan cara membuat hibah dalam beberapa bahasa pemrograman, lihatGunakan CreateGrant dengan AWS SDK atau CLI.

Menggunakan batas pemberian izin

Batasan hibah menetapkan kondisi pada izin yang diberikan hibah kepada prinsipal penerima hibah. Batas pemberian izin menggantikan kunci syarat dalam kebijakan kunci atau kebijakan IAM.

penting

Jangan memasukkan informasi rahasia atau sensitif dalam bidang ini. Bidang ini dapat ditampilkan dalam plaintext di CloudTrail log dan output lainnya.

AWS KMS mendukung dua jenis kendala hibah: batasan konteks enkripsi dan batasan. SourceArn

Kendala konteks enkripsi

Kendala konteks enkripsi menetapkan persyaratan untuk konteks enkripsi dalam permintaan untuk operasi kriptografi. Setiap nilai batasan pemberian konteks enkripsi dapat mencakup hingga 8 pasangan konteks enkripsi. Nilai konteks enkripsi di setiap batas tidak boleh lebih dari 384 karakter.

  • Batasan konteks enkripsi hanya valid dalam hibah untuk kunci KMS enkripsi simetris. Operasi kriptografi dengan kunci KMS lainnya tidak mendukung konteks enkripsi.

  • Batasan konteks enkripsi diabaikan untuk RetireGrant operasi DescribeKey dan. DescribeKeydan RetireGrant tidak memiliki parameter konteks enkripsi, tetapi Anda dapat menyertakan operasi ini dalam hibah yang memiliki batasan konteks enkripsi.

  • Anda dapat menggunakan batasan konteks enkripsi dalam hibah untuk CreateGrant operasi. Kendala konteks enkripsi mensyaratkan bahwa setiap hibah yang dibuat dengan CreateGrant izin memiliki batasan konteks enkripsi yang sama ketat atau lebih ketat.

AWS KMS mendukung dua batasan hibah konteks enkripsi.

EncryptionContextEquals

Gunakan EncryptionContextEquals untuk menentukan konteks enkripsi yang tepat untuk permintaan yang diizinkan.

EncryptionContextEqualsmensyaratkan bahwa pasangan konteks enkripsi dalam permintaan adalah kecocokan yang tepat dan peka huruf besar-kecil untuk pasangan konteks enkripsi dalam batasan hibah. Pasangan ini dapat muncul dalam urutan apa pun, tetapi kunci dan nilai dalam setiap pasangan tidak dapat bervariasi.

Misalnya, jika batasan pemberian EncryptionContextEquals memerlukan pasangan konteks "Department": "IT" enkripsi, hibah mengizinkan permintaan dari jenis yang ditentukan hanya jika konteks enkripsi dalam permintaan tepat"Department": "IT".

EncryptionContextSubset

Gunakan EncryptionContextSubset untuk mengharuskan permintaan menyertakan pasangan konteks enkripsi tertentu.

EncryptionContextSubsetmengharuskan permintaan menyertakan semua pasangan konteks enkripsi dalam batasan hibah (kecocokan yang tepat dan peka huruf besar-kecil), tetapi permintaan juga dapat memiliki pasangan konteks enkripsi tambahan. Pasangan ini dapat muncul dalam urutan apa pun, tetapi kunci dan nilai dalam setiap pasangan tidak dapat bervariasi.

Misalnya, jika batasan pemberian EncryptionContextSubset memerlukan pasangan konteks Department=IT enkripsi, hibah mengizinkan permintaan dari jenis yang ditentukan ketika konteks enkripsi dalam permintaan"Department": "IT", atau disertakan "Department": "IT" bersama dengan pasangan konteks enkripsi lainnya, seperti"Department": "IT","Purpose": "Test".

Untuk menentukan batasan konteks enkripsi dalam hibah untuk kunci KMS enkripsi simetris, gunakan Constraints parameter dalam operasi. CreateGrant Pemberian yang dibuat perintah ini memberi pengguna yang berwenang untuk mengambil keyUserRole peran izin untuk memanggil operasi Dec rypt. Tetapi izin itu hanya efektif jika konteks enkripsi dalam Decrypt permintaan adalah pasangan konteks "Department": "IT" enkripsi.

$ aws kms create-grant \ --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ --grantee-principal arn:aws:iam::111122223333:role/keyUserRole \ --operations Decrypt \ --retiring-principal arn:aws:iam::111122223333:role/adminRole \ --constraints EncryptionContextEquals={Department=IT}

Pemberian izin yang dihasilkan akan terlihat seperti berikut. Perhatikan bahwa izin yang diberikan kepada keyUserRole peran hanya efektif bila Decrypt permintaan menggunakan pasangan konteks enkripsi yang sama yang ditentukan dalam batasan pemberian. Untuk menemukan hibah pada kunci KMS, gunakan ListGrants operasi.

$ aws kms list-grants --key-id 1234abcd-12ab-34cd-56ef-1234567890ab { "Grants": [ { "Name": "", "IssuingAccount": "arn:aws:iam::111122223333:root", "GrantId": "abcde1237f76e4ba7987489ac329fbfba6ad343d6f7075dbd1ef191f0120514a", "Operations": [ "Decrypt" ], "GranteePrincipal": "arn:aws:iam::111122223333:role/keyUserRole", "Constraints": { "EncryptionContextEquals": { "Department": "IT" } }, "CreationDate": 1568565290.0, "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "RetiringPrincipal": "arn:aws:iam::111122223333:role/adminRole" } ] }

Untuk memenuhi EncryptionContextEquals batasan hibah, konteks enkripsi dalam permintaan Decrypt operasi harus ber "Department": "IT" pasangan. Permintaan seperti berikut dari kepala sekolah penerima hibah akan memenuhi batasan EncryptionContextEquals hibah.

$ aws kms decrypt \ --key-id arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab\ --ciphertext-blob fileb://encrypted_msg \ --encryption-context Department=IT

Ketika batasan pemberian adalahEncryptionContextSubset, pasangan konteks enkripsi dalam permintaan harus menyertakan pasangan konteks enkripsi dalam batasan hibah, tetapi permintaan juga dapat menyertakan pasangan konteks enkripsi lainnya. Batasan hibah berikut mensyaratkan bahwa salah satu pasangan konteks enkripsi dalam permintaan adalah"Deparment": "IT".

"Constraints": { "EncryptionContextSubset": { "Department": "IT" } }

Permintaan berikut dari kepala sekolah penerima hibah akan memenuhi batasan EncryptionContextEqual dan EncryptionContextSubset hibah dalam contoh ini.

$ aws kms decrypt \ --key-id arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab \ --ciphertext-blob fileb://encrypted_msg \ --encryption-context Department=IT

Namun, permintaan seperti berikut dari kepala sekolah penerima hibah akan memenuhi batasan EncryptionContextSubset hibah, tetapi itu akan gagal dalam batasan hibah. EncryptionContextEquals

$ aws kms decrypt \ --key-id arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab \ --ciphertext-blob fileb://encrypted_msg \ --encryption-context Department=IT,Purpose=Test

AWS layanan sering menggunakan batasan konteks enkripsi dalam hibah yang memberi mereka izin untuk menggunakan kunci KMS di Anda Akun AWS. Misalnya, Amazon DynamoDB menggunakan hibah seperti yang berikut untuk mendapatkan izin menggunakan Kunci yang dikelola AWS for DynamoDB di akun Anda. Batas pemberian izin EncryptionContextSubset dalam pemberian izin ini membuat izin dalam pemberian izin hanya efektif jika konteks enkripsi dalam permintaan menyertakan pasangan "subscriberID": "111122223333" dan "tableName": "Services". Batasan hibah ini berarti bahwa hibah memungkinkan DynamoDB menggunakan kunci KMS yang ditentukan hanya untuk tabel tertentu di Anda. Akun AWS

Untuk mendapatkan output ini, jalankan ListGrants operasi pada Kunci yang dikelola AWS for DynamoDB di akun Anda.

$ aws kms list-grants --key-id 0987dcba-09fe-87dc-65ba-ab0987654321 { "Grants": [ { "Operations": [ "Decrypt", "Encrypt", "GenerateDataKey", "ReEncryptFrom", "ReEncryptTo", "RetireGrant", "DescribeKey" ], "IssuingAccount": "arn:aws:iam::111122223333:root", "Constraints": { "EncryptionContextSubset": { "aws:dynamodb:tableName": "Services", "aws:dynamodb:subscriberId": "111122223333" } }, "CreationDate": 1518567315.0, "KeyId": "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321", "GranteePrincipal": "dynamodb.us-west-2.amazonaws.com", "RetiringPrincipal": "dynamodb.us-west-2.amazonaws.com", "Name": "8276b9a6-6cf0-46f1-b2f0-7993a7f8c89a", "GrantId": "1667b97d27cf748cf05b487217dd4179526c949d14fb3903858e25193253fe59" } ] }

SourceArn kendala

SourceArn

Bat SourceArn asan membatasi izin pemberian untuk permintaan yang dibuat atas nama AWS sumber daya tertentu, yang diidentifikasi oleh Nama Sumber Daya Amazon (ARN). Kendala SourceArn hibah secara efektif menempatkan kunci kondisi aws:SourceArn global ke dalam hibah dan hanya dievaluasi ketika permintaan dibuat oleh AWS layanan.

Ken SourceArn dala selalu diperlukan ketika hibah menentukan aGranteeServicePrincipal. Secara opsional dapat digunakan denganGranteePrincipal.

Tidak seperti batasan konteks enkripsiSourceArn, batasan didukung pada hibah untuk semua jenis kunci KMS.

Untuk menentukan SourceArn batasan dalam hibah, gunakan Constraints parameter dalam CreateGrant operasi. Contoh berikut membuat hibah yang memungkinkan prinsi AWS pal layanan untuk memanggil Decrypt operasi Encrypt dan, tetapi hanya ketika permintaan dibuat atas nama tabel DynamoDB yang ditentukan. Ken SourceArn dala diperlukan ketika hibah menentukan aGranteeServicePrincipal.

$ aws kms create-grant \ --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ --grantee-service-principal service-name.amazonaws.com \ --operations Encrypt Decrypt \ --retiring-service-principal service-name.amazonaws.com \ --constraints '{"SourceArn":"arn:aws:dynamodb:us-east-1:111122223333:table/ExampleTable"}'

Hibah yang dihasilkan terlihat seperti berikut ini. Izin dalam hibah hanya efektif jika permintaan menyertakan ARN sumber yang cocok dengan SourceArn nilai dalam batasan hibah.

$ aws kms list-grants --key-id 1234abcd-12ab-34cd-56ef-1234567890ab { "Grants": [ { "Name": "", "IssuingAccount": "arn:aws:iam::111122223333:root", "GrantId": "abcde1237f76e4ba7987489ac329fbfba6ad343d6f7075dbd1ef191f0120514a", "Operations": [ "Encrypt", "Decrypt" ], "GranteeServicePrincipal": "service-name.amazonaws.com", "Constraints": { "SourceArn": "arn:aws:dynamodb:us-east-1:111122223333:table/ExampleTable" }, "CreationDate": 1718567315.0, "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "RetiringServicePrincipal": "service-name.amazonaws.com" } ] }

Anda juga dapat menggabungkan beberapa batasan dalam satu hibah. Namun, Anda dapat menentukan salah satu EncryptionContextEquals atauEncryptionContextSubset, tetapi tidak keduanya.

Ketika GranteeServicePrincipal ditentukan, batasan SourceArn diperlukan, sehingga kombinasi yang valid untuk membuat hibah dengan beberapa batasan adalah:

  • EncryptionContextEquals dengan SourceArn

  • EncryptionContextSubset dengan SourceArn

Contoh berikut membuat hibah dengan GranteeServicePrincipal danRetiringServicePrincipal, dan menyertakan EncryptionContextSubset kendala dan ken SourceArn dala.

$ aws kms create-grant \ --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ --grantee-service-principal service-name.amazonaws.com \ --retiring-service-principal service-name.amazonaws.com \ --operations Encrypt Decrypt GenerateDataKey DescribeKey \ --constraints '{"EncryptionContextSubset":{"Department":"IT"},"SourceArn":"arn:aws:dynamodb:us-east-1:111122223333:table/ExampleTable"}'

Hibah yang dihasilkan terlihat seperti berikut ini. Perhatikan bahwa respons mencakup GranteeServicePrincipal dan RetiringServicePrincipal bidang, dan Constraints bidang berisi keduanya EncryptionContextSubset danSourceArn.

$ aws kms list-grants --key-id 1234abcd-12ab-34cd-56ef-1234567890ab { "Grants": [ { "Name": "", "IssuingAccount": "arn:aws:iam::111122223333:root", "GrantId": "abcde1237f76e4ba7987489ac329fbfba6ad343d6f7075dbd1ef191f0120514a", "Operations": [ "Encrypt", "Decrypt", "GenerateDataKey", "DescribeKey" ], "GranteeServicePrincipal": "service-name.amazonaws.com", "Constraints": { "EncryptionContextSubset": { "Department": "IT" }, "SourceArn": "arn:aws:dynamodb:us-east-1:111122223333:table/ExampleTable" }, "CreationDate": 1718567315.0, "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "RetiringServicePrincipal": "service-name.amazonaws.com" } ] }

Memberikan CreateGrant izin

Pemberian izin dapat menyertakan izin untuk memanggil operasi CreateGrant. Namun saat perwakilan penerima mendapat izin untuk menelepon CreateGrant dari pemberian izin, bukan dari kebijakan, maka izin zintersebut dibatasi.

  • Perwakilan penerima hanya dapat membuat pemberian izin yang mengizinkan beberapa atau semua operasi dalam pemberian izin induk.

  • Batas pemberian izin dalam pemberian izin yang dibuat harus setidaknya seketat batas dalam pemberian izin induk.

Batasan ini tidak berlaku untuk perwakilan yang mendapatkan izin CreateGrant dari kebijakan, meskipun izinnya dapat dibatasi oleh ketentuan kebijakan.

Sebagai contoh, pertimbangkan pemberian izin yang memungkinkan perwakilan penerima memanggil operasi GenerateDataKey, Decrypt, dan CreateGrant. Kami memanggil pemberian izin yang memberi izin CreateGrant pada pemberian izin induk.

# The original grant in a ListGrants response. { "Grants": [ { "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "CreationDate": 1572216195.0, "GrantId": "abcde1237f76e4ba7987489ac329fbfba6ad343d6f7075dbd1ef191f0120514a", "Operations": [ "GenerateDataKey", "Decrypt", "CreateGrant ] "RetiringPrincipal": "arn:aws:iam::111122223333:role/adminRole", "Name": "", "IssuingAccount": "arn:aws:iam::111122223333:root", "GranteePrincipal": "arn:aws:iam::111122223333:role/keyUserRole", "Constraints": { "EncryptionContextSubset": { "Department": "IT" } }, } ] }

Perwakilan penerima, exampleUser, dapat menggunakan izin ini untuk membuat pemberian izin yang menyertakan setiap subset operasi yang ditentukan dalam pemberian izin asli, seperti CreateGrant dan Decrypt. Pemberian izin anaktidak dapat menyertakan operasi lain, seperti ScheduleKeyDeletion atau ReEncrypt.

Selain itu, batas pemberian izin dalam pemberian izin anak harus seketat atau lebih ketat dari batas dalam pemberian izin induk. Misalnya, pemberian izin anak dapat menambahkan pasangan ke batas EncryptionContextSubset dalam pemberian izin induk, tetapi tidak dapat menghapusnya. Pemberian izin anak dapat mengubah batas EncryptionContextSubset ke batas EncryptionContextEquals, tapi tidak sebaliknya.

Praktik terbaik IAM mencegah penggunaan pengguna IAM dengan kredenSIAL jangka panjang. Bila memungkinkan, gunakan peran IAM, yang menyediakan kredenSIAL sementara. Untuk detailnya, lihat Praktik terbaik keamanan di IAM di Panduan Pengguna IAM.

Misalnya, perwakilan penerima dapat menggunakan izin CreateGrant yang didapat dari pemberian izin induk untuk membuat pemberian izin anak berikut. Operasi dalam pemberian izin anak adalah subset operasi dalam pemberian izin induk dan batas pemberian izin menjadi lebih ketat.

# The child grant in a ListGrants response. { "Grants": [ { "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab", "CreationDate": 1572249600.0, "GrantId": "fedcba9999c1e2e9876abcde6e9d6c9b6a1987650000abcee009abcdef40183f", "Operations": [ "CreateGrant" "Decrypt" ] "RetiringPrincipal": "arn:aws:iam::111122223333:user/exampleUser", "Name": "", "IssuingAccount": "arn:aws:iam::111122223333:root", "GranteePrincipal": "arn:aws:iam::111122223333:user/anotherUser", "Constraints": { "EncryptionContextEquals": { "Department": "IT" } }, } ] }

Perwakilan penerima dalam pemberian izin anak, anotherUser, dapat menggunakan izin CreateGrant untuk membuat pemberian izin. Namun, pemberian izin yang dibuat anotherUser harus menyertakan operasi dalam pemberian izin induknya atau subset, dan batas pemberian izin harus sama atau lebih ketat.