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"
, less
lessOrEquals
, greater
ve greaterOrEquals
için, özellik türü koşul türüyle eşleşmiyorsa bir hata oluşur. Dize karşılaştırmaları kullanılarak InvariantCultureIgnoreCase
yapı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 notMatchInsensitively
iç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.
- Kaynağın tam adını döndürür. Kaynağın tam adı, üst kaynak adları (örneğin
kind
type
location
- Konum alanları, çeşitli biçimleri destekleyecek şekilde normalleştirilir. Örneğin,
East US 2
eşittireastus2
olarak kabul edilir. - Konum belirsiz kaynaklar için genel kullanın.
- Konum alanları, çeşitli biçimleri destekleyecek şekilde normalleştirilir. Örneğin,
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']
buradaAcct.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]
vetags[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ıksaland
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 deny
bir . 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 enforcementMode doNotEnforce
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 *netrg
karşılaştırmak için kullanırvalue
. Kural, adı ile biten *netrg
herhangi 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 equals
true
sonucunun 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 deny
bir . 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 abc
name
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 count
kullanı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 üyesicount.field
iç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ıylacount.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 count
kullanı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çindekicount.where
geçerli değere başvurmak için kullanılır. İfade başkacount
bir ifadenincount
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 üyesicount.value
iç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ıylacount.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şkacount
bir ifadeninvalue 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şkacount
bir ifadeninfield 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 gidinlistAccountSas()
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.fffffffZ
geçerli tarih ve saate ayarlanmış bir dize döndürür.
- Evrensel ISO 8601 DateTime biçiminde
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 vedeployIfNotExists
ileauditIfNotExists
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.
- İlke değerlendirmesini tetikleyen isteğin API sürümünü döndürür (örnek:
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 existenceCondition auditIfNotExists |
İ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
- İlke tanımı yapısı hakkında daha fazla bilgi için temel bilgiler, parametreler ve diğer adlar bölümüne gidin.
- Girişimler için girişim tanımı yapısı'na gidin.
- örnekleri Azure İlkesi gözden geçirin.
- İlkenin etkilerini anlama konusunu gözden geçirin.
- Program aracılığıyla ilkelerin nasıl oluşturulacağını anlama.
- Uyumluluk verilerini almayı öğrenin.
- Uyumlu olmayan kaynakları düzeltmeyi öğrenin.
- Kaynaklarınızı Azure yönetim gruplarıyla düzenleme ile yönetim grubunun ne olduğunu gözden geçirin.