Kebijakan pembuat untuk properti array pada sumber daya Azure
Properti Azure Resource Manager umumnya ditentukan sebagai string dan boolean. Saat ada hubungan satu-ke-banyak, properti kompleks malah ditentukan sebagai array. Dalam Azure Policy, array digunakan dengan beberapa cara berbeda:
- Jenis parameter definisi, untuk menyediakan beberapa opsi
- Bagian dari aturan kebijakan menggunakan kondisi in atau notIn
- Bagian dari aturan kebijakan yang menghitung berapa banyak anggota array yang memenuhi kondisi
- Di efek tambahkan dan ubah untuk memperbarui array yang sudah ada
Artikel ini membahas setiap penggunaan oleh Azure Policy dan menyediakan beberapa definisi contoh.
Array parameter
Menentukan array parameter
Menentukan parameter sebagai array memungkinkan fleksibilitas kebijakan saat lebih dari satu nilai diperlukan. Definisi kebijakan ini memungkinkan setiap lokasi tunggal untuk parameter allowedLocations dan default ke eastus2:
"parameters": {
"allowedLocations": {
"type": "string",
"metadata": {
"description": "The list of allowed locations for resources.",
"displayName": "Allowed locations",
"strongType": "location"
},
"defaultValue": "eastus2"
}
}
Karena jenis adalah string, hanya satu nilai yang dapat diatur saat menetapkan kebijakan. Jika kebijakan ini ditetapkan, sumber daya dalam cakupan hanya diperbolehkan dalam satu wilayah Azure. Sebagian besar definisi kebijakan perlu mengizinkan daftar opsi yang disetujui, seperti mengizinkan eastus2, eastus, dan westus2.
Untuk membuat definisi kebijakan guna mengizinkan beberapa opsi, gunakan jenisarray. Kebijakan yang sama dapat ditulis ulang sebagai berikut:
"parameters": {
"allowedLocations": {
"type": "array",
"metadata": {
"description": "The list of allowed locations for resources.",
"displayName": "Allowed locations",
"strongType": "location"
},
"defaultValue": [
"eastus2"
],
"allowedValues": [
"eastus2",
"eastus",
"westus2"
]
}
}
Catatan
Setelah definisi kebijakan disimpan, properti jenis pada parameter tidak dapat diubah.
Definisi parameter baru ini membutuhkan lebih dari satu nilai selama penugasan kebijakan. Dengan properti array allowedValues yang ditentukan, nilai yang tersedia selama penugasan dibatasi lebih lanjut pada daftar pilihan yang telah ditentukan sebelumnya. Penggunaan allowedValues bersifat opsional.
Meneruskan nilai ke array parameter selama penugasan
Saat menetapkan kebijakan melalui portal Microsoft Azure, parameter jenisarray ditampilkan sebagai kotak teks tunggal. Petunjuknya mengatakan "Gunakan ; untuk memisahkan nilai. (misalnya London;New York)". Untuk meneruskan nilai lokasi yang diizinkan dari eastus2, eastus, dan westus2 ke parameter, gunakan string berikut:
eastus2;eastus;westus2
Format untuk nilai parameter berbeda saat menggunakan Azure CLI, Azure PowerShell, atau REST API. Nilai diteruskan melalui string JSON yang juga menyertakan nama parameter.
{
"allowedLocations": {
"value": [
"eastus2",
"eastus",
"westus2"
]
}
}
Untuk menggunakan string ini dengan setiap SDK, gunakan perintah berikut:
- Azure CLI: Perintah az policy assignment create dengan parameter param
- Azure PowerShell: Cmdlet New-AzPolicyAssignment dengan parameter PolicyParameter
- REST API: Dalam PUTbuat operasi sebagai bagian dari Isi Permintaan sebagai nilai properti properties.parameters
Menggunakan array dalam kondisi
In dan notIn
Kondisi in
dan notIn
hanya berfungsi dengan nilai array. Kondisi tersebut memeriksa keberadaan nilai dalam array. Array dapat berupa array JSON harfiah atau referensi ke parameter array. Contohnya:
{
"field": "tags.environment",
"in": [ "dev", "test" ]
}
{
"field": "location",
"notIn": "[parameters('allowedLocations')]"
}
Jumlah nilai
Ekspresi jumlah nilai menghitung berapa banyak anggota array yang memenuhi kondisi. Ini menyediakan cara untuk mengevaluasi kondisi yang sama beberapa kali, menggunakan nilai yang berbeda pada setiap perulangan. Misalnya, kondisi berikut memeriksa apakah nama sumber daya cocok dengan pola apa pun dari array pola:
{
"count": {
"value": [ "test*", "dev*", "prod*" ],
"name": "pattern",
"where": {
"field": "name",
"like": "[current('pattern')]"
}
},
"greater": 0
}
Untuk mengevaluasi ekspresi, Azure Policy mengevaluasi kondisi where
tiga kali, sekali untuk setiap anggota [ "test*", "dev*", "prod*" ]
, menghitung berapa kali dievaluasi ke true
. Pada setiap perulangan, nilai anggota array saat ini dipasangkan dengan nama indeks pattern
yang ditentukan oleh count.name
. Nilai ini kemudian dapat direferensikan di dalam kondisi where
dengan memanggil fungsi templat khusus: current('pattern')
.
Perulangan | Nilai yang dikembalikan current('pattern') |
---|---|
1 | "test*" |
2 | "dev*" |
3 | "prod*" |
Kondisi ini berlaku hanya jika jumlah yang dihasilkan lebih besar dari 0.
Untuk membuat kondisi di atas lebih generik, gunakan referensi parameter sebagai ganti dari array harfiah:
{
"count": {
"value": "[parameters('patterns')]",
"name": "pattern",
"where": {
"field": "name",
"like": "[current('pattern')]"
}
},
"greater": 0
}
Saat ekspresi jumlah nilai tidak berada di ekspresi jumlah lainnya, count.name
bersifat opsional dan fungsi current()
dapat digunakan tanpa argumen apa pun:
{
"count": {
"value": "[parameters('patterns')]",
"where": {
"field": "name",
"like": "[current()]"
}
},
"greater": 0
}
Jumlah nilai juga mendukung array objek kompleks, memungkinkan kondisi yang lebih kompleks. Misalnya, kondisi berikut menentukan nilai tag yang diinginkan untuk setiap pola nama dan memeriksa apakah nama sumber daya cocok dengan pola, tetapi tidak memiliki nilai tag yang diperlukan:
{
"count": {
"value": [
{ "pattern": "test*", "envTag": "dev" },
{ "pattern": "dev*", "envTag": "dev" },
{ "pattern": "prod*", "envTag": "prod" },
],
"name": "namePatternRequiredTag",
"where": {
"allOf": [
{
"field": "name",
"like": "[current('namePatternRequiredTag').pattern]"
},
{
"field": "tags.env",
"notEquals": "[current('namePatternRequiredTag').envTag]"
}
]
}
},
"greater": 0
}
Untuk contoh yang berguna, lihat contoh jumlah nilai.
Mereferensikan properti sumber daya array
Banyak kasus penggunaan memerlukan bekerja dengan properti array dalam sumber daya yang dievaluasi. Beberapa skenario memerlukan referensi seluruh array (misalnya, memeriksa panjangnya). Lainnya memerlukan penerapan kondisi untuk setiap anggota array individu (misalnya, pastikan bahwa semua aturan firewall memblokir akses dari internet). Memahami berbagai cara Azure Policy dapat mereferensikan properti sumber daya, dan bagaimana referensi ini berperilaku saat merujuk ke properti array adalah kunci untuk menulis kondisi yang mencakup skenario ini.
Mereferensikan properti sumber daya
Properti sumber daya dapat direferensikan oleh Azure Policy menggunakan alias Ada dua cara untuk mereferensikan nilai properti sumber daya dalam Azure Policy:
Gunakan kondisi bidang untuk memeriksa apakah semua properti sumber daya yang dipilih memenuhi kondisi. Contoh:
{ "field" : "Microsoft.Test/resourceType/property", "equals": "value" }
Gunakan fungsi
field()
untuk mengakses nilai properti. Contoh:{ "value": "[take(field('Microsoft.Test/resourceType/property'), 7)]", "equals": "prefix_" }
Kondisi bidang memiliki perilaku "semua" implisit. Jika alias mewakili kumpulan nilai, alias akan memeriksa apakah semua nilai individual memenuhi kondisi tersebut. Fungsi field()
mengembalikan nilai yang diwakili oleh alias apa adanya, yang kemudian dapat dimanipulasi oleh fungsi templat lainnya.
Mereferensikan bidang array
Array resource properties are represented by two different types of aliases. Satu alias 'normal' dan alias array yang memiliki [*]
terlampir padanya:
Microsoft.Test/resourceType/stringArray
Microsoft.Test/resourceType/stringArray[*]
Mereferensikan array
Alias pertama menunjukkan nilai tunggal, nilai properti stringArray
dari konten permintaan. Karena nilai properti tersebut adalah array, properti tersebut tidak berguna dalam kondisi kebijakan. Contohnya:
{
"field": "Microsoft.Test/resourceType/stringArray",
"equals": "..."
}
Kondisi ini membandingkan seluruh array stringArray
dengan nilai string tunggal. Sebagian besar kondisi, termasuk equals
, hanya menerima nilai string, sehingga tidak ada banyak penggunaan dalam membandingkan array dengan string. Skenario utama di mana referensi properti array berguna adalah saat memeriksa apakah itu ada:
{
"field": "Microsoft.Test/resourceType/stringArray",
"exists": "true"
}
Dengan fungsi field()
, nilai yang dikembalikan adalah array dari konten permintaan, yang kemudian dapat digunakan dengan salah satu fungsi templat yang didukung yang menerima argumen array. Misalnya, kondisi berikut memeriksa apakah panjangnya stringArray
lebih besar dari 0:
{
"value": "[length(field('Microsoft.Test/resourceType/stringArray'))]",
"greater": 0
}
Mereferensikan kumpulan anggota array
Alias yang menggunakan sintaksis [*]
mewakili kumpulan nilai properti yang dipilih dari properti array, yang berbeda dari memilih properti array itu sendiri. Dalam kasus Microsoft.Test/resourceType/stringArray[*]
, ia mengembalikan kumpulan yang memiliki semua anggota stringArray
. Seperti yang disebutkan sebelumnya, kondisi field
memeriksa bahwa semua properti sumber daya yang dipilih memenuhi kondisi, oleh karena itu kondisi berikut ini benar hanya jika semua anggota stringArray
sama dengan '"value"'.
{
"field": "Microsoft.Test/resourceType/stringArray[*]",
"equals": "value"
}
Jika array kosong, kondisi akan mengevaluasi ke true karena tidak ada anggota array yang melanggar. Dalam skenario ini, disarankan untuk menggunakan ekspresi hitungan sebagai gantinya. Jika array berisi objek, alias [*]
dapat digunakan untuk memilih nilai properti tertentu dari setiap anggota array. Contoh:
{
"field": "Microsoft.Test/resourceType/objectArray[*].property",
"equals": "value"
}
Kondisi ini benar jika nilai semua properti property
di objectArray
sama dengan "value"
. Untuk contoh lainnya, lihat Contoh alias [*] tambahan.
Saat menggunakan fungsi field()
untuk mereferensikan alias array, nilai yang dikembalikan adalah array dari semua nilai yang dipilih. Perilaku ini berarti bahwa kasus penggunaan umum dari fungsi field()
, kemampuan untuk menerapkan fungsi templat ke nilai properti sumber daya, terbatas. Satu-satunya fungsi templat yang dapat digunakan dalam kasus ini adalah fungsi yang menerima argumen array. Misalnya, dimungkinkan untuk mendapatkan panjang array dengan [length(field('Microsoft.Test/resourceType/objectArray[*].property'))]
. Namun, skenario yang lebih kompleks seperti menerapkan fungsi templat ke setiap anggota array dan membandingkannya dengan nilai yang diinginkan hanya dimungkinkan saat menggunakan ekspresi count
. Untuk informasi selengkapnya, lihat Ekspresi jumlah bidang.
Untuk meringkas, lihat contoh konten sumber daya berikut dan nilai yang dipilih yang dikembalikan oleh berbagai alias:
{
"tags": {
"env": "prod"
},
"properties":
{
"stringArray": [ "a", "b", "c" ],
"objectArray": [
{
"property": "value1",
"nestedArray": [ 1, 2 ]
},
{
"property": "value2",
"nestedArray": [ 3, 4 ]
}
]
}
}
Saat menggunakan kondisi bidang pada contoh konten sumber daya, hasilnya adalah sebagai berikut:
Alias | Nilai yang dipilih |
---|---|
Microsoft.Test/resourceType/missingArray |
null |
Microsoft.Test/resourceType/missingArray[*] |
Kumpulan nilai kosong. |
Microsoft.Test/resourceType/missingArray[*].property |
Kumpulan nilai kosong. |
Microsoft.Test/resourceType/stringArray |
["a", "b", "c"] |
Microsoft.Test/resourceType/stringArray[*] |
"a" , "b" , "c" |
Microsoft.Test/resourceType/objectArray[*] |
{ "property": "value1", "nestedArray": [ 1, 2 ] } ,{ "property": "value2", "nestedArray": [ 3, 4 ] } |
Microsoft.Test/resourceType/objectArray[*].property |
"value1" , "value2" |
Microsoft.Test/resourceType/objectArray[*].nestedArray |
[ 1, 2 ] , [ 3, 4 ] |
Microsoft.Test/resourceType/objectArray[*].nestedArray[*] |
1 , 2 , 3 , 4 |
Saat menggunakan fungsi field()
pada contoh konten sumber daya, hasilnya adalah sebagai berikut:
Ekspresi | Nilai yang Dikembalikan |
---|---|
[field('Microsoft.Test/resourceType/missingArray')] |
"" |
[field('Microsoft.Test/resourceType/missingArray[*]')] |
[] |
[field('Microsoft.Test/resourceType/missingArray[*].property')] |
[] |
[field('Microsoft.Test/resourceType/stringArray')] |
["a", "b", "c"] |
[field('Microsoft.Test/resourceType/stringArray[*]')] |
["a", "b", "c"] |
[field('Microsoft.Test/resourceType/objectArray[*]')] |
[{ "property": "value1", "nestedArray": [ 1, 2 ] }, { "property": "value2", "nestedArray": [ 3, 4 ] }] |
[field('Microsoft.Test/resourceType/objectArray[*].property')] |
["value1", "value2"] |
[field('Microsoft.Test/resourceType/objectArray[*].nestedArray')] |
[[ 1, 2 ], [ 3, 4 ]] |
[field('Microsoft.Test/resourceType/objectArray[*].nestedArray[*]')] |
[1, 2, 3, 4] |
Ekspresi jumlah bidang
Ekspresi jumlah bidang menghitung berapa banyak anggota array yang memenuhi kondisi dan membandingkan jumlah tersebut dengan nilai target. Count
lebih intuitif dan serbaguna untuk mengevaluasi array dibandingkan dengan kondisi field
. Sintaksnya adalah:
{
"count": {
"field": <[*] alias>,
"where": <optional policy condition expression>
},
"equals|greater|less|any other operator": <target value>
}
Saat digunakan tanpa kondisi where
, count
hanya mengembalikan panjang array. Dengan contoh konten sumber daya dari bagian sebelumnya, ekspresi count
berikut dievaluasi menjadi true
karena stringArray
memiliki tiga anggota:
{
"count": {
"field": "Microsoft.Test/resourceType/stringArray[*]"
},
"equals": 3
}
Perilaku ini juga berfungsi dengan array berlapis. Misalnya, ekspresi count
berikut dievaluasi menjadi true
karena ada empat anggota array dalam array nestedArray
:
{
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*].nestedArray[*]"
},
"greaterOrEquals": 4
}
Kekuatan count
dalam kondisi where
. Saat ditentukan, Azure Policy menghitung anggota array dan mengevaluasi masing-masing terhadap kondisi tersebut, menghitung berapa banyak anggota array yang dievaluasi menjadi true
. Secara khusus, dalam setiap iterasi evaluasi kondisi where
, Kebijakan Azure memilih anggota array tunggal i dan mengevaluasi konten sumber daya terhadap kondisi where
seolah-olah i adalah satu-satunya anggota array. Hanya memiliki satu anggota array yang tersedia dalam setiap perulangan memberikan cara untuk menerapkan kondisi kompleks pada setiap anggota array individu.
Contoh:
{
"count": {
"field": "Microsoft.Test/resourceType/stringArray[*]",
"where": {
"field": "Microsoft.Test/resourceType/stringArray[*]",
"equals": "a"
}
},
"equals": 1
}
Untuk mengevaluasi ekspresi count
, Azure Policy mengevaluasi kondisi where
tiga kali, sekali untuk setiap anggota stringArray
, menghitung berapa kali dievaluasi menjadi true
.
Saat kondisi where
merujuk ke anggota array Microsoft.Test/resourceType/stringArray[*]
, daripada memilih semua anggota stringArray
, kondisi tersebut hanya akan memilih satu anggota array setiap kali:
Perulangan | Nilai Microsoft.Test/resourceType/stringArray[*] yang dipilih |
Hasil evaluasi where |
---|---|---|
1 | "a" |
true |
2 | "b" |
false |
3 | "c" |
false |
count
mengembalikan 1
.
Berikut adalah ekspresi yang lebih kompleks:
{
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*]",
"where": {
"allOf": [
{
"field": "Microsoft.Test/resourceType/objectArray[*].property",
"equals": "value2"
},
{
"field": "Microsoft.Test/resourceType/objectArray[*].nestedArray[*]",
"greater": 2
}
]
}
},
"equals": 1
}
Perulangan | Nilai yang dipilih | Hasil evaluasi where |
---|---|---|
1 | Microsoft.Test/resourceType/objectArray[*].property =>"value1" Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =>1 , 2 |
false |
2 | Microsoft.Test/resourceType/objectArray[*].property =>"value2" Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =>3 , 4 |
true |
count
mengembalikan 1
.
Fakta bahwa ekspresi where
dievaluasi terhadap seluruh konten permintaan (dengan perubahan hanya pada anggota array yang saat ini sedang dijumlahkan) berarti bahwa kondisi where
juga dapat merujuk ke bidang di luar array:
{
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*]",
"where": {
"field": "tags.env",
"equals": "prod"
}
},
"equals": 0
}
Perulangan | Nilai yang dipilih | Hasil evaluasi where |
---|---|---|
1 | tags.env =>"prod" |
true |
2 | tags.env =>"prod" |
true |
Ekspresi jumlah berlapis dapat digunakan untuk menerapkan kondisi ke bidang array berlapis. Misalnya, kondisi berikut memeriksa bahwa array objectArray[*]
memiliki tepat dua anggota dengan nestedArray[*]
yang berisi satu atau beberapa anggota:
{
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*]",
"where": {
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*].nestedArray[*]"
},
"greaterOrEquals": 1
}
},
"equals": 2
}
Perulangan | Nilai yang dipilih | Hasil evaluasi hitungan berlapis |
---|---|---|
1 | Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =>1 , 2 |
nestedArray[*] memiliki 2 anggota =>true |
2 | Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =>3 , 4 |
nestedArray[*] memiliki 2 anggota =>true |
Karena kedua anggota objectArray[*]
memiliki array turunan nestedArray[*]
dengan dua anggota, ekspresi jumlah terluar mengembalikan 2
.
Contoh yang lebih kompleks: periksa apakah array objectArray[*]
memiliki tepat dua anggota dengan nestedArray[*]
dengan anggota mana pun yang sama dengan 2
atau 3
:
{
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*]",
"where": {
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*].nestedArray[*]",
"where": {
"field": "Microsoft.Test/resourceType/objectArray[*].nestedArray[*]",
"in": [ 2, 3 ]
}
},
"greaterOrEquals": 1
}
},
"equals": 2
}
Perulangan | Nilai yang dipilih | Hasil evaluasi hitungan berlapis |
---|---|---|
1 | Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =>1 , 2 |
nestedArray[*] berisi 2 =>true |
2 | Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =>3 , 4 |
nestedArray[*] berisi 3 =>true |
Karena kedua anggota objectArray[*]
memiliki array turunan nestedArray[*]
yang berisi 2
atau 3
, ekspresi jumlah terluar mengembalikan 2
.
Catatan
Ekspresi jumlah bidang berlapis hanya dapat merujuk ke array berlapis. Misalnya, ekspresi jumlah yang merujuk ke Microsoft.Test/resourceType/objectArray[*]
dapat memiliki jumlah berlapis yang menargetkan array berlapis Microsoft.Test/resourceType/objectArray[*].nestedArray[*]
, tetapi tidak dapat memiliki penargetan ekspresi jumlah berlapis Microsoft.Test/resourceType/stringArray[*]
.
Mengakses anggota array saat ini dengan fungsi templat
Saat menggunakan fungsi templat, gunakan fungsi current()
untuk mengakses nilai anggota array saat ini atau nilai salah satu propertinya. Untuk mengakses nilai anggota array saat ini, teruskan alias yang ditentukan dalam count.field
atau salah satu alias turunannya sebagai argumen ke fungsi current()
. Contohnya:
{
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*]",
"where": {
"value": "[current('Microsoft.Test/resourceType/objectArray[*].property')]",
"like": "value*"
}
},
"equals": 2
}
Perulangan | Nilai yang dikembalikan current() |
Hasil evaluasi where |
---|---|---|
1 | Nilai property pada anggota pertama objectArray[*] : value1 |
true |
2 | Nilai property pada anggota pertama objectArray[*] : value2 |
true |
Fungsi bidang di dalam kondisi where
Fungsi field()
uga dapat digunakan untuk mengakses nilai anggota array saat ini selama ekspresi jumlah tidak berada dalam kondisi keberadaan (fungsi field()
selalu merujuk ke sumber daya yang dievaluasi dalam kondisi if). Perilaku field()
saat merujuk ke array yang dievaluasi berdasarkan pada konsep berikut:
- Alias array diselesaikan menjadi kumpulan nilai yang dipilih dari semua anggota array.
- Fungsi
field()
mereferensikan alias array mengembalikan array dengan nilai yang dipilih. - Mereferensikan alias array terhitung di dalam kondisi
where
mengembalikan kumpulan dengan nilai tunggal yang dipilih dari anggota array yang dievaluasi dalam perulangan saat ini.
Perilaku ini berarti bahwa jika merujuk ke anggota array yang dihitung dengan fungsi field()
di dalam kondisi where
, ia mengembalikan array dengan satu anggota. Meskipun perilaku ini mungkin tidak intuitif, hal tersebut konsisten dengan gagasan bahwa alias array selalu mengembalikan kumpulan properti yang dipilih. Berikut contohnya:
{
"count": {
"field": "Microsoft.Test/resourceType/stringArray[*]",
"where": {
"field": "Microsoft.Test/resourceType/stringArray[*]",
"equals": "[field('Microsoft.Test/resourceType/stringArray[*]')]"
}
},
"equals": 0
}
Perulangan | Nilai ekspresi | Hasil evaluasi where |
---|---|---|
1 | Microsoft.Test/resourceType/stringArray[*] =>"a" [field('Microsoft.Test/resourceType/stringArray[*]')] =>[ "a" ] |
false |
2 | Microsoft.Test/resourceType/stringArray[*] =>"b" [field('Microsoft.Test/resourceType/stringArray[*]')] =>[ "b" ] |
false |
3 | Microsoft.Test/resourceType/stringArray[*] =>"c" [field('Microsoft.Test/resourceType/stringArray[*]')] =>[ "c" ] |
false |
Oleh karena itu, saat ada kebutuhan untuk mengakses nilai alias array terhitung dengan fungsi field()
, cara untuk melakukannya adalah dengan membungkusnya dengan fungsi templat first()
:
{
"count": {
"field": "Microsoft.Test/resourceType/stringArray[*]",
"where": {
"field": "Microsoft.Test/resourceType/stringArray[*]",
"equals": "[first(field('Microsoft.Test/resourceType/stringArray[*]'))]"
}
}
}
Perulangan | Nilai ekspresi | Hasil evaluasi where |
---|---|---|
1 | Microsoft.Test/resourceType/stringArray[*] =>"a" [first(field('Microsoft.Test/resourceType/stringArray[*]'))] =>"a" |
true |
2 | Microsoft.Test/resourceType/stringArray[*] =>"b" [first(field('Microsoft.Test/resourceType/stringArray[*]'))] =>"b" |
true |
3 | Microsoft.Test/resourceType/stringArray[*] =>"c" [first(field('Microsoft.Test/resourceType/stringArray[*]'))] =>"c" |
true |
Untuk contoh yang berguna, lihat contoh jumlah Bidang.
Mengubah array
Tambahkan dan ubah mengubah properti di sumber daya selama pembuatan atau pembaruan. Saat bekerja dengan properti array, perilaku efek ini tergantung pada apakah operasi mencoba mengubah alias [*] atau tidak:
Catatan
Menggunakan efek modify
dengan alias saat ini dalam pratinjau.
Alias | Efek | Hasil |
---|---|---|
Microsoft.Storage/storageAccounts/networkAcls.ipRules |
append |
Azure Policy menambahkan seluruh array yang ditentukan dalam detail efek jika hilang. |
Microsoft.Storage/storageAccounts/networkAcls.ipRules |
modify dengan operasi add |
Azure Policy menambahkan seluruh array yang ditentukan dalam detail efek jika hilang. |
Microsoft.Storage/storageAccounts/networkAcls.ipRules |
modify dengan operasi addOrReplace |
Azure Policy menambahkan seluruh array yang ditentukan dalam detail efek jika hilang atau mengganti array yang sudah ada. |
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*] |
append |
Azure Policy menambahkan anggota array yang ditentukan dalam detail efek. |
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*] |
modify dengan operasi add |
Azure Policy menambahkan anggota array yang ditentukan dalam detail efek. |
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*] |
modify dengan operasi addOrReplace |
Azure Policy menghapus semua anggota array yang sudah ada dan menambahkan anggota array yang ditentukan dalam detail efek. |
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].action |
append |
Azure Policy menambahkan nilai ke properti action setiap anggota array. |
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].action |
modify dengan operasi add |
Azure Policy menambahkan nilai ke properti action setiap anggota array. |
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].action |
modify dengan operasi addOrReplace |
Azure Policy menambahkan atau mengganti properti action yang sudah ada dari setiap anggota array. |
Untuk informasi selengkapnya, lihat contoh tambahan.
Contoh alias [*] tambahan
Disarankan untuk menggunakan ekspresi jumlah bidang untuk memeriksa apakah 'semua' atau 'salah satu' anggota array dalam konten permintaan memenuhi syarat. Namun, untuk beberapa kondisi sederhana dimungkinkan untuk mencapai hasil yang sama dengan menggunakan pengakses bidang dengan alias array seperti yang dijelaskan dalam Mereferensi kumpulan anggota array. Pola ini dapat berguna dalam aturan kebijakan yang melebihi batas ekspresi jumlah yang diizinkan. Berikut adalah contoh untuk kasus penggunaan umum:
Contoh aturan kebijakan untuk tabel skenario di bawah ini:
"policyRule": {
"if": {
"allOf": [
{
"field": "Microsoft.Storage/storageAccounts/networkAcls.ipRules",
"exists": "true"
},
<-- Condition (see table below) -->
]
},
"then": {
"effect": "[parameters('effectType')]"
}
}
Array ipRules adalah sebagai berikut untuk tabel skenario di bawah ini:
"ipRules": [
{
"value": "127.0.0.1",
"action": "Allow"
},
{
"value": "192.168.1.1",
"action": "Allow"
}
]
Untuk setiap contoh kondisi di bawah ini, ganti <field>
dengan "field": "Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].value"
.
Hasil berikut adalah hasil dari kombinasi kondisi dan contoh aturan kebijakan dan array nilai yang ada di atas:
Kondisi | Hasil | Skenario | Penjelasan |
---|---|---|---|
{<field>,"notEquals":"127.0.0.1"} |
Tidak ada | Tidak ada yang cocok | Satu elemen array mengevaluasi sebagai false (127.0.0.1 != 127.0.0.1) dan satu sebagai true (127.0.0.1 != 192.168.1.1), sehingga kondisi notEquals adalah false dan efeknya tidak dipicu. |
{<field>,"notEquals":"10.0.4.1"} |
Efek Azure Policy | Tidak ada yang cocok | Kedua elemen array mengevaluasi sebagai true (10.0.4.1 != 127.0.0.1 dan 10.0.4.1 != 192.168.1.1), sehingga kondisi notEquals adalah true dan efeknya dipicu. |
"not":{<field>,"notEquals":"127.0.0.1" } |
Efek Azure Policy | Satu atau beberapa kecocokan | Satu elemen array mengevaluasi sebagai false (127.0.0.1 != 127.0.0.1) dan satu sebagai true (127.0.0.1 != 192.168.1.1), sehingga kondisi notEquals adalah false. Operator logis mengevaluasi sebagai true (bukanfalse), sehingga efeknya dipicu. |
"not":{<field>,"notEquals":"10.0.4.1"} |
Tidak ada | Satu atau beberapa kecocokan | Kedua elemen array mengevaluasi sebagai true (10.0.4.1 != 127.0.0.1 dan 10.0.4.1 != 192.168.1.1), sehingga kondisi notEquals adalah true. Operator logis mengevaluasi sebagai false (bukantrue), sehingga efeknya tidak dipicu. |
"not":{<field>,"Equals":"127.0.0.1"} |
Efek Azure Policy | Tidak semua cocok | Satu elemen array mengevaluasi sebagai true (127.0.0.1 == 127.0.0.1) dan satu sebagai false (127.0.0.1 == 192.168.1.1), sehingga kondisi Equals adalah false. Operator logis mengevaluasi sebagai true (bukanfalse), sehingga efeknya dipicu. |
"not":{<field>,"Equals":"10.0.4.1"} |
Efek Azure Policy | Tidak semua cocok | Kedua elemen array mengevaluasi sebagai false (10.0.4.1 == 127.0.0.1 dan 10.0.4.1 == 192.168.1.1), sehingga kondisi Equals adalah false. Operator logis mengevaluasi sebagai true (bukanfalse), sehingga efeknya dipicu. |
{<field>,"Equals":"127.0.0.1"} |
Tidak ada | Semua cocok | Satu elemen array mengevaluasi sebagai false (127.0.0.1 != 127.0.0.1) dan satu sebagai true (127.0.0.1 != 192.168.1.1), sehingga kondisi Equals adalah false dan efeknya tidak dipicu. |
{<field>,"Equals":"10.0.4.1"} |
Tidak ada | Semua cocok | Kedua elemen array mengevaluasi sebagai false (10.0.4.1 == 127.0.0.1 dan 10.0.4.1 == 192.168.1.1), sehingga kondisi Equals adalah false dan efeknya tidak dipicu. |
Langkah berikutnya
- Tinjau contoh pada sampel Azure Policy.
- Tinjau Struktur definisi Azure Policy.
- Tinjau Memahami efek kebijakan.
- Pahami cara membuat kebijakan secara terprogram.
- Pelajari cara memulihkan sumber daya yang tidak sesuai syarat.
- Tinjau apa itu grup manajemen dengan Menata sumber daya Anda dengan grup manajemen Azure.