Elemen kebijakan IAM JSON: Condition - AWS Identity and Access Management

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

Elemen kebijakan IAM JSON: Condition

Elemen Condition (atau blok Condition) memungkinkan Anda menentukan ketentuan saat kebijiakan berlaku. Elemen Condition bersifat opsional. Dalam Condition elemen, Anda membangun ekspresi di mana Anda menggunakan operator kondisi (sama, kurang dari, dan lainnya) untuk mencocokkan kunci konteks dan nilai dalam kebijakan terhadap kunci dan nilai dalam konteks permintaan. Untuk mempelajari selengkapnya tentang konteks permintaan, lihat Permintaan.

"Condition" : { "{condition-operator}" : { "{condition-key}" : "{condition-value}" }}

Kunci konteks yang Anda tentukan dalam kondisi kebijakan dapat berupa kunci konteks kondisi global atau kunci konteks khusus layanan. Kunci konteks kondisi global memiliki aws: awalan. Kunci konteks khusus layanan memiliki awalan layanan. Misalnya, Amazon EC2 memungkinkan Anda menulis kondisi menggunakan kunci ec2:InstanceType konteks, yang unik untuk layanan tersebut. Untuk melihat kunci konteks IAM khusus layanan dengan iam: awalan, lihat. Kunci konteks IAM dan AWS STS kondisi

Nama kunci konteks tidak peka huruf besar/kecil. Misalnya, menyertakan kunci aws:SourceIP konteks setara dengan pengujian untukAWS:SourceIp. Sensitivitas huruf besar/huruf dari nilai kunci konteks tergantung pada operator kondisi yang Anda gunakan. Misalnya, kondisi berikut mencakup StringEquals operator untuk memastikan bahwa hanya permintaan yang dibuat berdasarkan johndoe kecocokan. Nama pengguna JohnDoe ditolak aksesnya.

"Condition" : { "StringEquals" : { "aws:username" : "johndoe" }}

Ketentuan berikut menggunakan operator StringEqualsIgnoreCase untuk mencocokkan nama pengguna johndoe atau JohnDoe.

"Condition" : { "StringEqualsIgnoreCase" : { "aws:username" : "johndoe" }}

Beberapa kunci konteks mendukung pasangan kunci-nilai yang memungkinkan Anda menentukan bagian dari nama kunci. Contohnya termasuk kunci aws:RequestTag/tag-keykonteks, kunci konteks AWS KMS kms:EncryptionContext:encryption_context_key, dan kunci ResourceTag/tag-keykonteks yang didukung oleh beberapa layanan.

  • Jika Anda menggunakan kunci ResourceTag/tag-key konteks untuk layanan seperti Amazon EC2, maka Anda harus menentukan nama kunci untuk. tag-key

  • Nama kunci tidak peka huruf besar/kecil. Ini berarti jika Anda menentukan "aws:ResourceTag/TagKey1": "Value1" dalam elemen ketentuan kebijakan Anda, kemudian ketentuan tersebut cocok dengan kunci tanda sumber daya bernama TagKey1 atau tagkey1, tetapi tidak keduanya.

  • AWS layanan yang mendukung atribut ini memungkinkan Anda membuat beberapa nama kunci yang hanya berbeda berdasarkan kasus. Misalnya, Anda dapat menandai instans Amazon EC2 dengan ec2=test1 dan. EC2=test2 Saat Anda menggunakan kondisi seperti "aws:ResourceTag/EC2": "test1" untuk memungkinkan akses ke sumber daya tersebut, nama kunci cocok dengan kedua tanda, tetapi hanya satu nilai yang cocok. Hal ini dapat mengakibatkan kegagalan ketentuan yang tidak terduga.

penting

Sebagai praktik terbaik, pastikan bahwa anggota akun Anda mengikuti konvensi pemberian nama yang konsisten ketika memberi nama atribut pasangan nilai-kunci. Contohnya mencakup tanda atau konteks enkripsi AWS KMS . Anda dapat menerapkan ini menggunakan kunci aws:TagKeyskonteks untuk penandaan, atau kms:EncryptionContextKeysuntuk konteks AWS KMS enkripsi.

Konteks permintaan

Ketika kepala sekolah membuat permintaan AWS, AWS mengumpulkan informasi permintaan ke dalam konteks permintaan. Informasi ini digunakan untuk mengevaluasi dan mengotorisasi permintaan. Anda dapat menggunakan Condition elemen kebijakan JSON untuk menguji kunci konteks tertentu terhadap konteks permintaan. Misalnya, Anda dapat membuat kebijakan yang menggunakan kunci CurrentTime konteks aws: untuk memungkinkan pengguna melakukan tindakan hanya dalam rentang tanggal tertentu.

Ketika permintaan dikirimkan, AWS mengevaluasi setiap kunci konteks dalam kebijakan dan mengembalikan nilai true, false, not present, dan kadang-kadang null (string data kosong). Kunci konteks yang tidak ada dalam permintaan dianggap sebagai ketidakcocokan. Misalnya, kebijakan berikut memungkinkan penghapusan perangkat autentikasi multi-faktor (MFA) Anda sendiri, tetapi hanya jika Anda telah masuk menggunakan MFA dalam satu jam terakhir (3.600 detik).

{ "Version": "2012-10-17", "Statement": { "Sid": "AllowRemoveMfaOnlyIfRecentMfa", "Effect": "Allow", "Action": [ "iam:DeactivateMFADevice" ], "Resource": "arn:aws:iam::*:user/${aws:username}", "Condition": { "NumericLessThanEquals": {"aws:MultiFactorAuthAge": "3600"} } } }

Konteks permintaan dapat mengembalikan nilai-nilai berikut:

  • Benar – Jika pemohon masuk menggunakan MFA dalam satu jam terakhir atau kurang, maka ketentuan kembali ke benar.

  • Salah – Jika pemohon masuk menggunakan MFA lebih dari satu jam yang lalu, maka ketentuan kembali ke salah.

  • Tidak hadir - Jika pemohon membuat permintaan menggunakan kunci akses pengguna IAM mereka di AWS CLI atau AWS API, kunci tidak ada. Dalam hal ini, kuncinya tidak ada, dan kunci tidak akan cocok.

  • Null — Untuk kunci konteks yang ditentukan oleh pengguna, seperti meneruskan tag dalam permintaan, dimungkinkan untuk menyertakan string kosong. Dalam hal ini, nilai dalam konteks permintaan adalah null. Nilai null mungkin akan mengembalikan nilai tersebut dalam beberapa kasus. Misalnya, jika Anda menggunakan operator ForAllValues kondisi multivalued dengan kunci aws:TagKeys konteks, Anda dapat mengalami hasil yang tidak terduga jika konteks permintaan mengembalikan null. Untuk informasi lebih lanjut, lihat aws: TagKeys andKunci konteks multivaluasi.

Blok ketentuan

Contoh berikut menunjukkan format dasar dari elemen Condition:

"Condition": {"StringLike": {"s3:prefix": ["janedoe/*"]}}

Nilai dari permintaan diwakili oleh kunci konteks, dalam hal inis3:prefix. Nilai kunci konteks dibandingkan dengan nilai yang Anda tentukan sebagai nilai literal, sepertijanedoe/*. Jenis perbandingan yang akan dibuat ditentukan oleh operator kondisi (di sini,StringLike). Anda dapat membuat ketentuan yang membandingkan string, tanggal, angka, dan lainnya menggunakan perbandingan umum Boolean seperti sama, lebih besar dari, dan kurang dari. Bila Anda menggunakan operator string atau operator ARN, Anda juga dapat menggunakan variabel kebijakan dalam nilai kunci konteks. Contoh berikut termasuk aws:username variabel.

"Condition": {"StringLike": {"s3:prefix": ["${aws:username}/*"]}}

Dalam beberapa keadaan, kunci konteks dapat berisi beberapa nilai. Misalnya, permintaan ke Amazon DynamoDB mungkin meminta untuk mengembalikan atau memperbarui beberapa atribut dari tabel. Kebijakan untuk akses ke tabel DynamoDB dapat menyertakan dynamodb:Attributes kunci konteks, yang berisi semua atribut yang tercantum dalam permintaan. Anda dapat menguji beberapa atribut dalam daftar permintaan terhadap daftar atribut yang diizinkan di kebijakan dengan menggunakan operator kumpulan di elemen Condition. Untuk informasi selengkapnya, lihat Kunci konteks multivaluasi.

Ketika kebijakan dievaluasi selama permintaan, AWS ganti kunci dengan nilai yang sesuai dari permintaan. (Dalam contoh ini, AWS akan menggunakan tanggal dan waktu permintaan.) Kondisi dievaluasi untuk mengembalikan benar atau salah, yang kemudian diperhitungkan dalam apakah kebijakan tersebut secara keseluruhan mengizinkan atau menolak permintaan.

Beberapa nilai dalam suatu ketentuan

Sebuah Condition elemen dapat berisi beberapa operator kondisi, dan setiap operator kondisi dapat berisi beberapa pasangan kunci-nilai konteks. Gambar berikut mengilustrasikan hal ini.

dua diagram blok operator kondisi. Blok pertama mencakup dua placeholder kunci konteks, masing-masing dengan beberapa nilai. Blok kondisi kedua mencakup satu kunci konteks dengan beberapa nilai.

Untuk informasi selengkapnya, lihat Kunci konteks multivaluasi.