Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Aturan kebijakan terdiri dari blok if dan then. Di dalam blok if, Anda mendefinisikan satu atau beberapa kondisi yang menentukan kapan kebijakan diberlakukan. Anda dapat menerapkan operator logis ke kondisi ini untuk menentukan skenario kebijakan secara tepat.
Untuk detail lengkap tentang setiap efek, urutan evaluasi, properti, dan contoh, lihat dasar-dasar efek definisi Azure Policy.
Di blok then, Anda menentukan efek yang terjadi ketika kondisi if terpenuhi.
{
"if": {
<condition> | <logical operator>
},
"then": {
"effect": "deny | audit | modify | denyAction | append | auditIfNotExists | deployIfNotExists | disabled"
}
}
Untuk informasi selengkapnya tentang policyRule, buka skema definisi kebijakan.
Operator logis
Operator logis yang didukung adalah:
"not": {condition or operator}"allOf": [{condition or operator},{condition or operator}]"anyOf": [{condition or operator},{condition or operator}]
Sintaks not membalikkan hasil dari kondisi.
allOf Sintaks (mirip dengan operasi logisand) mengharuskan semua kondisi benar.
anyOf Sintaks (mirip dengan operasi logisor) memerlukan satu atau beberapa kondisi agar benar.
Anda dapat menggabungkan operator logis. Contoh berikut menunjukkan operasi not yang tertanam di dalam operasi allOf.
"if": {
"allOf": [
{
"not": {
"field": "tags",
"containsKey": "application"
}
},
{
"field": "type",
"equals": "Microsoft.Storage/storageAccounts"
}
]
},
Kondisi
Sebuah kondisi mengevaluasi apakah suatu nilai memenuhi kriteria tertentu. Kondisi yang didukung adalah:
"equals": "stringValue""notEquals": "stringValue""like": "stringValue""notLike": "stringValue""match": "stringValue""matchInsensitively": "stringValue""notMatch": "stringValue""notMatchInsensitively": "stringValue""contains": "stringValue""notContains": "stringValue""in": ["stringValue1","stringValue2"]"notIn": ["stringValue1","stringValue2"]"containsKey": "keyName""notContainsKey": "keyName""less": "dateValue"|"less": "stringValue"|"less": intValue"lessOrEquals": "dateValue"|"lessOrEquals": "stringValue"|"lessOrEquals": intValue"greater": "dateValue"|"greater": "stringValue"|"greater": intValue"greaterOrEquals": "dateValue"|"greaterOrEquals": "stringValue"|"greaterOrEquals": intValue"exists": "bool"
Untuk less, , lessOrEqualsgreater, dan greaterOrEquals, jika jenis properti tidak cocok dengan jenis kondisi, kesalahan akan muncul. Perbandingan string dibuat menggunakan InvariantCultureIgnoreCase.
Saat menggunakan kondisi contains dan notContains, karakter pengganti (*) tidak boleh digunakan dalam nilai.
Saat menggunakan kondisi like dan notLike, Anda menyediakan karakter kartu bebas (*) dalam nilai. Nilai tidak boleh memiliki lebih dari satu karakter kartu bebas.
Saat menggunakan kondisi match dan notMatch, gunakan hashtag (#) untuk mencocokkan digit, tanda tanya (?) untuk huruf, dan titik (.) untuk mencocokkan karakter apa pun, serta karakter lainnya cocokkan dengan karakter tersebut. Meskipun match dan notMatch peka huruf besar/kecil, semua kondisi lain yang mengevaluasi tidak stringValue peka huruf besar/kecil. Alternatif yang tidak sensitif huruf tersedia di matchInsensitively dan notMatchInsensitively.
Bidang
Kondisi yang mengevaluasi apakah nilai properti dalam payload permintaan sumber daya memenuhi kriteria tertentu dapat dibentuk menggunakan field ekspresi. Bidang berikut ini didukung:
namefullName- Mengembalikan nama lengkap sumber daya. Nama lengkap sumber daya adalah nama sumber daya yang didahului oleh nama sumber daya induk apa pun (misalnya
myServer/myDatabase).
- Mengembalikan nama lengkap sumber daya. Nama lengkap sumber daya adalah nama sumber daya yang didahului oleh nama sumber daya induk apa pun (misalnya
kindtypelocation- Bidang lokasi dinormalisasi untuk mendukung berbagai format. Misalnya,
East US 2dianggap sama denganeastus2. - Gunakan global untuk sumber daya yang bersifat agnostik terhadap lokasi.
- Bidang lokasi dinormalisasi untuk mendukung berbagai format. Misalnya,
id- Mengembalikan ID sumber daya dari sumber daya yang sedang dievaluasi.
- Contoh:
/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myRG/providers/Microsoft.KeyVault/vaults/myVault
identity.type- Mengembalikan jenis identitas terkelola yang diaktifkan pada sumber daya.
- Nilai yang valid dari identitas terkelola:
None, ,SystemAssignedSystemAssigned, UserAssigned, danUserAssigned. -
identity.typedapat digunakan dengan kondisi aturan kebijakan yang didukung. Misalnya, kebijakan dengan efek tolak dapat memblokir permintaan berdasarkan keberadaan identitas atau berdasarkan nilai tertentu dari jenis identitas. Contoh aturan kebijakan yang memeriksa keberadaanidentity.typeadalah definisi kebijakan bawaan Akun Automation harus memiliki Identitas Terkelola dengan IDdea83a72-443c-4292-83d5-54a2f98749c0.
tagstags['<tagName>']- Sintaks braket ini mendukung nama tag yang memiliki tanda baca seperti tanda hubung, titik, atau spasi.
- Di mana
tagNameadalah nama tag untuk memvalidasi kondisi. - Contoh:
tags['Acct.CostCenter']di manaAcct.CostCenteradalah nama tag.
tags['''<tagName>''']- Sintaks braket ini mendukung nama tag yang memiliki apostrof di dalamnya dengan melakukan escape dengan apostrof ganda.
- Di mana
tagNameadalah nama tag untuk memvalidasi kondisi. - Contoh:
tags['''My.Apostrophe.Tag''']di mana'My.Apostrophe.Tag'adalah nama tag.
-
tags.<tagName>,tags[tagName], dantags[tag.with.dots]merupakan cara yang dapat diterima untuk mendeklarasikantagsbidang tetapi ekspresi yang disukai adalah contoh sebelumnya.
alias properti
- Untuk daftar, lihat Alias.
- Dalam ekspresi yang mengacu pada alias array
field, setiap elemen dalam array dievaluasi satu per satu dengan operator logis[*]antar elemen. Untuk informasi selengkapnya, lihat Acuan properti sumber daya dari array.
Ekspresi Lapangan
Kondisi yang menggunakan ekspresi field dapat menggantikan sintaks definisi kebijakan yang warisan "source": "action", yang sebelumnya berfungsi pada operasi tulis. Misalnya, kode berikut tidak lagi didukung:
{
"source": "action",
"like": "Microsoft.Network/publicIPAddresses/*"
}
Tetapi perilaku yang diinginkan dapat dicapai menggunakan field logika:
{
"field": "type",
"equals": "Microsoft.Network/publicIPAddresses"
}
Menggunakan tag dengan parameter
Nilai parameter dapat diteruskan ke bidang tag. Meneruskan parameter ke bidang tag meningkatkan fleksibilitas definisi kebijakan selama penetapan kebijakan.
Dalam contoh berikut, concat digunakan untuk membuat pencarian bidang tag untuk tag bernama nilai tagName parameter. Jika tag tersebut tidak ada, modify efek digunakan untuk menambahkan tag menggunakan nilai tag bernama yang sama yang diatur pada grup sumber daya induk sumber daya yang diaudit dengan menggunakan resourcegroup() fungsi pencarian.
{
"if": {
"field": "[concat('tags[', parameters('tagName'), ']')]",
"exists": "false"
},
"then": {
"effect": "modify",
"details": {
"operations": [
{
"operation": "add",
"field": "[concat('tags[', parameters('tagName'), ']')]",
"value": "[resourcegroup().tags[parameters('tagName')]]"
}
],
"roleDefinitionIds": [
"/providers/microsoft.authorization/roleDefinitions/4a9ae827-6dc8-4573-8ac7-8239d42aa03f"
]
}
}
}
Nilai
Kondisi yang mengevaluasi apakah nilai memenuhi kriteria tertentu dapat dibentuk menggunakan value ekspresi. Nilai dapat bersifat harfiah, nilai parameter, atau nilai yang dikembalikan dari fungsi templat yang didukung.
Peringatan
Jika hasil fungsi templat adalah kesalahan, evaluasi kebijakan akan gagal. Evaluasi yang gagal adalah implisit deny. Untuk mengetahui informasi selengkapnya, lihat menghindari kegagalan templat. Gunakan enforcementMode dari doNotEnforce untuk mencegah efek dari evaluasi yang gagal pada sumber daya baru atau yang diperbarui saat menguji dan memvalidasi sebuah definisi kebijakan baru.
Contoh nilai
Contoh aturan kebijakan ini menggunakan value untuk membandingkan hasil fungsi resourceGroup() dan properti name yang dikembalikan dengan kondisi like dari *netrg. Aturan ini menolak sumber daya apa pun yang bukan dari Microsoft.Network/*type dalam grup sumber daya apa pun yang namanya berakhiran *netrg.
{
"if": {
"allOf": [
{
"value": "[resourceGroup().name]",
"like": "*netrg"
},
{
"field": "type",
"notLike": "Microsoft.Network/*"
}
]
},
"then": {
"effect": "deny"
}
}
Contoh aturan kebijakan ini menggunakan value untuk memeriksa apakah hasil dari beberapa fungsi bertingkatequalstrue. Aturan ini menolak sumber daya apa pun yang tidak memiliki setidaknya tiga tag.
{
"mode": "indexed",
"policyRule": {
"if": {
"value": "[less(length(field('tags')), 3)]",
"equals": "true"
},
"then": {
"effect": "deny"
}
}
}
Menghindari kegagalan templat
Penggunaan fungsi templat di value memungkinkan banyak fungsi berlapis yang kompleks. Jika hasil fungsi templat adalah kesalahan, evaluasi kebijakan akan gagal. Evaluasi yang gagal adalah implisit deny. Contoh value yang gagal dalam skenario tertentu:
{
"policyRule": {
"if": {
"value": "[substring(field('name'), 0, 3)]",
"equals": "abc"
},
"then": {
"effect": "audit"
}
}
}
Contoh aturan kebijakan sebelumnya menggunakan substring() untuk membandingkan tiga karakter pertama dengan nameabc. Jika name lebih pendek dari tiga karakter, substring() fungsi menghasilkan kesalahan. Kesalahan ini mengubah kebijakan menjadi deny efek.
Sebagai gantinya , gunakan fungsi if() untuk memeriksa apakah tiga karakter name pertama sama abc tanpa mengizinkan name lebih pendek dari tiga karakter untuk menyebabkan kesalahan:
{
"policyRule": {
"if": {
"value": "[if(greaterOrEquals(length(field('name')), 3), substring(field('name'), 0, 3), 'not starting with abc')]",
"equals": "abc"
},
"then": {
"effect": "audit"
}
}
}
Dengan aturan kebijakan yang direvisi, if() memeriksa panjang name sebelum mencoba mendapatkan substring() untuk nilai yang memiliki kurang dari tiga karakter. Jika name terlalu pendek, nilai "tidak dimulai dengan abc" dikembalikan sebagai gantinya dan dibandingkan dengan abc. Sumber daya dengan nama pendek yang tidak dimulai dengan abc masih melanggar aturan kebijakan, namun sekarang tidak lagi menyebabkan kesalahan selama evaluasi.
Hitung
Kondisi yang menghitung berapa banyak anggota array yang memenuhi kriteria tertentu dapat dibentuk menggunakan count ekspresi. Skenario umum adalah memeriksa apakah setidaknya salah satu dari, tepat salah satu dari, semua, atau tidak ada anggota array yang memenuhi kondisi. Mengevaluasi count setiap anggota array untuk ekspresi kondisi dan menjumlahkan hasil yang sebenarnya , yang kemudian dibandingkan dengan operator ekspresi.
Jumlah bidang
Menghitung berapa banyak anggota array dalam payload permintaan yang memenuhi ekspresi kondisi. Struktur field count ekspresi adalah:
{
"count": {
"field": "<[*] alias>",
"where": {
/* condition expression */
}
},
"<condition>": "<compare the count of true condition expression array members to this value>"
}
Properti berikut digunakan dengan field count:
-
count.field(wajib): Berisi jalur ke array dan harus berupa alias array. -
count.where(opsional): Ekspresi kondisi untuk mengevaluasi dengan satu per satu setiap anggota array alias daricount.field. Jika properti ini tidak disediakan, semua anggota array dengan jalur 'kolom' dievaluasi menjadi true. Kondisi apa pun dapat digunakan di dalam properti ini. Operator logis dapat digunakan di dalam properti ini untuk membuat persyaratan evaluasi yang kompleks. -
condition(wajib): Nilai dibandingkan dengan jumlah item yang memenuhi ekspresi kondisicount.where. Kondisi numerik harus digunakan.
Untuk informasi lebih lengkap tentang cara bekerja dengan properti array di Azure Policy, termasuk penjelasan terperinci tentang bagaimana ekspresi field count dievaluasi, lihat Merujuk pada properti sumber daya array.
Jumlah nilai
Menghitung jumlah anggota array yang memenuhi kondisi. Array dapat berupa array harfiah atau referensi ke parameter array. Struktur value count ekspresi adalah:
{
"count": {
"value": "<literal array | array parameter reference>",
"name": "<index name>",
"where": {
/* condition expression */
}
},
"<condition>": "<compare the count of true condition expression array members to this value>"
}
Properti berikut digunakan dengan value count:
-
count.value(wajib): Array yang akan dievaluasi. -
count.name(wajib): Nama indeks, terdiri dari huruf dan digit bahasa Inggris. Menentukan nama untuk nilai anggota array yang dievaluasi dalam perulangan saat ini. Nama digunakan untuk mereferensikan nilai saat ini di dalam kondisicount.where. Opsional ketika ekspresicounttidak berada sebagai cabang dari ekspresi laincount. Ketika tidak disediakan, nama indeks secara implisit diatur ke"default". -
count.where(opsional): Ekspresi kondisi untuk mengevaluasi secara individual untuk setiap anggota array .count.valueJika properti ini tidak disediakan, semua anggota array dievaluasi ke true. Kondisi apa pun dapat digunakan di dalam properti ini. Operator logis dapat digunakan di dalam properti ini untuk membuat persyaratan evaluasi yang kompleks. Nilai anggota array yang saat ini dijumlahkan dapat diakses dengan memanggil fungsi saat ini. -
condition(wajib): Nilai dibandingkan dengan jumlah item yang memenuhi ekspresi kondisicount.where. Kondisi numerik harus digunakan.
Fungsi saat ini
Fungsi current() hanya tersedia di dalam kondisi count.where. Ini mengembalikan nilai anggota array yang saat ini dihitung oleh evaluasi ekspresi count.
Penggunaan perhitungan nilai
-
current(<index name defined in count.name>). Misalnya:current('arrayMember'). -
current(). Diperbolehkan hanya ketikavalue countekspresi bukan anak dari ekspresi laincount. Mengembalikan nilai yang sama seperti contoh sebelumnya.
Jika nilai yang dikembalikan oleh panggilan adalah objek, pengakses properti didukung. Misalnya: current('objectArrayMember').property.
Pemakaian hitungan kolom
-
current(<the array alias defined in count.field>). Misalnya,current('Microsoft.Test/resource/enumeratedArray[*]'). -
current(). Diperbolehkan hanya ketikafield countekspresi bukan anak dari ekspresi laincount. Mengembalikan nilai yang sama dengan contoh sebelumnya. -
current(<alias of a property of the array member>). Misalnya,current('Microsoft.Test/resource/enumeratedArray[*].property').
Contoh jumlah bidang
Contoh 1: Memeriksa apakah array kosong
{
"count": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*]"
},
"equals": 0
}
Contoh 2: Memeriksa bahwa hanya satu elemen dalam array yang memenuhi persyaratan kondisi
{
"count": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*]",
"where": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*].description",
"equals": "My unique description"
}
},
"equals": 1
}
Contoh 3: Memastikan setidaknya satu anggota array agar sesuai dengan ekspresi kondisi
{
"count": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*]",
"where": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*].description",
"equals": "My common description"
}
},
"greaterOrEquals": 1
}
Contoh 4: Memeriksa apakah semua anggota array objek memenuhi ekspresi kondisi
{
"count": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*]",
"where": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*].description",
"equals": "description"
}
},
"equals": "[length(field('Microsoft.Network/networkSecurityGroups/securityRules[*]'))]"
}
Contoh 5: Memeriksa apakah setidaknya satu anggota array cocok dengan beberapa properti dalam ekspresi kondisi
{
"count": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*]",
"where": {
"allOf": [
{
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*].direction",
"equals": "Inbound"
},
{
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*].access",
"equals": "Allow"
},
{
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*].destinationPortRange",
"equals": "3389"
}
]
}
},
"greater": 0
}
Contoh 6: Menggunakan fungsi current() di dalam kondisi where untuk mengakses nilai anggota array yang saat ini dijumlahkan dalam fungsi templat. Kondisi ini memeriksa apakah jaringan virtual berisi awalan alamat yang tidak berada di bawah rentang CIDR 10.0.0.0/24.
{
"count": {
"field": "Microsoft.Network/virtualNetworks/addressSpace.addressPrefixes[*]",
"where": {
"value": "[ipRangeContains('10.0.0.0/24', current('Microsoft.Network/virtualNetworks/addressSpace.addressPrefixes[*]'))]",
"equals": false
}
},
"greater": 0
}
Contoh 7: Menggunakan fungsi field() di dalam kondisi where untuk mengakses nilai anggota array yang saat ini dijumlahkan. Kondisi ini memeriksa apakah jaringan virtual berisi awalan alamat yang tidak berada di bawah rentang CIDR 10.0.0.0/24.
{
"count": {
"field": "Microsoft.Network/virtualNetworks/addressSpace.addressPrefixes[*]",
"where": {
"value": "[ipRangeContains('10.0.0.0/24', first(field(('Microsoft.Network/virtualNetworks/addressSpace.addressPrefixes[*]')))]",
"equals": false
}
},
"greater": 0
}
Contoh hitung nilai
Contoh 1: Memeriksa apakah nama sumber daya cocok dengan salah satu pola nama yang diberikan.
{
"count": {
"value": [
"prefix1_*",
"prefix2_*"
],
"name": "pattern",
"where": {
"field": "name",
"like": "[current('pattern')]"
}
},
"greater": 0
}
Contoh 2: Memeriksa apakah nama sumber daya cocok dengan salah satu pola nama yang diberikan. Fungsi current() tidak menentukan nama indeks. Hasilnya sama dengan contoh sebelumnya.
{
"count": {
"value": [
"prefix1_*",
"prefix2_*"
],
"where": {
"field": "name",
"like": "[current()]"
}
},
"greater": 0
}
Contoh 3: Memeriksa apakah nama sumber daya cocok dengan salah satu pola nama yang diberikan yang disediakan oleh parameter array.
{
"count": {
"value": "[parameters('namePatterns')]",
"name": "pattern",
"where": {
"field": "name",
"like": "[current('pattern')]"
}
},
"greater": 0
}
Contoh 4: Memeriksa apakah salah satu awalan alamat jaringan virtual tidak berada di bawah daftar awalan yang disetujui.
{
"count": {
"field": "Microsoft.Network/virtualNetworks/addressSpace.addressPrefixes[*]",
"where": {
"count": {
"value": "[parameters('approvedPrefixes')]",
"name": "approvedPrefix",
"where": {
"value": "[ipRangeContains(current('approvedPrefix'), current('Microsoft.Network/virtualNetworks/addressSpace.addressPrefixes[*]'))]",
"equals": true
},
},
"equals": 0
}
},
"greater": 0
}
Contoh 5: Memeriksa apakah semua aturan NSG yang dipesan ditentukan dalam NSG. Properti aturan NSG yang dipesan didefinisikan dalam parameter array yang berisi objek.
Nilai parameter:
[
{
"priority": 101,
"access": "deny",
"direction": "inbound",
"destinationPortRange": 22
},
{
"priority": 102,
"access": "deny",
"direction": "inbound",
"destinationPortRange": 3389
}
]
Kebijakan:
{
"count": {
"value": "[parameters('reservedNsgRules')]",
"name": "reservedNsgRule",
"where": {
"count": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*]",
"where": {
"allOf": [
{
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*].priority",
"equals": "[current('reservedNsgRule').priority]"
},
{
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*].access",
"equals": "[current('reservedNsgRule').access]"
},
{
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*].direction",
"equals": "[current('reservedNsgRule').direction]"
},
{
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*].destinationPortRange",
"equals": "[current('reservedNsgRule').destinationPortRange]"
}
]
}
},
"equals": 1
}
},
"equals": "[length(parameters('reservedNsgRules'))]"
}
Fungsi kebijakan
Fungsi dapat digunakan untuk memperkenalkan lebih banyak logika ke dalam aturan kebijakan. Fungsi diselesaikan dalam aturan kebijakan definisi kebijakan dan dalam nilai parameter yang ditetapkan ke definisi kebijakan dalam inisiatif.
Semua fungsi templat Resource Manager tersedia untuk digunakan dalam aturan kebijakan, kecuali fungsi dan fungsi yang ditentukan pengguna berikut:
copyIndex()dateTimeAdd()dateTimeFromEpochdateTimeToEpochdeployment()environment()extensionResourceId()-
lambda()Untuk informasi selengkapnya, buka lambda listAccountSas()listKeys()listSecrets()list*managementGroup()newGuid()pickZones()providers()reference()resourceId()subscriptionResourceId()tenantResourceId()tenant()variables()
Catatan
Fungsi-fungsi ini masih tersedia dalam details.deployment.properties.template bagian penyebaran templat dalam deployIfNotExists definisi kebijakan.
Fungsi berikut tersedia untuk digunakan dalam aturan kebijakan, tetapi berbeda dari penggunaan dalam templat Azure Resource Manager (templat ARM):
-
utcNow()- Tidak seperti templat ARM, properti ini dapat digunakan di luar defaultValue.- Mengembalikan string yang diatur ke tanggal dan waktu saat ini dalam format DateTime Universal ISO 8601
yyyy-MM-ddTHH:mm:ss.fffffffZ.
- Mengembalikan string yang diatur ke tanggal dan waktu saat ini dalam format DateTime Universal ISO 8601
Fungsi berikut ini hanya tersedia dalam aturan kebijakan:
addDays(dateTime, numberOfDaysToAdd)-
dateTime: String [Wajib] - String dalam formatyyyy-MM-ddTHH:mm:ss.FFFFFFFZUniversal ISO 8601 DateTime . -
numberOfDaysToAdd: Bilangan bulat [Wajib] - Jumlah hari untuk ditambahkan.
-
field(fieldName)-
fieldName: String [Wajib] - Nama bidang yang akan diambil - Mengembalikan nilai bidang tersebut dari sumber daya yang dievaluasi oleh
ifkondisi. -
fieldterutama digunakan denganauditIfNotExistsdandeployIfNotExistsuntuk mereferensikan bidang pada sumber daya yang sedang dievaluasi. Contoh penggunaan ini dapat dilihat dalam contoh DeployIfNotExists.
-
requestContext().apiVersion- Mengembalikan versi API dari permintaan yang memicu evaluasi kebijakan (misalnya:
2021-09-01). Nilai ini adalah versi API yang digunakan dalam permintaan PUT/PATCH untuk evaluasi pada pembuatan/pembaruan sumber daya. Versi API terbaru selalu digunakan selama evaluasi kepatuhan pada sumber daya yang ada.
- Mengembalikan versi API dari permintaan yang memicu evaluasi kebijakan (misalnya:
requestContext().identityidtyp: mengembalikan identitas pemanggil permintaan yang memicu evaluasi kebijakan (misalnya:user). Nilai yang diterima meliputi:app, ,usernull.{ "value": "[tryGet(requestContext().identity, 'idtyp')]", "equals": "user" }appid: mengembalikan ID aplikasi klien tempat permintaan dijalankan dari (misalnya: ID aplikasi portal){ "value": "[tryGet(requestContext().identity, 'appid')]", "notIn": "[parameters('allowedClientAppIds')]" }acrs: mengembalikan apakah permintaan diautentikasi dengan autentikasi multifaktor (MFA){ "value": "p1", "notIn": "[split(requestContext().identity.acrs, ',')]" }http: //schemas.microsoft.com/identity/claims/objectidentifier: mengembalikan ID pengguna (atau objek) yang terkait dengan permintaan."value": "[tryGet(requestContext().identity, 'http: //schemas.microsoft.com/identity/claims/objectidentifier')]", "in": ['userId']
Peringatan
Saat Anda menggunakan fungsi requestContext().identity, mesin kebijakan tersebut menandai kebijakan sebagai NotApplicable untuk evaluasi atau pemindaian kepatuhan. Akibatnya, hasil kepatuhan untuk kebijakan tersebut terlihat sebagai NotApplicable, tetapi penegakan efek seperti Deny, DeployIfNotExists dan Modify masih terjadi pada waktu permintaan.
policy()Mengembalikan informasi berikut tentang kebijakan yang sedang dievaluasi. Properti dapat diakses dari objek yang dikembalikan (misalnya:
[policy().assignmentId]).{ "assignmentId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/providers/Microsoft.Authorization/policyAssignments/myAssignment", "definitionId": "/providers/Microsoft.Authorization/policyDefinitions/34c877ad-507e-4c82-993e-3452a6e0ad3c", "setDefinitionId": "/providers/Microsoft.Authorization/policySetDefinitions/42a694ed-f65e-42b2-aa9e-8052e9740a92", "definitionReferenceId": "StorageAccountNetworkACLs" }
ipRangeContains(range, targetRange)-
range: String [Wajib] - String yang menentukan rentang alamat IP untuk memeriksa apakah targetRange berada di dalamnya. -
targetRange: String [Wajib] - String yang menentukan rentang alamat IP untuk divalidasi seperti yang disertakan dalam rentang. - Mengembalikan boolean untuk apakah range rentang alamat IP berisi rentang alamat IP targetRange. Rentang kosong, atau campuran antara keluarga IP tidak diperbolehkan dan mengakibatkan kegagalan evaluasi.
Format yang didukung:
- Alamat IP tunggal (contoh:
10.0.0.0,2001:0DB8::3:FFFE) - Rentang CIDR (contoh:
10.0.0.0/24,2001:0DB8::/110) - Rentang yang ditentukan oleh alamat IP awal dan akhir (contoh:
192.168.0.1-192.168.0.9,2001:0DB8::-2001:0DB8::3:FFFF)
-
current(indexName)- Fungsi khusus yang mungkin hanya digunakan di dalam ekspresi hitungan.
Contoh fungsi kebijakan
Contoh aturan kebijakan ini menggunakan resourceGroup fungsi sumber daya untuk mendapatkan name properti , dikombinasikan dengan concat fungsi array dan objek untuk membangun like kondisi yang memberlakukan nama sumber daya untuk memulai dengan nama grup sumber daya.
{
"if": {
"not": {
"field": "name",
"like": "[concat(resourceGroup().name,'*')]"
}
},
"then": {
"effect": "deny"
}
}
Batas aturan kebijakan
Batas yang diberlakukan selama penulisan
Batasan pada struktur aturan kebijakan diberlakukan selama penulisan atau penugasan kebijakan. Upaya untuk membuat atau menetapkan definisi kebijakan yang melebihi batas ini gagal.
| Batas | Nilai | Detil-detil |
|---|---|---|
Ekspresi kondisi dalam if kondisi |
4096 | |
Ekspresi kondisional dalam blok then |
128 | Berlaku untuk existenceCondition kebijakan auditIfNotExists dan deployIfNotExists |
| Fungsi kebijakan per aturan kebijakan | 2048 | |
| Jumlah parameter dari fungsi kebijakan | 128 | Contoh: [function('parameter1', 'parameter2', ...)] |
| Kedalaman fungsi kebijakan bersarang | 64 | Contoh: [function(nested1(nested2(...)))] |
| Panjang string ekspresi fungsi kebijakan | 81920 | Contoh: panjang "[function(....)]" |
Field count ekspresi per larik |
5 | |
Value count ekspresi per aturan kebijakan |
10 | |
Value count jumlah perulangan ekspresi |
100 | Ekspresi berlapis Value count juga menyertakan jumlah perulangan ekspresi induk. |
Batas yang diberlakukan selama evaluasi
Batas ukuran objek yang diproses oleh fungsi kebijakan selama evaluasi kebijakan. Batasan ini tidak selalu dapat diberlakukan selama penulisan karena bergantung pada konten yang dievaluasi. Contohnya:
{
"field": "name",
"equals": "[concat(field('stringPropertyA'), field('stringPropertyB'))]"
}
Panjang string yang dibuat oleh concat() fungsi tergantung pada nilai properti dalam sumber daya yang dievaluasi.
| Batas | Nilai | Contoh |
|---|---|---|
| Panjang untai (karakter) yang dikembalikan oleh fungsi | 131072 | [concat(field('longString1'), field('longString2'))] |
| Kedalaman objek kompleks yang disediakan sebagai parameter ke, atau dikembalikan oleh fungsi | 128 | [union(field('largeObject1'), field('largeObject2'))] |
| Jumlah node objek kompleks yang disediakan sebagai parameter ke, atau dikembalikan oleh fungsi | 32768 | [concat(field('largeArray1'), field('largeArray2'))] |
Peringatan
Kebijakan yang melebihi batas selama evaluasi akan menjadi kebijakan deny dengan efektif dan dapat memblokir permintaan masuk.
Saat menulis kebijakan dengan fungsi yang kompleks, perhatikan batasan ini dan uji kebijakan Anda terhadap sumber daya yang berpotensi melebihinya.
Langkah berikutnya
- Untuk informasi selengkapnya tentang struktur definisi kebijakan, buka dasar, parameter, dan alias.
- Untuk inisiatif, buka struktur definisi inisiatif.
- Tinjau contoh pada Azure Policy samples.
- Tinjau Memahami efek kebijakan.
- Memahami cara membuat kebijakan secara terprogram.
- Pelajari cara mendapatkan data kepatuhan.
- Pelajari cara memulihkan sumber daya yang tidak sesuai syarat.
- Tinjau apa itu grup manajemen dengan Organisasi sumber daya Anda dengan grup manajemen Azure.