Aturan kebijakan struktur definisi Azure Policy
Aturan kebijakan terdiri dari if
dan then
blok. if
Di blok, Anda menentukan 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.
then
Di blok, Anda menentukan efek yang terjadi ketika if
kondisi 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 menginversi not
hasil 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 menyarangkan operator logis. Contoh berikut menunjukkan not
operasi yang ditumpuk dalam allOf
operasi.
"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
, , greater
lessOrEquals
, dan greaterOrEquals
, jika jenis properti tidak cocok dengan jenis kondisi, kesalahan akan muncul. Perbandingan string dibuat menggunakan InvariantCultureIgnoreCase
.
Saat menggunakan kondisi like
dan notLike
, Anda menyediakan karakter kartubebas (*
) dalam nilai . Nilai tidak boleh memiliki lebih dari satu karakter kartubebas.
Saat menggunakan match
kondisi dan notMatch
, berikan hashtag (#
) untuk mencocokkan digit, tanda tanya (?
) untuk huruf, dan titik (.
) untuk mencocokkan karakter apa pun, dan karakter lain yang cocok dengan karakter aktual tersebut. Meskipun match
dan notMatch
peka huruf besar/kecil, semua kondisi lain yang mengevaluasi tidak stringValue
peka huruf besar/kecil. Alternatif yang tidak peka huruf besar/kecil 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:
name
fullName
- 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
kind
type
location
- Bidang lokasi dinormalisasi untuk mendukung berbagai format. Misalnya,
East US 2
dianggap 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/11111111-1111-1111-1111-111111111111/resourceGroups/myRG/providers/Microsoft.KeyVault/vaults/myVault
identity.type
- Mengembalikan jenis identitas terkelola yang diaktifkan pada sumber daya.
tags
tags['<tagName>']
- Sintaks braket ini mendukung nama tag yang memiliki tanda baca seperti tanda hubung, titik, atau spasi.
- Di mana
tagName
adalah nama tag untuk memvalidasi kondisi. - Contoh:
tags['Acct.CostCenter']
di manaAcct.CostCenter
adalah nama tag.
tags['''<tagName>''']
- Sintaks braket ini mendukung nama tag yang memiliki apostrof di dalamnya dengan melakukan escape dengan apostrof ganda.
- Di mana
tagName
adalah nama tag untuk memvalidasi kondisi. - Contoh:
tags['''My.Apostrophe.Tag''']
di mana'My.Apostrophe.Tag'
adalah nama tag.
Catatan
tags.<tagName>
,tags[tagName]
, dantags[tag.with.dots]
masih merupakan cara yang dapat diterima untuk mendeklarasikan bidang tag. Namun, ekspresi yang lebih disukai adalah yang tercantum di atas.alias properti - untuk daftar, lihat Alias.
Catatan
Dalam
field
ekspresi yang mengacu pada alias[*]
array setiap elemen dalam array dievaluasi satu per satu dengan logisand
antar elemen. Untuk informasi selengkapnya, lihat Merujuk properti sumber daya array.
Kondisi yang menggunakan field
ekspresi dapat menggantikan sintaks "source": "action"
definisi kebijakan warisan , yang digunakan untuk bekerja untuk operasi tulis. Misalnya, ini 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 untuk doNotEnforce
mencegah dampak evaluasi yang gagal pada sumber daya baru atau yang diperbarui saat menguji dan memvalidasi definisi kebijakan baru.
Contoh nilai
Contoh aturan kebijakan ini menggunakan value
untuk membandingkan hasil resourceGroup()
fungsi dan properti yang dikembalikan name
dengan like
kondisi *netrg
. Aturan ini menolak sumber daya apa pun yang Microsoft.Network/*
type
bukan dari 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 equals
true
berlapis . 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 di atas menggunakan substring() untuk membandingkan tiga karakter pertama dengan abc
name
. Jika name
lebih pendek dari tiga karakter, substring()
fungsi menghasilkan kesalahan. Kesalahan ini menyebabkan 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()
nilai dengan kurang dari tiga karakter. Jika name
terlalu pendek, nilai "tidak dimulai dengan abc" dikembalikan sebagai gantinya dan dibandingkan abc
dengan . Sumber daya dengan nama pendek yang tidak dimulai dengan abc
masih gagal aturan kebijakan, tetapi 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 memeriksa apakah 'setidaknya salah satu dari', 'persis salah satu dari', 'semua', atau 'tidak ada' anggota array yang memenuhi suatu 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 secara individual untuk setiap anggota array alias array daricount.field
. Jika properti ini tidak disediakan, semua anggota array dengan jalur 'bidang' 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.condition
(wajib): Nilai dibandingkan dengan jumlah item yang memenuhi ekspresi kondisicount.where
. Kondisi numerik harus digunakan.
Untuk detail selengkapnya tentang cara bekerja dengan properti array di Azure Policy, termasuk penjelasan terperinci tentang bagaimana field count
ekspresi dievaluasi, lihat Mereferensikan 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 saatcount
ekspresi tidak berada dalam anak 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.value
Jika 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 dijumlahkan oleh count
evaluasi ekspresi.
Penggunaan jumlah nilai
current(<index name defined in count.name>)
. Misalnya:current('arrayMember')
.current()
. Diperbolehkan hanya ketikavalue count
ekspresi bukan anak dari ekspresi laincount
. Mengembalikan nilai yang sama seperti di atas.
Jika nilai yang dikembalikan oleh panggilan adalah objek, pengakses properti didukung. Misalnya: current('objectArrayMember').property
.
Penggunaan jumlah bidang
current(<the array alias defined in count.field>)
. Contohnya,current('Microsoft.Test/resource/enumeratedArray[*]')
.current()
. Diperbolehkan hanya ketikafield count
ekspresi bukan anak dari ekspresi laincount
. Mengembalikan nilai yang sama seperti di atas.current(<alias of a property of the array member>)
. Contohnya,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 hanya satu anggota array untuk memenuhi ekspresi kondisi
{
"count": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*]",
"where": {
"field": "Microsoft.Network/networkSecurityGroups/securityRules[*].description",
"equals": "My unique description"
}
},
"equals": 1
}
Contoh 3: Memeriksa setidaknya satu anggota array untuk memenuhi 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 jumlah 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 logika tambahan ke dalam aturan kebijakan. Mereka 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 berikut dan fungsi yang ditentukan pengguna:
copyIndex()
dateTimeAdd()
dateTimeFromEpoch
dateTimeToEpoch
deployment()
environment()
extensionResourceId()
lambda()
Untuk informasi selengkapnya, buka lambdalistAccountSas()
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 ini 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 format Universal ISO 8601 DateTime 'yyyy-MM-ddTHH:mm:ss. FFFFFFFZ'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 sedang dievaluasi oleh kondisi If.
field
terutama digunakan denganauditIfNotExists
dandeployIfNotExists
untuk 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:
policy()
Mengembalikan informasi berikut tentang kebijakan yang sedang dievaluasi. Properti dapat diakses dari objek yang dikembalikan (misalnya:
[policy().assignmentId]
).{ "assignmentId": "/subscriptions/11111111-1111-1111-1111-111111111111/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 hanya dapat digunakan dalam ekspresi jumlah.
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 akan gagal.
Batas | Nilai | Detail tambahan |
---|---|---|
Ekspresi kondisi dalam if kondisi |
4096 | |
Ekspresi kondisi di then blok |
128 | Berlaku untuk existenceCondition kebijakan auditIfNotExists dan deployIfNotExists |
Fungsi kebijakan per aturan kebijakan | 2048 | |
Jumlah fungsi kebijakan parameter | 128 | Contoh: [function('parameter1', 'parameter2', ...)] |
Kedalaman fungsi kebijakan bersarang | 64 | Contoh: [function(nested1(nested2(...)))] |
Panjang untai (karakter) ekspresi fungsi kebijakan | 81920 | Contoh: panjang "[function(....)]" |
Field count ekspresi per array |
5 | |
Value count ekspresi per aturan kebijakan |
10 | |
Value count jumlah perulangan ekspresi |
100 | Untuk ekspresi berlapis Value count , ini juga menyertakan jumlah iterasi ekspresi induk |
Batas yang diberlakukan selama evaluasi
Batasan 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 di atas selama evaluasi akan secara efektif menjadi deny
kebijakan 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 sampel pada sampel Azure Policy.
- 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 Atur sumber daya Anda dengan grup manajemen Azure.