Share via


Azure İlkesi tanım yapısı ilke kuralı

İlke kuralı ve then bloklarından if oluşur. bloğunda, ilkenin if ne zaman uygulanacağını belirten bir veya daha fazla koşul tanımlarsınız. Bir ilkeye ilişkin senaryoyu tam olarak tanımlamak için bu koşullara mantıksal işleçler uygulayabilirsiniz.

Her efekt, değerlendirme sırası, özellikler ve örneklerle ilgili tüm ayrıntılar için bkz. Azure İlkesi tanım etkisi temel bilgileri.

Blokta then , koşullar karşılandığında gerçekleşen etkiyi if tanımlarsınız.

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

policyRule hakkında daha fazla bilgi için ilke tanımı şemasına gidin.

Mantıksal işleçler

Desteklenen mantıksal işleçler şunlardır:

  • "not": {condition or operator}
  • "allOf": [{condition or operator},{condition or operator}]
  • "anyOf": [{condition or operator},{condition or operator}]

Söz not dizimi koşulun sonucunu ters çevirir. Söz allOf dizimi (mantıksal and işleme benzer) tüm koşulların doğru olmasını gerektirir. Söz anyOf dizimi (mantıksal or işleme benzer) bir veya daha fazla koşulun doğru olmasını gerektirir.

Mantıksal işleçleri iç içe yerleştirebilirsiniz. Aşağıdaki örnekte, bir not işlemin içinde iç içe yerleştirilmiş bir allOf işlem gösterilmektedir.

"if": {
  "allOf": [
    {
      "not": {
        "field": "tags",
        "containsKey": "application"
      }
    },
    {
      "field": "type",
      "equals": "Microsoft.Storage/storageAccounts"
    }
  ]
},

Koşullar

Koşul, bir değerin belirli ölçütleri karşılayıp karşılamadığını değerlendirir. Desteklenen koşullar şunlardır:

  • "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"

, lesslessOrEquals, greaterve greaterOrEqualsiçin, özellik türü koşul türüyle eşleşmiyorsa bir hata oluşur. Dize karşılaştırmaları kullanılarak InvariantCultureIgnoreCaseyapılır.

ve notLike koşullarını kullanırkenlike, değerde bir joker karakter (*) sağlarsınız. Değerin birden fazla joker karakteri olmamalıdır.

ve notMatch koşullarını kullanırken, bir rakamla match eşleşmesi için bir hashtag (#), bir harf için soru işareti (?) ve herhangi bir karakterle eşleşecek bir nokta (.) ve bu gerçek karakterle eşleşecek başka bir karakter sağlayın. ve notMatch büyük/küçük harfe duyarlı olsa match da, değerini stringValue değerlendiren diğer tüm koşullar büyük/küçük harfe duyarlı değildir. Büyük/küçük harfe duyarlı olmayan alternatifler ve notMatchInsensitivelyiçinde matchInsensitively kullanılabilir.

Alanlar

Kaynak isteği yükündeki özelliklerin değerlerinin belirli ölçütleri karşılayıp karşılamadığını değerlendiren koşullar bir field ifade kullanılarak oluşturulabilir. Aşağıdaki alanlar desteklenir:

  • name

  • fullName

    • Kaynağın tam adını döndürür. Kaynağın tam adı, üst kaynak adları (örneğin myServer/myDatabase) tarafından eklenen kaynak adıdır.
  • kind

  • type

  • location

    • Konum alanları, çeşitli biçimleri destekleyecek şekilde normalleştirilir. Örneğin, East US 2 eşittir eastus2olarak kabul edilir.
    • Konum belirsiz kaynaklar için genel kullanın.
  • id

    • Değerlendirilen kaynağın kaynak kimliğini döndürür.
    • Örnek: /subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/myRG/providers/Microsoft.KeyVault/vaults/myVault
  • identity.type

    • Kaynakta etkinleştirilen yönetilen kimlik türünü döndürür.
  • tags

  • tags['<tagName>']

    • Bu köşeli ayraç söz dizimi, kısa çizgi, nokta veya boşluk gibi noktalama işaretleri içeren etiket adlarını destekler.
    • Koşulunu doğrulamak için etiketin adı buradadır tagName .
    • Örnekler: tags['Acct.CostCenter'] burada Acct.CostCenter etiketin adıdır.
  • tags['''<tagName>''']

    • Bu köşeli ayraç söz dizimi, çift kesme işaretiyle kaçarak içinde kesme işareti bulunan etiket adlarını destekler.
    • Koşulunu doğrulamak için etiketin adı buradadır tagName .
    • Örnek: tags['''My.Apostrophe.Tag'''] burada 'My.Apostrophe.Tag' etiketin adıdır.

    Not

    tags.<tagName>, tags[tagName]ve tags[tag.with.dots] etiket alanını bildirmenin hala kabul edilebilir yollarıdır. Ancak, tercih edilen ifadeler yukarıda listelenen ifadelerdir.

  • özellik diğer adları - liste için bkz . Diğer adlar.

    Not

    Dizi field diğer adına [*] başvuran ifadelerde dizideki her öğe, öğeler arasındaki mantıksal and değerle ayrı ayrı değerlendirilir. Daha fazla bilgi için bkz . Dizi kaynağı özelliklerine başvurma.

İfade kullanan field koşullar, yazma işlemleri için kullanılan eski ilke tanımı söz diziminin "source": "action"yerini alabilir. Örneğin, bu artık desteklenmiyor:

{
  "source": "action",
  "like": "Microsoft.Network/publicIPAddresses/*"
}

Ancak istenen davranışa mantık kullanılarak field ulaşabilirsiniz:

{
  "field": "type",
  "equals": "Microsoft.Network/publicIPAddresses"
}

Etiketleri parametrelerle kullanma

Parametre değeri bir etiket alanına geçirilebilir. Parametrenin etiket alanına geçirilmesi, ilke ataması sırasında ilke tanımının esnekliğini artırır.

Aşağıdaki örnekte, concat parametresinin değeri tagName adlı etiket için bir etiket alanı araması oluşturmak için kullanılır. Bu etiket yoksa, bu etki, modify arama işlevi kullanılarak denetlenen kaynaklar üst kaynak grubunda ayarlanan aynı adlandırılmış etiketin değerini kullanarak resourcegroup() etiketi eklemek için kullanılır.

{
  "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"
      ]
    }
  }
}

Değer

Bir değerin belirli ölçütleri karşılayıp karşılamadığını değerlendiren koşullar bir value ifade kullanılarak oluşturulabilir. Değerler değişmez değerler, parametrelerin değerleri veya desteklenen şablon işlevlerinin döndürülen değerleri olabilir.

Uyarı

Şablon işlevinin sonucu bir hataysa, ilke değerlendirmesi başarısız olur. Başarısız bir değerlendirme örtük denybir . Daha fazla bilgi için bkz . Şablon hatalarını önleme. Yeni bir ilke tanımını test edip doğrularken başarısız bir değerlendirmenin yeni veya güncelleştirilmiş kaynaklar üzerindeki etkisini önlemek için enforcementModedoNotEnforce komutunu kullanın.

Değer örnekleri

Bu ilke kuralı örneği, işlevin resourceGroup() sonucunu ve döndürülen name özelliği bir like koşuluyla *netrgkarşılaştırmak için kullanırvalue. Kural, adı ile biten *netrgherhangi bir kaynak grubundaki kaynağın hiçbirini Microsoft.Network/*type reddeder.

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

Bu ilke kuralı örneği, birden çok iç içe işlevin equalstruesonucunun olup olmadığını denetlemek için kullanırvalue. Kural, en az üç etiketi olmayan tüm kaynakları reddeder.

{
  "mode": "indexed",
  "policyRule": {
    "if": {
      "value": "[less(length(field('tags')), 3)]",
      "equals": "true"
    },
    "then": {
      "effect": "deny"
    }
  }
}

Şablon hatalarını önleme

içindeki value şablon işlevlerinin kullanılması birçok karmaşık iç içe işleve olanak tanır. Şablon işlevinin sonucu bir hataysa, ilke değerlendirmesi başarısız olur. Başarısız bir değerlendirme örtük denybir . Belirli senaryolarda başarısız olan bir value örnek:

{
  "policyRule": {
    "if": {
      "value": "[substring(field('name'), 0, 3)]",
      "equals": "abc"
    },
    "then": {
      "effect": "audit"
    }
  }
}

Yukarıdaki örnek ilke kuralı, öğesinin ilk üç karakterini abcname ile karşılaştırmak için substring() kullanır. Üç karakterden kısaysa name işlev substring() hatayla sonuçlanır. Bu hata, ilkenin bir deny etki haline gelmesine neden olur.

Bunun yerine, üç karakterden kısa bir karakterin hataya neden olmasına izin vermeden ilk üç karakterin name eşit abc olup olmadığını denetlemek için if() işlevini name kullanın:

{
  "policyRule": {
    "if": {
      "value": "[if(greaterOrEquals(length(field('name')), 3), substring(field('name'), 0, 3), 'not starting with abc')]",
      "equals": "abc"
    },
    "then": {
      "effect": "audit"
    }
  }
}

Düzeltilen ilke kuralıyla, if() üç karakterden daha az karakter içeren bir substring() değeri almaya çalışmadan önce uzunluğunu name denetler. Çok kısaysa name , bunun yerine "abc ile başlanmaz" değeri döndürülür ve ile karşılaştırılır abc. İlke kuralıyla abc başlamayan kısa ada sahip bir kaynak hala başarısız olur, ancak değerlendirme sırasında hataya neden olmaz.

Sayı

Bir dizinin belirli ölçütlere uyan kaç üyesini sayan koşullar bir count ifade kullanılarak oluşturulabilir. Yaygın senaryolar dizi üyelerinin 'en az biri', 'tam olarak biri', 'tümü' veya 'hiçbiri' dizi üyelerinin bir koşulu karşılayıp karşılamadığını denetler. her count dizi üyesini bir koşul ifadesi için değerlendirir ve doğru sonuçları toplayarak ifade işleciyle karşılaştırılır.

Alan sayısı

İstek yükündeki bir dizinin kaç üyesinin koşul ifadesini karşılayanı sayar. İfadelerin field count yapısı şöyledir:

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

aşağıdaki özellikler ile field countkullanılır:

  • count.field (gerekli): Dizinin yolunu içerir ve bir dizi diğer adı olmalıdır.
  • count.where (isteğe bağlı): her dizi diğer adı dizisi üyesi count.fieldiçin ayrı ayrı değerlendirilecek koşul ifadesi. Bu özellik sağlanmazsa, 'field' yoluna sahip tüm dizi üyeleri true olarak değerlendirilir. Bu özelliğin içinde herhangi bir koşul kullanılabilir. Mantıksal işleçler karmaşık değerlendirme gereksinimleri oluşturmak için bu özelliğin içinde kullanılabilir.
  • condition (gerekli): Değer, koşul ifadesini karşılayan öğe sayısıyla count.where karşılaştırılır. Sayısal bir koşul kullanılmalıdır.

İfadenin nasıl field count değerlendirildiğinin ayrıntılı açıklaması da dahil olmak üzere Azure İlkesi dizi özellikleriyle çalışma hakkında daha fazla bilgi için bkz. Dizi kaynağı özelliklerine başvurma.

Değer sayısı

Bir dizideki kaç üyenin koşulu karşılayanı sayar. Dizi sabit bir dizi veya dizi parametresi başvurusu olabilir. İfadelerin value count yapısı şöyledir:

{
  "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>"
}

aşağıdaki özellikler ile value countkullanılır:

  • count.value (gerekli): Değerlendirilecek dizi.
  • count.name (gerekli): İngilizce harf ve rakamlardan oluşan dizin adı. Geçerli yinelemede değerlendirilen dizi üyesinin değeri için bir ad tanımlar. Ad, koşulun içindeki count.where geçerli değere başvurmak için kullanılır. İfade başka count bir ifadenin count alt öğesinde olmadığında isteğe bağlı. Sağlanmadığında, dizin adı örtük olarak olarak "default"ayarlanır.
  • count.where (isteğe bağlı): öğesinin her dizi üyesi count.valueiçin ayrı ayrı değerlendirilecek koşul ifadesi. Bu özellik sağlanmazsa, tüm dizi üyeleri true olarak değerlendirilir. Bu özelliğin içinde herhangi bir koşul kullanılabilir. Mantıksal işleçler karmaşık değerlendirme gereksinimleri oluşturmak için bu özelliğin içinde kullanılabilir. Şu anda numaralandırılmış dizi üyesinin değerine geçerli işlev çağrılarak erişilebilir.
  • condition (gerekli): Değer, koşul ifadesini karşılayan öğe sayısıyla count.where karşılaştırılır. Sayısal bir koşul kullanılmalıdır.

Geçerli işlev

current() İşlev yalnızca koşulun count.where içinde kullanılabilir. İfade değerlendirmesi tarafından şu anda numaralandırılmış olan dizi üyesinin count değerini döndürür.

Değer sayısı kullanımı

  • current(<index name defined in count.name>). Örneğin: current('arrayMember').
  • current(). yalnızca ifade başka count bir ifadenin value count alt öğesi olmadığında izin verilir. Yukarıdakiyle aynı değeri döndürür.

Çağrı tarafından döndürülen değer bir nesneyse, özellik erişimcileri desteklenir. Örneğin: current('objectArrayMember').property.

Alan sayısı kullanımı

  • current(<the array alias defined in count.field>). Örneğin, current('Microsoft.Test/resource/enumeratedArray[*]').
  • current(). yalnızca ifade başka count bir ifadenin field count alt öğesi olmadığında izin verilir. Yukarıdakiyle aynı değeri döndürür.
  • current(<alias of a property of the array member>). Örneğin, current('Microsoft.Test/resource/enumeratedArray[*].property').

Alan sayısı örnekleri

Örnek 1: Bir dizinin boş olup olmadığını denetleme

{
  "count": {
    "field": "Microsoft.Network/networkSecurityGroups/securityRules[*]"
  },
  "equals": 0
}

Örnek 2: Koşul ifadesini karşılamak için yalnızca bir dizi üyesi olup olmadığını denetleyin

{
  "count": {
    "field": "Microsoft.Network/networkSecurityGroups/securityRules[*]",
    "where": {
      "field": "Microsoft.Network/networkSecurityGroups/securityRules[*].description",
      "equals": "My unique description"
    }
  },
  "equals": 1
}

Örnek 3: Koşul ifadesini karşılamak için en az bir dizi üyesi olup olmadığını denetleyin

{
  "count": {
    "field": "Microsoft.Network/networkSecurityGroups/securityRules[*]",
    "where": {
      "field": "Microsoft.Network/networkSecurityGroups/securityRules[*].description",
      "equals": "My common description"
    }
  },
  "greaterOrEquals": 1
}

Örnek 4: Tüm nesne dizisi üyelerinin koşul ifadesini karşıladığını denetleyin

{
  "count": {
    "field": "Microsoft.Network/networkSecurityGroups/securityRules[*]",
    "where": {
      "field": "Microsoft.Network/networkSecurityGroups/securityRules[*].description",
      "equals": "description"
    }
  },
  "equals": "[length(field('Microsoft.Network/networkSecurityGroups/securityRules[*]'))]"
}

Örnek 5: En az bir dizi üyesinin koşul ifadesindeki birden çok özellikle eşleştiklerini denetleyin

{
  "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
}

Örnek 6: Bir şablon işlevinde where şu anda numaralandırılmış dizi üyesinin değerine erişmek için koşulların içinde işlevi kullanıncurrent(). Bu koşul, bir sanal ağın 10.0.0.0/24 CIDR aralığında olmayan bir adres ön eki içerip içermediğini denetler.

{
  "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
}

Örnek 7: Şu anda numaralandırılmış dizi üyesinin değerine erişmek için koşulların içinde where işlevi kullanınfield(). Bu koşul, bir sanal ağın 10.0.0.0/24 CIDR aralığında olmayan bir adres ön eki içerip içermediğini denetler.

{
  "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
}

Değer sayısı örnekleri

Örnek 1: Kaynak adının verilen ad desenlerinden herhangi biri ile eşleşip eşleşmediğini denetleyin.

{
  "count": {
    "value": [
      "prefix1_*",
      "prefix2_*"
    ],
    "name": "pattern",
    "where": {
      "field": "name",
      "like": "[current('pattern')]"
    }
  },
  "greater": 0
}

Örnek 2: Kaynak adının verilen ad desenlerinden herhangi biri ile eşleşip eşleşmediğini denetleyin. current() İşlev bir dizin adı belirtmez. Sonuç, önceki örnekle aynıdır.

{
  "count": {
    "value": [
      "prefix1_*",
      "prefix2_*"
    ],
    "where": {
      "field": "name",
      "like": "[current()]"
    }
  },
  "greater": 0
}

Örnek 3: Kaynak adının bir dizi parametresi tarafından sağlanan belirli ad desenlerinden herhangi biri ile eşleşip eşleşmediğini denetleyin.

{
  "count": {
    "value": "[parameters('namePatterns')]",
    "name": "pattern",
    "where": {
      "field": "name",
      "like": "[current('pattern')]"
    }
  },
  "greater": 0
}

Örnek 4: Sanal ağ adresi ön eklerinden herhangi birinin onaylanan ön ekler listesinde olup olmadığını denetleyin.

{
  "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
}

Örnek 5: Tüm ayrılmış NSG kurallarının bir NSG'de tanımlandığını denetleyin. Ayrılmış NSG kurallarının özellikleri nesneleri içeren bir dizi parametresinde tanımlanır.

Parametre değeri:

[
  {
    "priority": 101,
    "access": "deny",
    "direction": "inbound",
    "destinationPortRange": 22
  },
  {
    "priority": 102,
    "access": "deny",
    "direction": "inbound",
    "destinationPortRange": 3389
  }
]

İlke:

{
  "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'))]"
}

İlke işlevleri

İşlevler, bir ilke kuralına ek mantık eklemek için kullanılabilir. Bunlar, bir ilke tanımının ilke kuralı içinde ve girişimdeki ilke tanımlarına atanan parametre değerleri içinde çözümlenir.

Aşağıdaki işlevler ve kullanıcı tanımlı işlevler dışında tüm Resource Manager şablon işlevleri bir ilke kuralı içinde kullanılabilir:

  • copyIndex()
  • dateTimeAdd()
  • dateTimeFromEpoch
  • dateTimeToEpoch
  • deployment()
  • environment()
  • extensionResourceId()
  • lambda() Daha fazla bilgi için lambda sayfasına gidin
  • listAccountSas()
  • listKeys()
  • listSecrets()
  • list*
  • managementGroup()
  • newGuid()
  • pickZones()
  • providers()
  • reference()
  • resourceId()
  • subscriptionResourceId()
  • tenantResourceId()
  • tenant()
  • variables()

Not

Bu işlevler, şablon dağıtımının details.deployment.properties.template bir deployIfNotExists ilke tanımındaki bölümü içinde hala kullanılabilir.

Aşağıdaki işlev bir ilke kuralında kullanılabilir ancak Azure Resource Manager şablonunda (ARM şablonu) kullanımdan farklıdır:

  • utcNow()- ARM şablonundan farklı olarak, bu özellik defaultValue dışında kullanılabilir.
    • Evrensel ISO 8601 DateTime biçiminde yyyy-MM-ddTHH:mm:ss.fffffffZgeçerli tarih ve saate ayarlanmış bir dize döndürür.

Aşağıdaki işlevler yalnızca ilke kurallarında kullanılabilir:

  • addDays(dateTime, numberOfDaysToAdd)

    • dateTime: [Gerekli] dize - Evrensel ISO 8601 DateTime biçimindeki dize 'yyyy-MM-ddTHH:mm:ss. FFFFFFFZ'
    • numberOfDaysToAdd: [Gerekli] tamsayı - Eklenecek gün sayısı
  • field(fieldName)

    • fieldName: [Gerekli] dize - Alınacak alanın adı
    • If koşulu tarafından değerlendirilen kaynaktan bu alanın değerini döndürür.
    • fieldöncelikle ve deployIfNotExists ile auditIfNotExists değerlendirilmekte olan kaynak üzerindeki alanlara başvurmak için kullanılır. Bu kullanımın bir örneği DeployIfNotExists örneğinde görülebilir.
  • requestContext().apiVersion

    • İlke değerlendirmesini tetikleyen isteğin API sürümünü döndürür (örnek: 2021-09-01). Bu değer, kaynak oluşturma/güncelleştirme değerlendirmeleri için PUT/PATCH isteğinde kullanılan API sürümüdür. Mevcut kaynaklarda uyumluluk değerlendirmesi sırasında her zaman en son API sürümü kullanılır.
  • policy()

    • Değerlendirilen ilke hakkında aşağıdaki bilgileri döndürür. Özelliklere döndürülen nesneden erişilebilir (örnek: [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: [Gerekli] dize - targetRange'in içinde olup olmadığını denetlemek için bir IP adresi aralığı belirten dize.
    • targetRange: [Gerekli] dize - Aralığa dahil olduğu gibi doğrulanması için bir IP adresi aralığı belirten dize.
    • Aralık IP adresi aralığının targetRange IP adresi aralığını içerip içermediği için bir boole döndürür. Boş aralıklara veya IP aileleri arasında karıştırmaya izin verilmez ve değerlendirme hatasına neden olur.

    Desteklenen biçimler:

    • Tek IP adresi (örnekler: 10.0.0.0, 2001:0DB8::3:FFFE)
    • CIDR aralığı (örnekler: 10.0.0.0/24, 2001:0DB8::/110)
    • Başlangıç ve bitiş IP adresleriyle tanımlanan aralık (örnekler: 192.168.0.1-192.168.0.9, 2001:0DB8::-2001:0DB8::3:FFFF)
  • current(indexName)

    • Yalnızca sayı ifadelerinin içinde kullanılabilecek özel işlev.

İlke işlevi örneği

Bu ilke kuralı örneği, kaynak adını kaynak grubu adıyla başlamaya name zorlayan bir koşul oluşturmak üzere dizi ve nesne işleviyle concat birlikte like özelliğini almak için kaynak işlevini kullanırresourceGroup.

{
  "if": {
    "not": {
      "field": "name",
      "like": "[concat(resourceGroup().name,'*')]"
    }
  },
  "then": {
    "effect": "deny"
  }
}

İlke kuralı sınırları

Yazma sırasında uygulanan sınırlar

İlke kurallarının yapısına yönelik sınırlar, ilkenin yazılması veya atanması sırasında zorlanır. Bu sınırları aşan ilke tanımları oluşturma veya atama girişimleri başarısız olur.

Sınır Değer Ek ayrıntılar
Koşuldaki if koşul ifadeleri 4096
Bloktaki then koşul ifadeleri 128 ve deployIfNotExists ilkeleri için geçerlidir existenceConditionauditIfNotExists
İlke kuralı başına ilke işlevleri 2048
İlke işlevi parametre sayısı 128 Örnek: [function('parameter1', 'parameter2', ...)]
İç içe ilke işlevleri derinliği 64 Örnek: [function(nested1(nested2(...)))]
İlke işlevleri ifade dizesi uzunluğu 81920 Örnek: uzunluğu "[function(....)]"
Field count dizi başına ifade sayısı 5
Value count ilke kuralı başına ifadeler 10
Value count ifade yineleme sayısı 100 İç içe Value count ifadeler için bu, üst ifadenin yineleme sayısını da içerir

Değerlendirme sırasında uygulanan sınırlar

İlke değerlendirmesi sırasında ilke işlevleri tarafından işlenen nesnelerin boyutuna sınırlar. Bu sınırlar, değerlendirilen içeriğe bağlı olduğundan yazma sırasında her zaman zorlanamaz. Örneğin:

{
  "field": "name",
  "equals": "[concat(field('stringPropertyA'), field('stringPropertyB'))]"
}

İşlev tarafından oluşturulan dizenin concat() uzunluğu, değerlendirilen kaynaktaki özelliklerin değerine bağlıdır.

Sınır Değer Örnek
Bir işlev tarafından döndürülen dizenin uzunluğu 131072 [concat(field('longString1'), field('longString2'))]
Bir işleve parametre olarak sağlanan veya işlev tarafından döndürülen karmaşık nesnelerin derinliği 128 [union(field('largeObject1'), field('largeObject2'))]
Bir işleve parametre olarak sağlanan veya bir işlev tarafından döndürülen karmaşık nesnelerin düğüm sayısı 32768 [concat(field('largeArray1'), field('largeArray2'))]

Uyarı

Değerlendirme sırasında yukarıdaki sınırları aşan ilke, etkili bir şekilde bir deny ilke haline gelir ve gelen istekleri engelleyebilir. Karmaşık işlevlere sahip ilkeler yazarken, bu limitlere dikkat edin ve ilkelerinizi bunları aşma potansiyeli olan kaynaklara karşı test edin.

Sonraki adımlar