對於 Azure 資源編寫陣列屬性的原則
Azure Resource Manager 屬性通常會定義為字串和布林值。 存在一對多關聯性時,複雜屬性會改為定義為陣列。 在 Azure 原則中,能夠以多種不同的方式使用陣列:
本文涵蓋 Azure 原則的每個使用方式,並提供數個範例定義。
參數陣列
定義參數陣列
將參數定義為陣列,可在需要一個以上的值時,允許原則彈性。 此原則定義允許參數 allowedLocations
的任何單一位置,並預設為 eastus2:
"parameters": {
"allowedLocations": {
"type": "string",
"metadata": {
"description": "The list of allowed locations for resources.",
"displayName": "Allowed locations",
"strongType": "location"
},
"defaultValue": "eastus2"
}
}
如同type
字串,指派原則時只能設定一個值。 如果指派此原則,則範圍內的資源只能在單一 Azure 區域中使用。 大部分的原則定義都必須允許已核准的選項清單,例如允許 eastus2、eastus 和 westus2。
若要建立原則定義以允許多個選項,請使用 陣列 type
。 相同的原則可以改寫如下:
"parameters": {
"allowedLocations": {
"type": "array",
"metadata": {
"description": "The list of allowed locations for resources.",
"displayName": "Allowed locations",
"strongType": "location"
},
"defaultValue": [
"eastus2"
],
"allowedValues": [
"eastus2",
"eastus",
"westus2"
]
}
}
注意
儲存原則定義之後, type
就無法變更參數上的 屬性。
這個新的參數定義會在原則指派期間接受一個以上的值。 定義陣列屬性 allowedValues
后,指派期間可用的值會進一步限制為預先定義的選擇清單。 使用 是選擇性的 allowedValues
。
於指派期間將值傳遞給參數陣列
當您透過 Azure 入口網站 指派原則時,陣列的參數type
會顯示為單一文本框。 提示說 Use ; to separate values. (e.g. London;New York)
。 若要將 eastus2、eastus 和 westus2 允許的位置值傳遞給參數,請使用下列字串:
eastus2;eastus;westus2
使用 Azure CLI、Azure PowerShell 或 REST API 時,參數值的格式會不同。 這些值會透過同時包含參數名稱的 JSON 字串傳遞。
{
"allowedLocations": {
"value": [
"eastus2",
"eastus",
"westus2"
]
}
}
若要將此字串與每個 SDK 搭配使用,請使用下列命令:
- Azure CLI:使用 參數
params
命令 az policy assignment create 。 - Azure PowerShell:Cmdlet New-AzPolicyAssignment 搭配參數
PolicyParameter
。 - REST API:在 PUT 建立作業中,做為要求本文的
properties.parameters
一部分做為 屬性的值。
在條件中使用陣列
In 和 notIn
in
和 notIn
條件只適用於陣列值。 它們會檢查陣列中是否有值。 陣列可以是常值 JSON 陣列或陣列參數的參考。 例如:
{
"field": "tags.environment",
"in": [
"dev",
"test"
]
}
{
"field": "location",
"notIn": "[parameters('allowedLocations')]"
}
值計數
值計數運算式會計算有多少陣列成員符合條件。 該運算式所提供的方式可使用每個反覆項目上的不同值,來多次運算相同條件。 例如,下列條件會檢查資源名稱是否符合來自模式陣列的任何模式:
{
"count": {
"value": [
"test*",
"dev*",
"prod*"
],
"name": "pattern",
"where": {
"field": "name",
"like": "[current('pattern')]"
}
},
"greater": 0
}
為了評估運算式,Azure 原則會評估 where
條件三次,每個 [ "test*", "dev*", "prod*" ]
成員皆須評估一次,以計算其得出 true
的次數。 在每個反覆項目上,目前陣列成員的值會按照 count.name
所定義的 pattern
索引名稱配對。 接著,您可以呼叫特殊的範本函式,在 where
條件內參考此值:current('pattern')
。
反覆運算 | current('pattern') 傳回值 |
---|---|
1 | "test*" |
2 | "dev*" |
3 | "prod*" |
只有在結果計數大於 0 時,條件才為 true。
若要讓先前的條件更泛型,請使用 parameters
參考,而不是常值數位:
{
"count": {
"value": "[parameters('patterns')]",
"name": "pattern",
"where": {
"field": "name",
"like": "[current('pattern')]"
}
},
"greater": 0
}
value count
當表達式不在任何其他count
運算式之下時,是選擇性current()
的,count.name
而且函式可以不使用任何自變數:
{
"count": {
"value": "[parameters('patterns')]",
"where": {
"field": "name",
"like": "[current()]"
}
},
"greater": 0
}
value count
也支援複雜對象的陣列,允許更複雜的條件。 例如,下列條件會為每個名稱模式定義所需的標籤值,並檢查資源名稱是否符合該模式,但沒有必要的標籤值:
{
"count": {
"value": [
{
"pattern": "test*",
"envTag": "dev"
},
{
"pattern": "dev*",
"envTag": "dev"
},
{
"pattern": "prod*",
"envTag": "prod"
},
],
"name": "namePatternRequiredTag",
"where": {
"allOf": [
{
"field": "name",
"like": "[current('namePatternRequiredTag').pattern]"
},
{
"field": "tags.env",
"notEquals": "[current('namePatternRequiredTag').envTag]"
}
]
}
},
"greater": 0
}
如需實用範例,請參閱值計數範例。
參考陣列資源屬性
許多使用案例都需要在評估的資源中使用陣列屬性。 某些案例需要參考整個陣列 (例如檢查其長度)。 其他案例則需要將條件套用至各個別陣列成員 (例如,確保所有防火牆規則都會封鎖來自網際網路的存取)。 了解 Azure 原則參考資源屬性的不同方式,以及這些參考在參考陣列屬性時的行為,是撰寫涵蓋這些案例條件的關鍵。
參考資源屬性
Azure 原則可以使用別名參考資源屬性。您可以透過兩種方式參考 Azure 原則內的資源屬性值:
使用 欄位 條件來檢查所有選取的資源屬性是否符合條件。 範例:
{ "field": "Microsoft.Test/resourceType/property", "equals": "value" }
使用
field()
函式來存取屬性值。 範例:{ "value": "[take(field('Microsoft.Test/resourceType/property'), 7)]", "equals": "prefix_" }
欄位條件具有隱含 allOf
的行為。 如果別名代表值的集合,則會檢查所有個別值是否符合條件。 field()
函式會依原狀傳回別名所代表的值,然後其他範本函式即可操作。
參考陣列欄位
陣列資源屬性是以兩種不同類型的別名來表示。 一個附加至它的一般別名和陣列別名[*]
:
Microsoft.Test/resourceType/stringArray
Microsoft.Test/resourceType/stringArray[*]
參考陣列
第一個別名代表單一值,也就是要求內容中的 stringArray
屬性值。 因為該屬性的值是陣列,所以在原則條件中並不實用。 例如:
{
"field": "Microsoft.Test/resourceType/stringArray",
"equals": "..."
}
此條件會將整個 stringArray
陣列與單一字串值進行比較。 包括 equals
在內的大部分條件都只接受字串值,因此在比較陣列與字串時功用不大。 檢查陣列屬性是否存在時,便是參考陣列屬性的主要實用案例:
{
"field": "Microsoft.Test/resourceType/stringArray",
"exists": "true"
}
使用 field()
函式時,傳回的值是來自要求內容的陣列,然後您就可以將其與任何接受陣列引數的支援範本函式搭配使用。 例如,下列條件會檢查 stringArray
的長度是否大於 0:
{
"value": "[length(field('Microsoft.Test/resourceType/stringArray'))]",
"greater": 0
}
參考陣列成員集合
使用語法的 [*]
別名代表從數位屬性選取的屬性值集合,這與選取數位屬性本身不同。 例如, Microsoft.Test/resourceType/stringArray[*]
傳回集合,其中包含 的所有成員 stringArray
。 如先前所述,條件 field
會檢查所有選取的資源屬性是否符合條件,因此只有在 的所有成員 stringArray
都等於 "value"
時,下列條件才會成立。
{
"field": "Microsoft.Test/resourceType/stringArray[*]",
"equals": "value"
}
如果陣列是空的,條件會評估為 true,因為陣列中沒有任何成員違反。 在此案例中,建議改用 count 表達式 。 如果陣列包含物件,可以使用 [*]
別名從每個陣列成員中選取特定屬性值。 範例:
{
"field": "Microsoft.Test/resourceType/objectArray[*].property",
"equals": "value"
}
如果 objectArray
中所有 property
屬性的值都等於 "value"
,則此條件為 true。 如需更多範例,請參閱 更多別名範例。
使用 field()
函式來參考陣列別名時,傳回的值是所有選取值的陣列。 此行為表示 field()
函式的常見使用案例 (即將範本函式套用至資源屬性值的能力) 有限。 此案例中只可使用接受陣列引數的範本函式。 例如,可以透過 [length(field('Microsoft.Test/resourceType/objectArray[*].property'))]
取得陣列長度。 不過,將範本函式套用至各陣列成員,並將其與所需值進行比較等更複雜的案例,只有在使用 count
運算式時才可執行。 如需詳細資訊,請參閱欄位計數運算式。
總而言之,請參閱下列範例資源內容,以及各種別名所傳回的選取值:
{
"tags": {
"env": "prod"
},
"properties": {
"stringArray": [
"a",
"b",
"c"
],
"objectArray": [
{
"property": "value1",
"nestedArray": [
1,
2
]
},
{
"property": "value2",
"nestedArray": [
3,
4
]
}
]
}
}
當您在範例資源內容上使用欄位條件時,結果如下所示:
Alias | 選取的值 |
---|---|
Microsoft.Test/resourceType/missingArray |
null |
Microsoft.Test/resourceType/missingArray[*] |
值的空集合。 |
Microsoft.Test/resourceType/missingArray[*].property |
值的空集合。 |
Microsoft.Test/resourceType/stringArray |
["a", "b", "c"] |
Microsoft.Test/resourceType/stringArray[*] |
"a" 、 、 "b" "c" |
Microsoft.Test/resourceType/objectArray[*] |
{ "property": "value1", "nestedArray": [ 1, 2 ] } ,{ "property": "value2", "nestedArray": [ 3, 4 ] } |
Microsoft.Test/resourceType/objectArray[*].property |
"value1" , "value2" |
Microsoft.Test/resourceType/objectArray[*].nestedArray |
[ 1, 2 ] , [ 3, 4 ] |
Microsoft.Test/resourceType/objectArray[*].nestedArray[*] |
1 、 、 2 、 3 4 |
當您在範例資源內容上使用 函 field()
式時,結果如下所示:
運算式 | 傳回值 |
---|---|
[field('Microsoft.Test/resourceType/missingArray')] |
"" |
[field('Microsoft.Test/resourceType/missingArray[*]')] |
[] |
[field('Microsoft.Test/resourceType/missingArray[*].property')] |
[] |
[field('Microsoft.Test/resourceType/stringArray')] |
["a", "b", "c"] |
[field('Microsoft.Test/resourceType/stringArray[*]')] |
["a", "b", "c"] |
[field('Microsoft.Test/resourceType/objectArray[*]')] |
[{ "property": "value1", "nestedArray": [ 1, 2 ] }, { "property": "value2", "nestedArray": [ 3, 4 ] }] |
[field('Microsoft.Test/resourceType/objectArray[*].property')] |
["value1", "value2"] |
[field('Microsoft.Test/resourceType/objectArray[*].nestedArray')] |
[[ 1, 2 ], [ 3, 4 ]] |
[field('Microsoft.Test/resourceType/objectArray[*].nestedArray[*]')] |
[1, 2, 3, 4] |
欄位計數運算式
欄位計數運算式會計算有多少陣列成員符合條件,並將計數與目標值進行比較。 與 field
條件相比,使用 Count
來運算陣列更直觀且靈活。 語法為:
{
"count": {
"field": <[*
] alias>,
"where": <optional policy condition expression>
},
"equals|greater|less|any other operator": <target value>
}
在沒有 where
條件的情況下使用時,count
只會傳回陣列的長度。 沿用上一節的範例資源內容,下列 count
運算式會得出 true
,因為 stringArray
有三個成員:
{
"count": {
"field": "Microsoft.Test/resourceType/stringArray[*]"
},
"equals": 3
}
此行為也適用於巢狀陣列。 例如,下列 count
運算式會得出 true
,因為 nestedArray
陣列中有四個陣列成員:
{
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*].nestedArray[*]"
},
"greaterOrEquals": 4
}
count
的力量源自於 where
條件。 指定 時count
,Azure 原則 列舉數位成員,並針對條件評估每個成員,計算評估為true
的陣列成員數目。 具體來說,在條件評估的每個反覆where
專案中,Azure 原則 選取單一陣列成員i
,然後根據where
條件評估資源內容,就像是陣列的唯一成員一樣i
。 每個反覆運算中只有一個陣列成員可用,可讓您在各個別陣列成員上套用複雜條件。
範例:
{
"count": {
"field": "Microsoft.Test/resourceType/stringArray[*]",
"where": {
"field": "Microsoft.Test/resourceType/stringArray[*]",
"equals": "a"
}
},
"equals": 1
}
為了評估 count
運算式,Azure 原則會評估 where
條件三次,每個 stringArray
成員皆須評估一次,以計算其得出 true
的次數。 where
當條件參考Microsoft.Test/resourceType/stringArray[*]
陣列成員時,它每次只會選取單一陣列成員,而不是選取 的所有成員stringArray
:
反覆運算 | 選取的 Microsoft.Test/resourceType/stringArray[*] 值 |
where 評估結果 |
---|---|---|
1 | "a" |
true |
2 | "b" |
false |
3 | "c" |
false |
count
會傳回 1
。
以下是更複雜的運算式:
{
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*]",
"where": {
"allOf": [
{
"field": "Microsoft.Test/resourceType/objectArray[*].property",
"equals": "value2"
},
{
"field": "Microsoft.Test/resourceType/objectArray[*].nestedArray[*]",
"greater": 2
}
]
}
},
"equals": 1
}
反覆運算 | 選取的值 | where 評估結果 |
---|---|---|
1 | Microsoft.Test/resourceType/objectArray[*].property =>"value1" Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =,> 1 2 |
false |
2 | Microsoft.Test/resourceType/objectArray[*].property =>"value2" Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =,> 3 4 |
true |
count
會傳回 1
。
根據完整要求內容評估 where
運算式 (只會變更目前列舉的陣列成員),即代表 where
條件也可參考陣列外部的欄位:
{
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*]",
"where": {
"field": "tags.env",
"equals": "prod"
}
},
"equals": 0
}
反覆運算 | 選取的值 | where 評估結果 |
---|---|---|
1 | tags.env =>"prod" |
true |
2 | tags.env =>"prod" |
true |
巢狀計數運算式可用來將條件套用至巢狀陣列欄位。 例如,下列條件會檢查 objectArray[*]
陣列是否只有兩個具備 nestedArray[*]
且包含一個或多個成員的成員:
{
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*]",
"where": {
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*].nestedArray[*]"
},
"greaterOrEquals": 1
}
},
"equals": 2
}
反覆運算 | 選取的值 | 巢狀計數評估結果 |
---|---|---|
1 | Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =>1 , 2 |
nestedArray[*] 有 2 個成員 =>true |
2 | Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =>3 , 4 |
nestedArray[*] 有 2 個成員 =>true |
由於 objectArray[*]
的兩個成員都有含兩個成員的子陣列 nestedArray[*]
,因此外部計數運算式會傳回 2
。
更複雜的範例:檢查 objectArray[*]
陣列是否只有兩個成員,其中 nestedArray[*]
的任一成員等於 2
或 3
:
{
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*]",
"where": {
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*].nestedArray[*]",
"where": {
"field": "Microsoft.Test/resourceType/objectArray[*].nestedArray[*]",
"in": [
2,
3
]
}
},
"greaterOrEquals": 1
}
},
"equals": 2
}
反覆運算 | 選取的值 | 巢狀計數評估結果 |
---|---|---|
1 | Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =>1 , 2 |
nestedArray[*] 包含 2 =>true |
2 | Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =>3 , 4 |
nestedArray[*] 包含 3 =>true |
由於 objectArray[*]
的兩個成員都有包含 2
或 3
的子陣列 nestedArray[*]
,因此外部計數運算式會傳回 2
。
注意
巢狀欄位計數運算式只能參考巢狀陣列。 例如,參考 Microsoft.Test/resourceType/objectArray[*]
的計數運算式可以有以巢狀陣列 Microsoft.Test/resourceType/objectArray[*].nestedArray[*]
為目標的巢狀計數,但不能有以 Microsoft.Test/resourceType/stringArray[*]
為目標的巢狀計數運算式。
使用範本函式存取目前的陣列成員
使用範本函式時,請使用 current()
函式來存取目前陣列成員的值或其任何屬性的值。 若要存取目前陣列成員的值,請將 count.field
中所定義的別名或任何其子別名作為引數傳遞至 current()
函式。 例如:
{
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*]",
"where": {
"value": "[current('Microsoft.Test/resourceType/objectArray[*].property')]",
"like": "value*"
}
},
"equals": 2
}
反覆運算 | current() 傳回值 |
where 評估結果 |
---|---|---|
1 | objectArray[*] 的第一個成員的 property 值:value1 |
true |
2 | objectArray[*] 的第一個成員的 property 值:value2 |
true |
條件所在的欄位函式
只要計數運算式不在存在條件內,便可使用 field()
函式來取得目前陣列成員的值 (field()
函式一律參考 if 條件所評估的資源)。 參考評估陣列時的行為 field()
是以下列概念為基礎:
- 陣列別名會解析為從所有陣列成員選取的值集合。
- 參考陣列別名的
field()
函式會傳回含指定值的陣列。 - 參考
where
條件內計算的陣列別名會傳回集合,其中包含從目前反覆運算中評估的陣列成員所選取的單一值。
此行為代表在 where
條件中參考含 field()
函式的計數陣列成員時,其會傳回含單一成員的陣列。 雖然此行為可能並不直覺,但與數位別名一律傳回所選屬性集合的想法一致。 以下是範例:
{
"count": {
"field": "Microsoft.Test/resourceType/stringArray[*]",
"where": {
"field": "Microsoft.Test/resourceType/stringArray[*]",
"equals": "[field('Microsoft.Test/resourceType/stringArray[*]')]"
}
},
"equals": 0
}
反覆運算 | 運算式值 | where 評估結果 |
---|---|---|
1 | Microsoft.Test/resourceType/stringArray[*] = = =>"a" [field('Microsoft.Test/resourceType/stringArray[*]')] >[ "a" ] |
false |
2 | Microsoft.Test/resourceType/stringArray[*] = = =>"b" [field('Microsoft.Test/resourceType/stringArray[*]')] >[ "b" ] |
false |
3 | Microsoft.Test/resourceType/stringArray[*] = = =>"c" [field('Microsoft.Test/resourceType/stringArray[*]')] >[ "c" ] |
false |
因此,當需要使用 field()
函式存取計數陣列別名時,做法是使用 first()
範本函式加以包裝:
{
"count": {
"field": "Microsoft.Test/resourceType/stringArray[*]",
"where": {
"field": "Microsoft.Test/resourceType/stringArray[*]",
"equals": "[first(field('Microsoft.Test/resourceType/stringArray[*]'))]"
}
}
}
反覆運算 | 運算式值 | where 評估結果 |
---|---|---|
1 | Microsoft.Test/resourceType/stringArray[*] = = =>"a" [first(field('Microsoft.Test/resourceType/stringArray[*]'))] >"a" |
true |
2 | Microsoft.Test/resourceType/stringArray[*] = = =>"b" [first(field('Microsoft.Test/resourceType/stringArray[*]'))] >"b" |
true |
3 | Microsoft.Test/resourceType/stringArray[*] = = =>"c" [first(field('Microsoft.Test/resourceType/stringArray[*]'))] >"c" |
true |
如需實用範例,請參閱欄位計數範例。
修改陣列
在建立或更新期間,append 和 modify 會改變資源上的屬性。 當您使用陣列屬性時,這些效果的行為取決於作業是否嘗試修改 [*]
別名:
注意
搭配別名使用 modify
效果目前為預覽狀態。
Alias | 影響 | 結果 |
---|---|---|
Microsoft.Storage/storageAccounts/networkAcls.ipRules |
append |
若有遺漏,Azure 原則會附加效果詳細資料中指定的完整陣列。 |
Microsoft.Storage/storageAccounts/networkAcls.ipRules |
modify 含 add 作業 |
若有遺漏,Azure 原則會附加效果詳細資料中指定的完整陣列。 |
Microsoft.Storage/storageAccounts/networkAcls.ipRules |
modify 含 addOrReplace 作業 |
若有遺漏,Azure 原則會附加效果詳細資料中指定的完整陣列或取代現有陣列。 |
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*] |
append |
Azure 原則會附加效果詳細資料中指定的陣列成員。 |
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*] |
modify 含 add 作業 |
Azure 原則會附加效果詳細資料中指定的陣列成員。 |
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*] |
modify 含 addOrReplace 作業 |
Azure 原則會移除所有現有的陣列成員,並附加效果詳細資料中指定的陣列成員。 |
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].action |
append |
Azure 原則會將值附加至每個陣列成員的 action 屬性。 |
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].action |
modify 含 add 作業 |
Azure 原則會將值附加至每個陣列成員的 action 屬性。 |
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].action |
modify 含 addOrReplace 作業 |
Azure 原則會附加或取代每個陣列成員的現有 action 屬性。 |
如需詳細資訊,請參閱附加範例。
其他別名範例
建議使用欄位計數表示式來檢查要求內容中的陣列成員是否符合allOf
anyOf
條件。 對於某些簡單的條件,您可以使用字段存取子搭配陣列別名來達成相同的結果,如參考數位成員集合中所述。 此模式在超過允許 count
表達式限制的原則規則中很有用。 以下是常見使用案例的範例:
下列案例數據表的範例原則規則:
"policyRule": {
"if": {
"allOf": [
{
"field": "Microsoft.Storage/storageAccounts/networkAcls.ipRules",
"exists": "true"
},
<-- Condition (see table below) -->
]
},
"then": {
"effect": "[parameters('effectType')]"
}
}
下列 ipRules
案例數據表的陣列如下所示:
"ipRules": [
{
"value": "127.0.0.1",
"action": "Allow"
},
{
"value": "192.168.1.1",
"action": "Allow"
}
]
針對下列每個條件範例,將 取代 <field>
為 "field": "Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].value"
。
下列結果是條件組合的結果,以及先前現有值的範例原則規則和陣列:
Condition | 結果 | 案例 | 說明 |
---|---|---|---|
{<field>,"notEquals":"127.0.0.1"} |
Nothing | 無相符 | 一個數位元素會評估為 false (127.0.0.1 != 127.0.0.1 ) 和一個評估為 true (127.0.0.1 != 192.168.1.1 ),因此 notEquals 條件為 false 且不會觸發效果。 |
{<field>,"notEquals":"10.0.4.1"} |
原則效果 | 無相符 | 這兩個陣列元素都會評估為 true (10.0.4.1 != 127.0.0.1 and 10.0.4.1 != 192.168.1.1 ),因此 notEquals 條件為 true 且會觸發效果。 |
"not":{<field>,"notEquals":"127.0.0.1" } |
原則效果 | 一或多個作業 | 一個數位元素會評估為 false (127.0.0.1 != 127.0.0.1 ) 和一個評估為 true (127.0.0.1 != 192.168.1.1 ),因此 notEquals 條件為 false。 邏輯運算符會評估為 true(不是 false),因此會觸發效果。 |
"not":{<field>,"notEquals":"10.0.4.1"} |
Nothing | 一或多個作業 | 這兩個陣列元素都會評估為 true (10.0.4.1 != 127.0.0.1 and 10.0.4.1 != 192.168.1.1 ),因此 notEquals 條件為 true。 邏輯運算符會評估為 false(不是 true),因此不會觸發效果。 |
"not":{<field>,"Equals":"127.0.0.1"} |
原則效果 | 不是全部相符 | 一個數位元素會評估為 true (127.0.0.1 == 127.0.0.1 ) 和一個評估為 false (127.0.0.1 == 192.168.1.1 ),因此 Equals 條件為 false。 邏輯運算符會評估為 true(不是 false),因此會觸發效果。 |
"not":{<field>,"Equals":"10.0.4.1"} |
原則效果 | 不是全部相符 | 這兩個陣列元素都會評估為 false (10.0.4.1 == 127.0.0.1 and 10.0.4.1 == 192.168.1.1 ),因此 Equals 條件為 false。 邏輯運算符會評估為 true(不是 false),因此會觸發效果。 |
{<field>,"Equals":"127.0.0.1"} |
Nothing | 全部相符 | 一個數位元素會評估為 true (127.0.0.1 == 127.0.0.1 ) 和一個評估為 false (127.0.0.1 == 192.168.1.1 ),因此 Equals 條件為 false 且不會觸發效果。 |
{<field>,"Equals":"10.0.4.1"} |
Nothing | 全部相符 | 這兩個陣列元素都會評估為 false (10.0.4.1 == 127.0.0.1 and 10.0.4.1 == 192.168.1.1 ),因此 Equals 條件為 false 且不會觸發效果。 |
下一步
- 在 Azure 原則範例檢閱範例。
- 檢閱 Azure 原則定義結構。
- 檢閱了解原則效果。
- 了解如何以程式設計方式建立原則。
- 了解如何補救不符合規範的資源。
- 透過使用 Azure 管理群組來組織資源來檢閱何謂管理群組。