Struktur definisi Azure Policy

Azure Policy menetapkan konvensi untuk sumber daya. Definisi kebijakan menjelaskan kondisi kepatuhan sumber daya dan efek yang harus diambil jika kondisi terpenuhi. Kondisi membandingkan bidang properti sumber daya atau nilai dengan nilai yang diperlukan. Bidang properti sumber daya diakses menggunakan alias. Saat bidang properti sumber daya adalah array, alias array khusus dapat digunakan untuk memilih nilai dari semua anggota array dan menerapkan kondisi ke masing-masing array. Pelajari selengkapnya tentang kondisi.

Dengan mendefinisikan konvensi, Anda dapat mengontrol biaya dan mengelola sumber daya Anda dengan lebih mudah. Misalnya, Anda dapat menentukan bahwa hanya jenis komputer virtual tertentu yang diizinkan. Atau, Anda dapat mengharuskan sumber daya untuk memiliki tag tertentu. Penetapan kebijakan diwariskan oleh sumber daya anak. Jika penetapan kebijakan diterapkan ke grup sumber daya, kebijakan tersebut berlaku untuk semua sumber daya dalam grup sumber daya tersebut.

Skema policyRule definisi kebijakan ditemukan di sini: https://schema.management.azure.com/schemas/2020-10-01/policyDefinition.json

Anda menggunakan JSON untuk membuat definisi kebijakan. Definisi kebijakan berisi elemen untuk:

  • nama tampilan
  • description
  • mode
  • metadata
  • parameter
  • aturan kebijakan
    • evaluasi logika
    • efek

Misalnya, JSON berikut ini menampilkan kebijakan yang membatasi tempat sumber daya disebarkan:

{
    "properties": {
        "displayName": "Allowed locations",
        "description": "This policy enables you to restrict the locations your organization can specify when deploying resources.",
        "mode": "Indexed",
        "metadata": {
            "version": "1.0.0",
            "category": "Locations"
        },
        "parameters": {
            "allowedLocations": {
                "type": "array",
                "metadata": {
                    "description": "The list of locations that can be specified when deploying resources",
                    "strongType": "location",
                    "displayName": "Allowed locations"
                },
                "defaultValue": [ "westus2" ]
            }
        },
        "policyRule": {
            "if": {
                "not": {
                    "field": "location",
                    "in": "[parameters('allowedLocations')]"
                }
            },
            "then": {
                "effect": "deny"
            }
        }
    }
}

Bawaan dan pola Azure Policy ada pada sampel Azure Policy.

Nama tampilan dan deskripsi

Anda menggunakan displayName dan description untuk mengidentifikasi definisi kebijakan dan menyediakan konteks terkait kapan kebijakan tersebut digunakan. displayName memiliki panjang maksimum 128 karakter dan description memiliki panjang maksimum 512 karakter.

Catatan

Selama pembuatan atau pembaruan definisi kebijakan, id, type, dan name ditentukan oleh properti di luar JSON dan tidak diperlukan dalam file JSON. Mengambil definisi kebijakan melalui SDK mengembalikan properti id, type, dan name sebagai bagian dari JSON, tetapi masing-masing adalah informasi baca-saja yang terkait dengan definisi kebijakan.

Jenis

Meskipun properti type tidak dapat diatur, ada tiga nilai yang dikembalikan oleh SDK dan terlihat di portal:

  • Builtin: Definisi kebijakan ini disediakan dan dikelola oleh Microsoft.
  • Custom: Semua definisi kebijakan yang dibuat oleh pelanggan memiliki nilai ini.
  • Static: Menunjukkan definisi kebijakan Kepatuhan Terhadap Peraturan dengan Kepemilikan Microsoft. Hasil kepatuhan untuk definisi kebijakan ini adalah hasil audit pihak ketiga pada infrastruktur Microsoft. Di portal Azure, nilai ini terkadang ditampilkan sebagai dikelola Microsoft. Untuk informasi selengkapnya, lihat Tanggung jawab bersama di cloud.

Mode

Mode dikonfigurasi tergantung pada apakah kebijakan menargetkan properti Azure Resource Manager atau properti Penyedia Sumber Daya.

Mode Resource Manager

Mode menentukan jenis sumber daya mana yang dievaluasi untuk definisi kebijakan. Mode yang didukung adalah:

  • all: mengevaluasi grup sumber daya, langganan, dan semua jenis sumber daya
  • indexed: hanya mengevaluasi jenis sumber daya yang mendukung tag dan lokasi

Misalnya, sumber daya Microsoft.Network/routeTables mendukung tag dan lokasi dan dievaluasi di kedua mode. Namun, sumber daya Microsoft.Network/routeTables/routes tidak dapat diberi tag dan tidak dievaluasi dalam mode Indexed.

Sebaiknya atur mode ke all dalam sebagian besar kasus. Semua definisi kebijakan yang dibuat melalui portal menggunakan mode all. Jika Anda menggunakan PowerShell atau Azure CLI, Anda dapat menentukan parameter mode secara manual. Jika definisi kebijakan tidak menyertakan nilai mode, maka nilai defaultnya adalah all di Azure PowerShell dan null di Azure CLI. Mode null sama dengan menggunakan indexed untuk mendukung kompatibilitas mundur.

indexed harus digunakan saat membuat kebijakan yang memberlakukan tag atau lokasi. Meskipun tidak diperlukan, ini mencegah sumber daya yang tidak mendukung tag dan lokasi agar tidak muncul sebagai tidak mematuhi di hasil kepatuhan. Pengecualiannya adalah grup sumber daya dan langganan. Definisi kebijakan yang memberlakukan lokasi atau tag pada grup sumber daya atau langganan harus mengatur mode ke all dan secara khusus menargetkan jenis Microsoft.Resources/subscriptions/resourceGroups atau Microsoft.Resources/subscriptions. Misalnya, lihat Pola: Tag - Sampel #1. Untuk daftar sumber daya yang mendukung tag, lihat Dukungan tag untuk sumber daya Azure.

Mode Penyedia Sumber Daya

Mode Penyedia Sumber Daya berikut ini didukung penuh:

Mode Penyedia Sumber Daya berikut saat ini didukung sebagai pratinjau:

  • Microsoft.ManagedHSM.Datauntuk mengelola kunci HSM Terkelola menggunakan Azure Policy.
  • Microsoft.DataFactory.Datauntuk menggunakan Azure Policy untuk menolak Azure Data Factory nama domain lalu lintas keluar yang tidak ditentukan dalam daftar izinkan.

Catatan

Kecuali dinyatakan secara eksplisit, mode Penyedia Sumber Daya hanya mendukung definisi kebijakan bawaan, dan pengecualian tidak didukung di tingkat komponen.

Metadata

Properti metadata opsional menyimpan informasi tentang definisi kebijakan. Pelanggan dapat menentukan properti dan nilai apa pun yang berguna bagi organisasi mereka di metadata. Namun, ada beberapa properti umum yang digunakan oleh Azure Policy dan bawaan. Setiap properti metadata memiliki batas 1024 karakter.

Properti metadata umum

  • version (string): Melacak detail tentang versi konten definisi kebijakan.
  • category (string): Menentukan di bawah kategori mana di portal Azure definisi kebijakan ditampilkan.
  • preview (boolean): Bendera benar atau salah jika definisi kebijakan adalah pratinjau.
  • deprecated(boolean): Bendera benar atau salah jika definisi kebijakan telah ditandai sebagai tidak digunakan lagi.
  • portalReview (string): Menentukan apakah parameter harus ditinjau di portal, terlepas dari input yang diperlukan.

Catatan

Layanan Azure Policy menggunakan properti version, preview, dan deprecated untuk menyampaikan tingkat perubahan pada definisi kebijakan bawaan atau inisiatif dan status. Format version adalah: {Major}.{Minor}.{Patch}. Status-status tertentu seperti tidak digunakan lagi atau pratinjau, ditambahkan ke properti version atau di properti lain sebagai boolean. Untuk informasi selengkapnya tentang cara bawaan versi Azure Policy, lihat Penerapan versi bawaan. Untuk mempelajari lebih lanjut tentang apa artinya kebijakan tidak digunakan lagi atau di pratinjau, lihat Pratinjau dan kebijakan yang tidak digunakan lagi.

Parameter

Parameter membantu menyederhanakan manajemen kebijakan Anda dengan mengurangi jumlah definisi kebijakan. Anggaplah parameter sebagai bidang pada formulir - name, address, city, state. Parameter ini selalu tetap sama, tetapi nilainya berubah berdasarkan individu yang mengisi formulir. Parameter bekerja dengan cara yang sama saat membuat kebijakan. Dengan menyertakan parameter dalam definisi kebijakan, Anda dapat menggunakan kembali kebijakan tersebut untuk skenario yang berbeda menggunakan nilai yang berbeda.

Catatan

Parameter dapat ditambahkan ke definisi yang ada dan yang ditetapkan. Parameter baru harus menyertakan properti defaultValue. Hal ini mencegah penugasan kebijakan atau inisiatif yang ada agar tidak langsung dibuat tidak valid.

Properti parameter

Parameter memiliki properti berikut yang digunakan dalam definisi kebijakan:

  • name: Nama parameter Anda. Digunakan oleh fungsi penyebaran parameters dalam aturan kebijakan. Untuk informasi selengkapnya, lihat menggunakan nilai parameter.
  • type: Menentukan apakah parameter adalah string, array, object, boolean, integer, float, atau datetime.
  • metadata: Mendefinisikan subproperti yang utamanya digunakan oleh portal Microsoft Azure untuk menampilkan informasi yang mudah digunakan:
    • description: Penjelasan tentang untuk apa parameter digunakan. Dapat digunakan untuk memberikan contoh nilai yang dapat diterima.
    • displayName: Nama yang mudah diingat yang ditampilkan di portal untuk parameter.
    • strongType: (Opsional) Digunakan saat menetapkan definisi kebijakan melalui portal. Menyediakan daftar sadar konteks. Untuk informasi selengkapnya, lihat strongType.
    • assignPermissions: (Opsional) Atur sebagai true agar portal Azure membuat penetapan peran selama penetapan kebijakan. Properti ini berguna jika Anda ingin menetapkan izin di luar cakupan penugasan. Ada satu penetapan peran per definisi peran dalam kebijakan (atau per definisi peran dalam semua kebijakan dalam inisiatif). Nilai parameter harus berupa sumber daya atau cakupan yang valid.
  • defaultValue: (Opsional) Atur nilai parameter dalam tugas jika tidak ada nilai yang diberikan. Diperlukan saat memperbarui definisi kebijakan yang sudah ditetapkan. Untuk parameter jenis objek, nilai harus cocok dengan skema yang sesuai.
  • allowedValues: (Opsional) Menyediakan array nilai yang diterima parameter selama penugasan. Perbandingan nilai yang diperbolehkan peka huruf besar/kecil. Untuk parameter jenis objek, nilai harus cocok dengan skema yang sesuai.
  • schema: (Opsional) Menyediakan validasi input parameter selama penugasan menggunakan skema JSON yang ditentukan sendiri. Properti ini hanya didukung untuk parameter jenis objek dan mengikuti implementasi Skema Json.NET 2019-09. Anda dapat mempelajari selengkapnya penggunaan skema di https://json-schema.org/ dan menguji skema draf di https://www.jsonschemavalidator.net/.

Sampel Parameter

Contoh 1

Sebagai contoh, Anda dapat menentukan definisi kebijakan untuk membatasi lokasi tempat sumber daya dapat diterapkan. Parameter untuk definisi kebijakan tersebut dapat berupa allowedLocations. Parameter ini akan digunakan oleh setiap penugasan definisi kebijakan untuk membatasi nilai yang diterima. Penggunaan strongType memberikan pengalaman yang ditingkatkan saat menyelesaikan penugasan melalui portal:

"parameters": {
    "allowedLocations": {
        "type": "array",
        "metadata": {
            "description": "The list of allowed locations for resources.",
            "displayName": "Allowed locations",
            "strongType": "location"
        },
        "defaultValue": [ "westus2" ],
        "allowedValues": [
            "eastus2",
            "westus2",
            "westus"
        ]
    }
}

Sampel input untuk parameter jenis array ini (tanpa strongType) pada waktu penugasan dapat berupa ["westus", "eastus2"].

Contoh 2

Dalam skenario yang lebih canggih, Anda dapat menentukan kebijakan yang mengharuskan pod kluster Kubernetes untuk menggunakan label yang ditentukan. Parameter untuk definisi kebijakan tersebut dapat berupa labelSelector, yang akan digunakan oleh setiap penugasan definisi kebijakan untuk menentukan sumber daya Kubernetes yang dimaksud berdasarkan kunci label dan nilai:

"parameters": {
    "labelSelector": {
        "type": "Object",
        "metadata": {
            "displayName": "Kubernetes label selector",
            "description": "Label query to select Kubernetes resources for policy evaluation. An empty label selector matches all Kubernetes resources."
        },
        "defaultValue": {},
        "schema": {
            "description": "A label selector is a label query over a set of resources. The result of matchLabels and matchExpressions are ANDed. An empty label selector matches all resources.",
            "type": "object",
            "properties": {
                "matchLabels": {
                    "description": "matchLabels is a map of {key,value} pairs.",
                    "type": "object",
                    "additionalProperties": {
                        "type": "string"
                    },
                    "minProperties": 1
                },
                "matchExpressions": {
                    "description": "matchExpressions is a list of values, a key, and an operator.",
                    "type": "array",
                    "items": {
                        "type": "object",
                        "properties": {
                            "key": {
                                "description": "key is the label key that the selector applies to.",
                                "type": "string"
                            },
                            "operator": {
                                "description": "operator represents a key's relationship to a set of values.",
                                "type": "string",
                                "enum": [
                                    "In",
                                    "NotIn",
                                    "Exists",
                                    "DoesNotExist"
                                ]
                            },
                            "values": {
                                "description": "values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty.",
                                "type": "array",
                                "items": {
                                    "type": "string"
                                }
                            }
                        },
                        "required": [
                            "key",
                            "operator"
                        ],
                        "additionalProperties": false
                    },
                    "minItems": 1
                }
            },
            "additionalProperties": false
        }
    },
}

Sampel input untuk parameter jenis objek ini pada waktu penugasan akan berada dalam format JSON, divalidasi oleh skema yang ditentukan, dan dapat berupa:

{
    "matchLabels": {
        "poolID": "abc123",
        "nodeGroup": "Group1",
        "region": "southcentralus"
    },
    "matchExpressions": [
        {
            "key": "name",
            "operator": "In",
            "values": ["payroll", "web"]
        },
        {
            "key": "environment",
            "operator": "NotIn",
            "values": ["dev"]
        }
    ]
}

Menggunakan nilai parameter

Dalam aturan kebijakan, Anda mereferensikan parameter dengan sintaks fungsi parameters berikut:

{
    "field": "location",
    "in": "[parameters('allowedLocations')]"
}

Sampel ini mereferensikan parameter allowedLocations yang ditunjukkan dalam properti parameter.

strongType

Dalam properti metadata, Anda dapat menggunakan strongType untuk menyediakan daftar opsi multipilih dalam portal Microsoft Azure. strongType dapat menjadi jenis sumber daya yang didukung atau nilai yang diperbolehkan. Untuk menentukan apakah jenis sumber daya valid untuk strongType, gunakan Get-AzResourceProvider. Format untuk jenis sumber dayastrongType adalah <Resource Provider>/<Resource Type>. Contohnya:Microsoft.Network/virtualNetworks/subnets

Beberapa jenis sumber daya yang tidak dikembalikan oleh Get-AzResourceProvider didukung. Jenis-jenis tersebut adalah:

  • Microsoft.RecoveryServices/vaults/backupPolicies

Nilai jenis non sumber daya yang diperbolehkan untuk strongType adalah:

  • location
  • resourceTypes
  • storageSkus
  • vmSKUs
  • existingResourceGroups

Lokasi definisi

Saat membuat inisiatif atau kebijakan, perlu untuk menentukan lokasi definisi. Lokasi definisi harus merupakan grup manajemen atau langganan. Lokasi ini menentukan cakupan yang dapat ditetapkan oleh inisiatif atau kebijakan. Sumber daya harus merupakan anggota langsung dari atau anak dalam hierarki lokasi definisi yang akan ditargetkan untuk penugasan.

Jika lokasi definisi adalah:

  • Langganan - Hanya sumber daya dalam langganan tersebut yang dapat ditetapkan definisi kebijakan.
  • Grup manajemen - Hanya sumber daya dalam grup manajemen anak dan langganan anak yang dapat ditetapkan definisi kebijakan. Jika Anda berencana menerapkan definisi kebijakan ke beberapa langganan, lokasi tersebut harus merupakan grup manajemen yang berisi setiap langganan.

Untuk informasi selengkapnya, lihat Memahami cakupan dalam Azure Policy.

Aturan kebijakan

Aturan kebijakan terdiri dari blok If dan Then. Di blok If, 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.

Di blok Then, Anda menentukan efek yang terjadi ketika kondisi If terpenuhi.

{
    "if": {
        <condition> | <logical operator>
    },
    "then": {
        "effect": "deny | audit | modify | append | auditIfNotExists | deployIfNotExists | disabled"
    }
}

Operator logika

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 tersebut. Sintaks allOf (mirip dengan logika operasi And) mengharuskan agar semua kondisi benar. Sintaks anyOf (mirip dengan logika operasi Or) mengharuskan agar satu atau beberapa kondisi benar.

Anda dapat menyarangkan operator logis. Contoh berikut menunjukkan operasi not yang disarangkan 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, lessOrEquals, greater, 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 * kartubebas dalam nilai. Nilainya seharusnya tidak boleh memiliki lebih dari satu * kartubebas.

Saat menggunakan kondisi match dan notMatch, sediakan # untuk mencocokkan digit, ? untuk huruf, . agar sesuai dengan karakter apa pun, dan karakter lainnya agar cocok dengan karakter aktual tersebut. Meskipun match dan notMatch peka huruf besar/kecil, semua kondisi lain yang mengevaluasi stringValue tidak peka huruf besar/kecil. Alternatif yang tidak peka huruf besar/kecil tersedia dalam matchInsensitively dan notMatchInsensitively.

Bidang

Kondisi yang mengevaluasi apakah nilai properti dalam payload permintaan sumber daya memenuhi kriteria tertentu dapat dibentuk menggunakan ekspresi bidang. Bidang berikut ini didukung:

  • name
  • fullName
    • Mengembalikan nama lengkap sumber daya. Nama lengkap sumber daya adalah nama sumber daya yang telah ditentukan oleh nama sumber daya induk (misalnya "myServer/myDatabase").
  • kind
  • type
  • location
    • Bidang lokasi dinormalisasi untuk mendukung berbagai format. Misalnya, East US 2 dianggap sama dengan eastus2.
    • Gunakan global untuk sumber daya yang bersifat agnostik terhadap lokasi.
  • id
    • Mengembalikan ID sumber daya dari sumber daya yang sedang dievaluasi.
    • Contoh: /subscriptions/06be863d-0996-4d56-be22-384767287aa2/resourceGroups/myRG/providers/Microsoft.KeyVault/vaults/myVault
  • identity.type
  • 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 mana Acct.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.
  • alias properti - untuk daftar, lihat Alias.

Catatan

tags.<tagName>, tags[tagName], dan tags[tag.with.dots] masih merupakan cara yang dapat diterima untuk mendeklarasikan bidang tag. Namun, ekspresi yang lebih disukai adalah yang tercantum di atas.

Catatan

Dalam ekspresi bidang yang merujuk ke [*] alias setiap elemen dalam array dievaluasi secara individual dengan dan logis di antar elemen. Untuk informasi selengkapnya, lihat Merujuk properti sumber daya array.

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 parameter tagName. Jika tag tersebut tidak ada, efek modifikasi digunakan untuk menambahkan tag menggunakan nilai set tag bernama yang sama yang diatur pada grup sumber daya induk sumber daya yang diaudit dengan fungsi pencarian resourcegroup().

{
    "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 ekspresi nilai. 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 tolak yang implisit. Untuk mengetahui informasi selengkapnya, lihat menghindari kegagalan templat. Gunakan enforcementMode dari DoNotEnforce untuk 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 fungsi resourceGroup() dan properti name dikembalikan ke kondisi like*netrg. Aturan ini menyangkal sumber daya apa pun yang bukan dari Microsoft.Network/*tipe dalam grup sumber daya apa pun yang namanya berakhir dengan *netrg.

{
    "if": {
        "allOf": [{
                "value": "[resourceGroup().name]",
                "like": "*netrg"
            },
            {
                "field": "type",
                "notLike": "Microsoft.Network/*"
            }
        ]
    },
    "then": {
        "effect": "deny"
    }
}

Contoh aturan kebijakan ini menggunakan nilai untuk memeriksa apakah hasil dari beberapa fungsi bersarang sama dengantrue. 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 dalam nilai memungkinkan banyak fungsi bersarang yang kompleks. Jika hasil fungsi templat adalah kesalahan, evaluasi kebijakan akan gagal. Evaluasi yang gagal adalah tolak yang implisit. Contoh nilai 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 nama dengan abc. Jika nama lebih pendek dari tiga karakter, fungsi substring() menghasilkan kesalahan. Kesalahan ini menyebabkan kebijakan menjadi efek tolak.

Sebagai gantinya, gunakan fungsi if() untuk memeriksa apakah tiga karakter pertama nama sama dengan abc tanpa mengizinkan nama yang 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 nama sebelum mencoba mendapatkan substring() pada nilai yang kurang dari tiga karakter. Jika nama 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 gagal dalam aturan kebijakan, tetapi tidak lagi menyebabkan kesalahan selama evaluasi.

Hitungan

Kondisi yang menghitung jumlah anggota array yang memenuhi kriteria tertentu yang dapat dibentuk menggunakan ekspresi jumlah. Skenario umum memeriksa apakah 'setidaknya salah satu dari', 'persis salah satu dari', 'semua', atau 'tidak ada' anggota array yang memenuhi suatu kondisi. Jumlah mengevaluasi setiap anggota array untuk ekspresi kondisi dan menjumlahkan hasil true, yang kemudian dibandingkan dengan operator ekspresi.

Jumlah bidang

Menghitung berapa banyak anggota array dalam payload permintaan yang memenuhi ekspresi kondisi. Struktur ekspresi jumlah bidang adalah:

{
    "count": {
        "field": "<[*] alias>",
        "where": {
            /* condition expression */
        }
    },
    "<condition>": "<compare the count of true condition expression array members to this value>"
}

Properti berikut digunakan dengan jumlah bidang:

  • count.field (wajib): Berisi jalur ke array dan harus merupakan alias array.
  • count.where (opsional): Ekspresi kondisi untuk mengevaluasi secara individual untuk setiap anggota array [*]alias dari count.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.
  • <kondisi> (wajib): Nilai dibandingkan dengan jumlah item yang memenuhi ekspresi kondisi count.where. Kondisi numerik harus digunakan.

Untuk detail selengkapnya tentang cara bekerja dengan properti array di Azure Policy, termasuk penjelasan terperinci tentang bagaimana ekspresi jumlah bidang dievaluasi, lihat Merujuk properti sumber daya array.

Jumlah nilai

Menghitung jumlah anggota array yang memenuhi kondisi. Array dapat berupa array harfiah atau referensi ke parameter array. Struktur ekspresi jumlah nilai 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 jumlah nilai:

  • count.value (wajib): Array yang akan dievaluasi.
  • count.name (wajib): Nama indeks, terdiri dari huruf dan digit berbahasa Inggris. Menentukan nama untuk nilai anggota array yang dievaluasi dalam perulangan saat ini. Nama digunakan untuk mereferensikan nilai saat ini di dalam kondisi count.where. Opsional saat ekspresi jumlah tidak berada dalam anak dari ekspresi jumlah lain. Ketika tidak disediakan, nama indeks secara implisit diatur ke "default".
  • count.where (opsional): Ekspresi kondisi untuk mengevaluasi secara individual untuk setiap anggota array dari 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.
  • <kondisi> (wajib): Nilai dibandingkan dengan jumlah item yang memenuhi count.where ekspresi kondisi. 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 jumlah.

Penggunaan jumlah nilai

  • current(<index name defined in count.name>). Misalnya: current('arrayMember').
  • current(). Hanya diperbolehkan saat ekspresi jumlah nilai bukan anak dari ekspresi jumlah lain. 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(). Hanya diperbolehkan saat ekspresi jumlah bidang bukan anak dari ekspresi jumlah lain. 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'))]"
}

Efek

Azure Policy mendukung jenis efek berikut ini:

  • Append: menambahkan kumpulan bidang yang ditentukan ke permintaan
  • Audit: menghasilkan peristiwa peringatan dalam log aktivitas tetapi tidak gagal dalam permintaan
  • AuditIfNotExists: menghasilkan peristiwa peringatan dalam log aktivitas jika sumber daya terkait tidak ada
  • Deny: menghasilkan peristiwa dalam log aktivitas dan gagal dalam permintaan
  • DeployIfNotExists: menyebarkan sumber daya terkait jika belum ada
  • Disabled: tidak mengevaluasi sumber daya untuk kepatuhan terhadap aturan kebijakan
  • Modifikasi: menambahkan, memperbarui, atau menghapus kumpulan bidang yang ditentukan dalam permintaan
  • EnforceOPAConstraint (tidak digunakan lagi): mengonfigurasi pengontrol penerimaan Open Policy Agent dengan Gatekeeper v3 untuk kluster Kubernetes yang dikelola sendiri di Azure
  • EnforceRegoPolicy (tidak digunakan lagi): mengonfigurasi pengontrol penerimaan Open Policy Agent dengan Gatekeeper v2 di Azure Kubernetes Service

Untuk detail lengkap tentang setiap efek, urutan evaluasi, properti, dan contoh, lihat Memahami Efek Azure Policy.

Fungsi kebijakan

Fungsi dapat digunakan untuk memperkenalkan logika tambahan ke dalam aturan kebijakan. Fungsi ini diselesaikan dalam aturan kebijakan definisi kebijakan dan dalam nilai parameter yang ditugaskan untuk definisi kebijakan dalam sebuah inisiatif.

Semua fungsi templat Resource Manager tersedia untuk digunakan dalam aturan kebijakan, kecuali fungsi berikut dan fungsi yang ditentukan pengguna:

  • copyIndex()
  • dateTimeAdd()
  • deployment()
  • environment()
  • extensionResourceId()
  • listAccountSas()
  • listKeys()
  • listSecrets()
  • daftar*
  • managementGroup()
  • newGuid()
  • pickZones()
  • providers()
  • reference()
  • resourceId()
  • subscriptionResourceId()
  • tenantResourceId()
  • tenant()
  • utcNow(format)
  • variables()

Catatan

Fungsi-fungsi ini masih tersedia dalam bagian details.deployment.properties.template penyebaran templat dalam definisi kebijakan deployIfNotExists.

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.

Fungsi berikut ini hanya tersedia dalam aturan kebijakan:

  • addDays(dateTime, numberOfDaysToAdd)

    • dateTime: String [wajib] - String dalam format DateTime Universal ISO 8601 'yyyy-MM-ddTHH:mm:ss.FFFFFFFZ'
    • numberOfDaysToAdd: Bilangan bulat [wajib] - Jumlah hari yang akan 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 utamanya digunakan dengan AuditIfNotExists dan DeployIfNotExists 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.
  • policy()

    • Mengembalikan informasi berikut tentang kebijakan yang sedang dievaluasi. Properti dapat diakses dari objek yang dikembalikan (misalnya: [policy().assignmentId]).

      {
        "assignmentId": "/subscriptions/ad404ddd-36a5-4ea8-b3e3-681e77487a63/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 sebagai disertakan dalam range.
    • 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)

Contoh fungsi kebijakan

Contoh aturan kebijakan ini menggunakan fungsi sumber daya resourceGroup untuk mendapatkan properti nama, dikombinasikan dengan fungsi array dan objek concat untuk membangun kondisi like yang memberlakukan nama sumber daya agar dimulai 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 kondisi if 4096
Kondisi ekspresi di blok kemudian 128 Berlaku untuk kebijakan existenceCondition dari 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(....)]"
Ekspresi jumlah bidang per array 5
Ekspresi jumlah nilai per aturan kebijakan 10
Jumlah iterasi ekspresi hitungan nilai 100 Untuk ekspresi jumlah Nilai bersarang, ini juga mencakup 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 kebijakan penolakan dan dapat memblokir permintaan yang masuk. Saat menulis kebijakan dengan fungsi yang kompleks, perhatikan batasan ini dan uji kebijakan Anda terhadap sumber daya yang berpotensi melebihinya.

Alias

Anda menggunakan alias properti untuk mengakses properti tertentu untuk jenis sumber daya. Alias memungkinkan Anda membatasi nilai atau kondisi apa yang diizinkan untuk properti di sumber daya. Setiap alias memetakan ke jalur dalam versi API yang berbeda untuk jenis sumber daya tertentu. Selama evaluasi kebijakan, mesin kebijakan mendapatkan jalur properti untuk versi API tersebut.

Daftar alias selalu bertambah. Untuk menemukan alias apa yang saat ini didukung oleh Azure Policy, gunakan salah satu metode berikut:

  • Ekstensi Azure Policy untuk Visual Studio Code (disarankan)

    Gunakan ekstensi Azure Policy untuk Visual Studio Code untuk melihat dan menemukan alias properti sumber daya.

    Cuplikan layar ekstensi Azure Policy untuk Visual Studio Code yang mengapungkan properti untuk menampilkan nama alias.

  • Azure PowerShell

    # Login first with Connect-AzAccount if not using Cloud Shell
    
    # Use Get-AzPolicyAlias to list available providers
    Get-AzPolicyAlias -ListAvailable
    
    # Use Get-AzPolicyAlias to list aliases for a Namespace (such as Azure Compute -- Microsoft.Compute)
    (Get-AzPolicyAlias -NamespaceMatch 'compute').Aliases
    

    Catatan

    Untuk menemukan alias yang bisa digunakan dengan efek modifikasi, gunakan perintah berikut ini di Azure PowerShell 4.6.0 atau yang lebih tinggi:

    Get-AzPolicyAlias | Select-Object -ExpandProperty 'Aliases' | Where-Object { $_.DefaultMetadata.Attributes -eq 'Modifiable' }
    
  • Azure CLI

    # Login first with az login if not using Cloud Shell
    
    # List namespaces
    az provider list --query [*].namespace
    
    # Get Azure Policy aliases for a specific Namespace (such as Azure Compute -- Microsoft.Compute)
    az provider show --namespace Microsoft.Compute --expand "resourceTypes/aliases" --query "resourceTypes[].aliases[].name"
    
  • REST API/ARMClient

    GET https://management.azure.com/providers/?api-version=2019-10-01&$expand=resourceTypes/aliases
    

Memahami alias [*]

Beberapa alias yang tersedia memiliki versi yang muncul sebagai nama 'normal' dan nama lain dengan [*]yang melekat padanya. Contohnya:

  • Microsoft.Storage/storageAccounts/networkAcls.ipRules
  • Microsoft.Storage/storageAccounts/networkAcls.ipRules[*]

Alias 'normal' mewakili bidang sebagai nilai tunggal. Bidang ini untuk skenario perbandingan kecocokan persis ketika seluruh rangkaian nilai harus persis seperti yang ditentukan, tidak lebih dan tidak kurang.

Alias [*] mewakili kumpulan nilai yang dipilih dari elemen properti sumber daya array. Contohnya:

Alias Nilai yang dipilih
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*] Elemen array ipRules.
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].action Nilai properti action dari setiap elemen array ipRules.

Saat digunakan dalam kondisi bidang, alias array memungkinkan untuk membandingkan setiap elemen array individual dengan nilai target. Saat digunakan dengan ekspresi jumlah, dimungkinkan untuk:

  • Memeriksa ukuran array
  • Periksa apakah semua\salah satu\tidak ada elemen array yang memenuhi kondisi kompleks
  • Memeriksa apakah elemen array tepat dengan jumlah n memenuhi kondisi kompleks

Untuk informasi dan contoh selengkapnya, lihat Merujuk properti sumber daya array.

Langkah berikutnya