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, , greaterlessOrEquals, 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).
  • 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/11111111-1111-1111-1111-111111111111/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.

    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.

  • alias properti - untuk daftar, lihat Alias.

    Catatan

    Dalam field ekspresi yang mengacu pada alias [*] array setiap elemen dalam array dievaluasi satu per satu dengan logis and 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 equalstrueberlapis . 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 abcname . 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 abcdengan . 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 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.
  • condition (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 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 kondisi count.where. Opsional saat count ekspresi tidak berada dalam anak dari ekspresi lain count . 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 kondisi count.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 ketika value count ekspresi bukan anak dari ekspresi lain count . 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 ketika field count ekspresi bukan anak dari ekspresi lain count . 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 lambda
  • listAccountSas()
  • listKeys()
  • listSecrets()
  • list*
  • managementGroup()
  • newGuid()
  • pickZones()
  • providers()
  • reference()
  • resourceId()
  • subscriptionResourceId()
  • tenantResourceId()
  • tenant()
  • variables()

Catatan

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

Fungsi berikut 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 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 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/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)

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