Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
IAMJSONelemen kebijakan: Operator kondisi
Gunakan operator ketentuan di elemen Condition
untuk mencocokkan kunci kondisi dan nilai di dalam kebijakan terhadap nilai di dalam konteks permintaan. Untuk informasi selengkapnya tentang elemen Condition
, lihat IAMJSONelemen kebijakan: Condition.
Operator ketentuan yang dapat Anda gunakan dalam kebijakan tergantung pada kunci kondisi yang Anda pilih. Anda dapat memilih kunci kondisi global atau kunci kondisi khusus layanan. Untuk mempelajari operator ketentuan mana yang dapat Anda gunakan pada kunci kondisi global, lihat AWS kunci konteks kondisi global. Untuk mempelajari operator kondisi mana yang dapat Anda gunakan untuk kunci kondisi khusus layanan, lihat Tindakan, Sumber Daya, dan Kunci Kondisi untuk AWS Layanan dan pilih layanan yang ingin Anda lihat.
penting
Jika kunci yang Anda tentukan dalam kondisi kebijakan tidak ada dalam konteks permintaan, nilainya tidak cocok dan kondisinya salah. Jika kondisi kebijakan mengharuskan kunci tidak cocok, seperti StringNotLike
atauArnNotLike
, dan kunci kanan tidak ada, kondisi tersebut benar. Logika ini berlaku untuk semua operator kondisi kecuali... IfExistsdan cek Null. Operator ini menguji apakah kuncinya ada (exists) dalam konteks permintaan.
Operator ketentuan dapat dikelompokkan ke dalam kategori berikut:
-
Nama Sumber Daya Amazon (ARN) (tersedia hanya untuk beberapa layanan.)
-
... IfExists(memeriksa apakah nilai kunci ada sebagai bagian dari pemeriksaan lain)
-
Pemeriksaan null (memeriksa apakah nilai kunci ada sebagai cek mandiri)
Operator ketentuan string
Operator ketentuan string memungkinkan Anda membangun elemen Condition
yang membatasi akses berdasarkan perbandingan kunci ke nilai string.
Operator ketentuan | Deskripsi |
---|---|
|
Kecocokan yang tepat, peka terhadap huruf besar-kecil |
|
Pencocokan dinegasikan |
|
Pencocokan yang tepat, mengabaikan huruf besar-kecil |
|
Pencocokan yang dinegasikan, mengabaikan huruf besar-kecil |
|
Kecocokan kepekaan huruf besar-kecil. Nilainya dapat mencakup wildcard pencocokan multi-karakter (*) dan wildcard pencocokan karakter tunggal (?) di mana saja di string. Anda harus menentukan wildcard untuk mencapai kecocokan string paral. catatanJika kunci berisi beberapa nilai, |
|
Kecocokan dinegasikan kepekaan huruf besar-kecil. Nilai dapat mencakup wildcard pencocokan multi-karakter (*) atau wildcard pencocokan karakter tunggal (?) di mana saja di string. |
Misalnya, pernyataan berikut berisi Condition
elemen yang menggunakan aws:PrincipalTag
kunci untuk menentukan bahwa prinsipal yang membuat permintaan harus ditandai dengan kategori iamuser-admin
pekerjaan.
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "iam:*AccessKey*", "Resource": "arn:aws:iam::
account-id
:user/*", "Condition": {"StringEquals": {"aws:PrincipalTag/job-category": "iamuser-admin"}} } }
Jika kunci yang Anda sebutkan dalam ketentuan kebijakan tidak ada dalam konteks permintaan, nilainya tidak cocok. Dalam contoh ini, aws:PrincipalTag/job-category
kunci hadir dalam konteks permintaan jika prinsipal menggunakan IAM pengguna dengan tag terlampir. Hal ini juga termasuk untuk prinsipal menggunakan IAM peran dengan tag terlampir atau tag sesi. Jika pengguna tanpa tanda mencoba melihat atau mengedit access key, ketentuan akan kembali false
dan permintaan tersebut ditolak secara tersirat oleh pernyataan ini.
Anda dapat menggunakan variabel kebijakan dengan operator ketentuan String
.
Contoh berikut menggunakan operator StringLike
kondisi untuk melakukan pencocokan string dengan variabel kebijakan guna membuat kebijakan yang memungkinkan IAM pengguna menggunakan konsol Amazon S3 untuk mengelola “direktori home” miliknya sendiri di bucket Amazon S3. Kebijakan tersebut mengizinkan tindakan tertentu pada bucket S3 selama s3:prefix
cocok dengan salah satu pola yang ditentukan.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:ListAllMyBuckets", "s3:GetBucketLocation" ], "Resource": "arn:aws:s3:::*" }, { "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::
amzn-s3-demo-bucket
", "Condition": {"StringLike": {"s3:prefix": [ "", "home/", "home/${aws:username}/" ]}} }, { "Effect": "Allow", "Action": "s3:*", "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket
/home/${aws:username}", "arn:aws:s3:::amzn-s3-demo-bucket
/home/${aws:username}/*" ] } ] }
Untuk contoh kebijakan yang menunjukkan cara menggunakan Condition
elemen untuk membatasi akses ke sumber daya berdasarkan ID aplikasi dan ID pengguna untuk OIDC federasi, lihatAmazon S3: Memungkinkan pengguna Amazon Cognito mengakses objek di bucket mereka.
Pencocokan wildcard
Operator kondisi string melakukan pencocokan tanpa pola yang tidak menerapkan format yang telah ditentukan sebelumnya. ARNdan operator kondisi tanggal adalah bagian dari operator string yang menegakkan struktur pada nilai kunci kondisi. Saat Anda menggunakan StringLike atau StringNotLike operator untuk kecocokan string paral dari tanggal ARN atau, pencocokan mengabaikan bagian struktur mana yang dikartu liar.
Misalnya, kondisi berikut mencari kecocokan sebagian dari ARN menggunakan operator kondisi yang berbeda.
Ketika ArnLike digunakan, partisi, layanan, account-id, resource-type, dan sebagian resource-id bagian ARN harus memiliki pencocokan yang tepat dengan dalam konteks permintaan. ARN Hanya wilayah dan jalur sumber daya yang memungkinkan pencocokan sebagian.
"Condition": {"ArnLike": {"aws:SourceArn": "arn:aws:cloudtrail:*:111122223333:trail/*"}}
Ketika StringLike digunakan sebagai pengganti ArnLike, pencocokan mengabaikan ARN struktur dan memungkinkan pencocokan paral, terlepas dari bagian yang dikartu liar.
"Condition": {"StringLike": {"aws:SourceArn": "arn:aws:cloudtrail:*:111122223333:trail/*"}}
ARN | ArnLike | StringLike |
---|---|---|
arn:aws:cloudtrail:us-west- 2:111122223333:trail/keuangan |
Pertandingan |
Pertandingan |
arn:aws:cloudtrail:us-east- 2:111122223333:trail/keuangan/arsip |
Pertandingan |
Pertandingan |
arn:aws:cloudtrail:us-east-2:444455556666:user /111122223333:trail/finance |
Tidak ada kecocokan |
Pertandingan |
Operator ketentuan numerik
Operator ketentuan numerik memungkinkan Anda membangun elemen Condition
yang membatasi akses berdasarkan perbandingan kunci ke nilai bilangan bulat atau desimal.
Operator ketentuan | Deskripsi |
---|---|
|
Pencocokan |
|
Pencocokan dinegasikan |
|
Pencocokan “Kurang dari” |
|
Pencocokan “kurang dari atau sama dengan” |
|
Pencocokan “lebih besar dari” |
|
Pencocokan “lebih besar dari atau sama dengan” |
Misalnya, pernyataan berikut memuat elemen Condition
yang menggunakan operator ketentuan NumericLessThanEquals
dengan kunci s3:max-keys
untuk menentukan bahwa pemohon dapat membuat daftar hingga 10 objek dalam amzn-s3-demo-bucket
sekali waktu.
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::amzn-s3-demo-bucket", "Condition": {"NumericLessThanEquals": {"s3:max-keys": "10"}} } }
Jika kunci yang Anda sebutkan dalam ketentuan kebijakan tidak ada dalam konteks permintaan, nilainya tidak cocok. Dalam contoh ini, kunci s3:max-keys
selalu hadir dalam permintaan saat Anda melakukan operasi ListBucket
. Jika kebijakan ini mengizinkan semua operasi Amazon S3 maka hanya operasi yang mencakup kunci konteks max-keys
yang bernilai kurang dari atau sama dengan 10 akan diperbolehkan.
Anda tidak dapat menggunakan variabel kebijakan dengan operator ketentuan Numeric
.
Operator ketentuan tanggal
Operator ketentuan tanggal memungkinkan Anda membangun elemen Condition
yang membatasi akses berdasarkan perbandingan kunci ke nilai tanggal/waktu. Anda menggunakan operator kondisi ini dengan aws:CurrentTime
kunci atau aws:EpochTime
kunci. Anda harus menentukan nilai tanggal/waktu dengan salah satu implementasi W3C dari format tanggal ISO 8601 atau dalam
catatan
Wildcard tidak diizinkan untuk operator ketentuan tanggal.
Operator ketentuan | Deskripsi |
---|---|
|
Mencocokkan tanggal tertentu |
|
Pencocokan dinegasikan |
|
Sesuai sebelum tanggal dan waktu tertentu |
|
Sesuai pada atau sebelum tanggal dan waktu tertentu |
|
Sesuai setelah tanggal dan waktu tertentu |
|
Sesuai pada atau setelah tanggal dan waktu tertentu |
Misalnya, pernyataan berikut memuat elemen Condition
yang menggunakan operator ketentuan DateGreaterThan
dengan kunci aws:TokenIssueTime
. Ketentuan ini menyebutkan bahwa kredensial keamanan sementara yang digunakan untuk membuat permintaan tersebut diterbitkan pada 2020. Kebijakan ini dapat secara terprogram diperbarui setiap hari untuk memastikan anggota akun menggunakan kredensial baru.
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "iam:*AccessKey*", "Resource": "arn:aws:iam::
account-id
:user/*", "Condition": {"DateGreaterThan": {"aws:TokenIssueTime": "2020-01-01T00:00:01Z"}} } }
Jika kunci yang Anda sebutkan dalam ketentuan kebijakan tidak ada dalam konteks permintaan, nilainya tidak cocok. Kunci aws:TokenIssueTime
tersedia dalam konteks permintaan hanya ketika prinsipal menggunakan kredensial sementara untuk membuat permintaan. Kuncinya tidak ada di AWS CLI, AWS API, atau AWS SDKpermintaan yang dibuat menggunakan kunci akses. Dalam contoh ini, jika IAM pengguna mencoba untuk melihat atau mengedit kunci akses, permintaan ditolak.
Anda tidak dapat menggunakan variabel kebijakan dengan operator ketentuan Date
.
Operator ketentuan Boolean
Ketentuan Boolean memungkinkan Anda membangun elemen Condition
yang membatasi akses berdasarkan perbandingan kunci "benar" atau "salah."
Operator ketentuan | Deskripsi |
---|---|
|
Pencocokan Boolean |
Misalnya, kebijakan berbasis identitas ini menggunakan operator Bool
kondisi dengan aws:SecureTransport
kunci untuk menolak mereplikasi objek dan tag objek ke bucket tujuan dan isinya jika permintaan belum selesai. SSL
penting
Kebijakan ini tidak mengizinkan tindakan apa pun. Gunakan kebijakan ini bersama dengan kebijakan lain yang mengizinkan tindakan tertentu.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "BooleanExample", "Action": "s3:ReplicateObject", "Effect": "Deny", "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket", "arn:aws:s3:::amzn-s3-demo-bucket/*" ], "Condition": { "Bool": { "aws:SecureTransport": "false" } } } ] }
Jika kunci yang Anda sebutkan dalam ketentuan kebijakan tidak ada dalam konteks permintaan, nilainya tidak cocok. Konteks aws:SecureTransport
permintaan mengembalikan true atau false.
Anda dapat menggunakan variabel kebijakan dengan operator ketentuan Boolean
.
Operator ketentuan biner
Operator ketentuan BinaryEquals
memungkinkan Anda membangun elemen Condition
yang menguji nilai kunci yang berada dalam format biner. Ini membandingkan nilai dari byte kunci yang ditentukan untuk byte terhadap perwakilan terkode base-64
"Condition" : { "BinaryEquals": { "
key
" : "QmluYXJ5VmFsdWVJbkJhc2U2NA==" } }
Jika kunci yang Anda sebutkan dalam ketentuan kebijakan tidak ada dalam konteks permintaan, nilainya tidak cocok.
Anda tidak dapat menggunakan variabel kebijakan dengan operator ketentuan Binary
.
Operator ketentuan alamat IP
Operator kondisi alamat IP memungkinkan Anda membangun Condition
elemen yang membatasi akses berdasarkan membandingkan kunci dengan IPv4 atau IPv6 alamat atau rentang alamat IP. Anda menggunakan ini dengan kunci aws:SourceIp
. Nilai harus dalam CIDR format standar (misalnya, 203.0.113.0/24 atau 2001:: 1234:5678: DB8 :/64). Jika Anda menentukan alamat IP tanpa awalan perutean terkait, IAM gunakan nilai awalan default dari. /32
Beberapa AWS dukungan layananIPv6, menggunakan:: untuk mewakili rentang 0s. Untuk mempelajari apakah suatu layanan mendukungIPv6, lihat dokumentasi untuk layanan tersebut.
Operator ketentuan | Deskripsi |
---|---|
|
Alamat IP atau rentang yang ditentukan |
|
Semua alamat IP kecuali alamat dan rentang IP yang ditentukan |
Misalnya, pernyataan berikut menggunakan operator ketentuan IpAddress
dengan kunci aws:SourceIp
untuk menentukan bahwa permintaan harus datang dari rentang IP 203.0.113.0 hingga 203.0.113.255.
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "iam:*AccessKey*", "Resource": "arn:aws:iam::
account-id
:user/*", "Condition": {"IpAddress": {"aws:SourceIp": "203.0.113.0/24"}} } }
Kunci kondisi aws:SourceIp
menyelesaikan ke alamat IP yang berasal dari permintaan asli. Jika permintaan berasal dari EC2 instans Amazon, aws:SourceIp
evaluasi ke alamat IP publik instans.
Jika kunci yang Anda sebutkan dalam ketentuan kebijakan tidak ada dalam konteks permintaan, nilainya tidak cocok. aws:SourceIp
Kuncinya selalu ada dalam konteks permintaan, kecuali ketika pemohon menggunakan VPC titik akhir untuk membuat permintaan. Dalam hal ini, ketentuan mengembalikan false
dan permintaan tersebut ditolak secara tersirat oleh pernyataan ini.
Anda tidak dapat menggunakan variabel kebijakan dengan operator ketentuan IpAddress
.
Contoh berikut menunjukkan cara mencampur IPv4 dan IPv6 alamat untuk mencakup semua alamat IP valid organisasi Anda. Kami menyarankan agar Anda memperbarui kebijakan organisasi Anda dengan rentang IPv6 alamat Anda selain IPv4 rentang yang sudah Anda miliki untuk memastikan kebijakan terus berfungsi saat Anda melakukan transisiIPv6.
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "
someservice
:*", "Resource": "*", "Condition": { "IpAddress": { "aws:SourceIp": [ "203.0.113.0/24", "2001:DB8:1234:5678::/64" ] } } } }
Kunci aws:SourceIp
kondisi hanya berfungsi dalam JSON kebijakan jika Anda memanggil yang diuji API secara langsung sebagai pengguna. Jika Anda menggunakan layanan untuk menelepon layanan target atas nama Anda, layanan target akan melihat alamat IP layanan panggilan, bukan alamat IP pengguna asal. Hal ini dapat terjadi, misalnya, jika Anda menggunakan AWS CloudFormation untuk memanggil Amazon EC2 untuk membuat instance untuk Anda. Saat ini tidak ada cara untuk meneruskan alamat IP asal melalui layanan panggilan ke layanan target untuk dievaluasi dalam JSON kebijakan. Untuk jenis API panggilan layanan ini, jangan gunakan tombol aws:SourceIp
kondisi.
Operator kondisi Nama Sumber Daya Amazon (ARN)
Operator kondisi Amazon Resource Name (ARN) memungkinkan Anda membuat Condition
elemen yang membatasi akses berdasarkan membandingkan kunci ke file. ARN ARNItu dianggap sebagai string.
Operator ketentuan | Deskripsi |
---|---|
|
Pencocokan peka huruf besar/kecil dari. ARN Masing-masing dari enam komponen yang dibatasi titik dua dicentang secara terpisah dan masing-masing dapat menyertakan wildcard pencocokan multi-karakter (*) atau wildcard pencocokan karakter tunggal (?). ARN Operator |
|
Pencocokan yang dinegasikan untukARN. Operator |
Anda dapat menggunakan variabel kebijakan dengan operator ketentuan ARN
.
Contoh kebijakan berbasis sumber daya berikut menunjukkan kebijakan yang dilampirkan ke SQS antrean Amazon yang ingin Anda kirimi pesan. SNS Ini memberi Amazon SNS izin untuk mengirim pesan ke antrian (atau antrian) pilihan Anda, tetapi hanya jika layanan mengirim pesan atas nama SNS topik Amazon tertentu (atau topik). Anda menentukan antrian di Resource
bidang, dan SNS topik Amazon sebagai nilai untuk SourceArn
kunci.
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Principal": {"AWS": "
123456789012
"}, "Action": "SQS:SendMessage", "Resource": "arn:aws:sqs:REGION
:123456789012
:QUEUE-ID
", "Condition": {"ArnEquals": {"aws:SourceArn": "arn:aws:sns:REGION
:123456789012
:TOPIC-ID
"}} } }
Jika kunci yang Anda sebutkan dalam ketentuan kebijakan tidak ada dalam konteks permintaan, nilainya tidak cocok. Kunci aws:SourceArn
muncul dalam konteks permintaan hanya jika sumber daya memicu layanan untuk menghubungi layanan lain atas nama pemilik sumber daya. Jika IAM pengguna mencoba untuk melakukan operasi ini secara langsung, kondisi kembali false
dan permintaan secara implisit ditolak oleh pernyataan ini.
... IfExists operator kondisi
Anda dapat menambahkan IfExists
ke akhir nama operator kondisi apa pun kecuali Null
kondisi—misalnya,. StringLikeIfExists
Anda melakukan ini untuk mengatakan “Jika kunci kondisi hadir dalam konteks permintaan, proses kunci seperti yang ditentukan dalam kebijakan. Jika kuncinya tidak ada, evaluasi elemen ketentuan sebagai benar." Elemen ketentuan lain dalam pernyataan ini masih dapat menghasilkan ketidakcocokkan, tetapi bukan kunci yang hilang saat diperiksa dengan ...IfExists
. Jika Anda menggunakan "Effect":
"Deny"
elemen dengan operator kondisi yang dinegasikan sepertiStringNotEqualsIfExists
, permintaan masih ditolak meskipun kunci kondisi tidak ada.
Contoh menggunakan IfExists
Banyak kunci kondisi menjelaskan informasi tentang tipe sumber daya tertentu dan hanya ada ketika mengakses tipe sumber daya tersebut. Kunci kepatuhan ini tidak ada pada tipe sumber daya lainnya. Hal ini tidak menyebabkan masalah ketika pernyataan kebijakan berlaku hanya pada satu tipe sumber daya. Namun, ada kasus ketika pernyataan tunggal dapat berlaku untuk beberapa tipe sumber daya, seperti ketika pernyataan kebijakan merujuk tindakan dari beberapa layanan atau ketika tindakan tertentu dalam layanan mengakses beberapa tipe sumber daya yang berbeda dalam layanan yang sama. Dalam kasus seperti itu, termasuk kunci kepatuhan yang berlaku hanya pada salah satu sumber daya dalam pernyataan kebijakan dapat menyebabkan elemen Condition
dalam pernyataan kebijakan gagal sehingga pernyataan "Effect"
tidak berlaku.
Misalnya, pertimbangkan contoh kebijakan berikut ini:
{
"Version": "2012-10-17",
"Statement": {
"Sid": "THISPOLICYDOESNOTWORK
",
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": "*",
"Condition": {"StringLike": {"ec2:InstanceType": [
"t1.*",
"t2.*",
"m3.*"
]}}
}
}
Maksud dari kebijakan sebelumnya adalah untuk memungkinkan pengguna meluncurkan instance apa pun yang bertipet1
, atau. t2
m3
Namun, meluncurkan instance memerlukan akses banyak sumber daya selain instance itu sendiri; misalnya, gambar, pasangan kunci, grup keamanan, dan banyak lagi. Keseluruhan pernyataan dievaluasi terhadap setiap sumber daya yang diperlukan untuk meluncurkan instans. Sumber daya tambahan ini tidak memiliki kunci kondisi ec2:InstanceType
, jadi StringLike
gagal diperiksa, dan pengguna tidak diberi kemampuan untuk meluncurkan tipe instans mana pun.
Untuk mengatasi ini, gunakan operator ketentuan StringLikeIfExists
. Dengan cara ini, pengujian hanya terjadi jika terdapat kunci kondisi. Anda dapat membaca kebijakan berikut sebagai: “Jika sumber daya yang diperiksa memiliki kunci kondisiec2:InstanceType
" ", maka izinkan tindakan hanya jika nilai kunci dimulai dengant1.
,t2.
, ataum3.
. Jika sumber daya yang diperiksa tidak memiliki kunci kondisi itu, jangan khawatir tentang hal tersebut.” Tanda bintang (*) dalam nilai kunci kondisi, bila digunakan dengan operator StringLikeIfExists
kondisi, ditafsirkan sebagai wildcard untuk mencapai kecocokan string paral. Pernyataan DescribeActions
mencakup tindakan yang diperlukan untuk melihat instans di konsol.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "RunInstance", "Effect": "Allow", "Action": "ec2:RunInstances", "Resource": "*", "Condition": { "StringLikeIfExists": { "ec2:InstanceType": [ "t1.*", "t2.*", "m3.*" ]}} }, { "Sid": "DescribeActions", "Effect": "Allow", "Action": [ "ec2:DescribeImages", "ec2:DescribeInstances", "ec2:DescribeVpcs", "ec2:DescribeKeyPairs", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups" ], "Resource": "*" }] }
Operator ketentuan memeriksa keberadaan kunci kondisi
Gunakan operator Null
kondisi untuk memeriksa apakah kunci kondisi tidak ada pada saat otorisasi. Dalam pernyataan kebijakan, gunakan true
(kuncinya tidak ada — yaitu null) atau false
(kunci ada dan nilainya tidak null).
Anda tidak dapat menggunakan variabel kebijakan dengan operator ketentuan Null
.
Misalnya, Anda dapat menggunakan operator ketentuan ini untuk menentukan apakah pengguna menggunakan kredensial mereka sendiri untuk operasi atau kredensial sementara. Jika pengguna menggunakan kredensial sementara, maka kuncinya aws:TokenIssueTime
ada dan memiliki nilai. Contoh berikut menunjukkan kondisi yang menyatakan bahwa pengguna tidak boleh menggunakan kredensi sementara (kunci tidak boleh ada) bagi pengguna untuk menggunakan Amazon. EC2 API
{ "Version": "2012-10-17", "Statement":{ "Action":"ec2:*", "Effect":"Allow", "Resource":"*", "Condition":{"Null":{"aws:TokenIssueTime":"true"}} } }