Tworzenie zasad dla właściwości tablicy w zasobach platformy Azure
Właściwości usługi Azure Resource Manager są często definiowane jako ciągi i wartości logiczne. Gdy istnieje relacja jeden do wielu, właściwości złożone są zamiast tego definiowane jako tablice. W usłudze Azure Policy tablice są używane na kilka różnych sposobów:
- Typ parametru definicji, aby udostępnić wiele opcji.
- Część reguły zasad przy użyciu warunków
in
lubnotIn
. - Część reguły zasad, która zlicza, ile elementów członkowskich tablicy spełnia warunek.
- W dołączaniu i modyfikowaniu efektów w celu zaktualizowania istniejącej tablicy
W tym artykule opisano każde użycie przez usługę Azure Policy i przedstawiono kilka przykładowych definicji.
Tablice parametrów
Definiowanie tablicy parametrów
Definiowanie parametru jako tablicy umożliwia elastyczność zasad, gdy wymagana jest więcej niż jedna wartość. Ta definicja zasad umożliwia dowolną lokalizację dla parametru allowedLocations
i wartości domyślnej eastus2:
"parameters": {
"allowedLocations": {
"type": "string",
"metadata": {
"description": "The list of allowed locations for resources.",
"displayName": "Allowed locations",
"strongType": "location"
},
"defaultValue": "eastus2"
}
}
Podobnie jak type
w przypadku ciągu, podczas przypisywania zasad można ustawić tylko jedną wartość. Jeśli te zasady są przypisane, zasoby w zakresie są dozwolone tylko w jednym regionie świadczenia usługi Azure. Większość definicji zasad musi zezwalać na listę zatwierdzonych opcji, takich jak umożliwienie eastus2, eastus i westus2.
Aby utworzyć definicję zasad, aby zezwolić na wiele opcji, użyj tablicy type
. Te same zasady można przepisać w następujący sposób:
"parameters": {
"allowedLocations": {
"type": "array",
"metadata": {
"description": "The list of allowed locations for resources.",
"displayName": "Allowed locations",
"strongType": "location"
},
"defaultValue": [
"eastus2"
],
"allowedValues": [
"eastus2",
"eastus",
"westus2"
]
}
}
Uwaga
Po zapisaniu type
definicji zasad nie można zmienić właściwości parametru.
Ta nowa definicja parametru przyjmuje więcej niż jedną wartość podczas przypisywania zasad. Po zdefiniowaniu właściwości allowedValues
tablicy wartości dostępne podczas przypisywania są dodatkowo ograniczone do wstępnie zdefiniowanej listy opcji. Użycie elementu allowedValues
jest opcjonalne.
Przekazywanie wartości do tablicy parametrów podczas przypisywania
Po przypisaniu zasad za pośrednictwem witryny Azure Portal parametr tablicy type
jest wyświetlany jako pojedyncze pole tekstowe. Wskazówka mówi Use ; to separate values. (e.g. London;New York)
. Aby przekazać dozwolone wartości lokalizacji eastus2, eastus i westus2 do parametru, użyj następującego ciągu:
eastus2;eastus;westus2
Format wartości parametru różni się w przypadku korzystania z interfejsu wiersza polecenia platformy Azure, programu Azure PowerShell lub interfejsu API REST. Wartości są przekazywane przez ciąg JSON, który zawiera również nazwę parametru.
{
"allowedLocations": {
"value": [
"eastus2",
"eastus",
"westus2"
]
}
}
Aby użyć tego ciągu dla każdego zestawu SDK, użyj następujących poleceń:
- Interfejs wiersza polecenia platformy Azure: polecenie az policy assignment create z parametrem
params
. - Azure PowerShell: polecenie cmdlet New-AzPolicyAssignment z parametrem
PolicyParameter
. - Interfejs API REST: w operacji tworzenia PUT w ramach treści żądania jako wartości
properties.parameters
właściwości.
Używanie tablic w warunkach
In i notIn
Warunki in
i notIn
działają tylko z wartościami tablicy. Sprawdzają istnienie wartości w tablicy. Tablica może być tablicą literału JSON lub odwołaniem do parametru tablicy. Na przykład:
{
"field": "tags.environment",
"in": [
"dev",
"test"
]
}
{
"field": "location",
"notIn": "[parameters('allowedLocations')]"
}
Liczba wartości
Wyrażenie licznika wartości zlicza liczbę elementów członkowskich tablicy spełniających warunek. Zapewnia ona możliwość wielokrotnego oceniania tego samego warunku przy użyciu różnych wartości w każdej iteracji. Na przykład następujący warunek sprawdza, czy nazwa zasobu jest zgodna z dowolnym wzorcem z tablicy wzorców:
{
"count": {
"value": [
"test*",
"dev*",
"prod*"
],
"name": "pattern",
"where": {
"field": "name",
"like": "[current('pattern')]"
}
},
"greater": 0
}
Aby ocenić wyrażenie, usługa Azure Policy oblicza where
warunek trzy razy, raz dla każdego elementu członkowskiego [ "test*", "dev*", "prod*" ]
, zliczając, ile razy został obliczony na true
wartość . W każdej iteracji wartość bieżącego elementu członkowskiego tablicy jest sparowana z nazwą indeksu zdefiniowaną pattern
przez count.name
. Następnie można odwoływać się do tej wartości wewnątrz where
warunku, wywołując specjalną funkcję szablonu: current('pattern')
.
Iteracja | current('pattern') zwrócona wartość |
---|---|
1 | "test*" |
2 | "dev*" |
3 | "prod*" |
Warunek ma wartość true tylko wtedy, gdy liczba wyników jest większa niż 0.
Aby uczynić poprzedni warunek bardziej ogólnym, użyj parameters
odwołania zamiast tablicy literałów:
{
"count": {
"value": "[parameters('patterns')]",
"name": "pattern",
"where": {
"field": "name",
"like": "[current('pattern')]"
}
},
"greater": 0
}
Jeśli wyrażenie nie znajduje się w żadnym innym wyrażeniuvalue count
, jest opcjonalne, count.name
a current()
funkcja może być używana bez żadnych argumentów:count
{
"count": {
"value": "[parameters('patterns')]",
"where": {
"field": "name",
"like": "[current()]"
}
},
"greater": 0
}
Obsługują value count
również tablice złożonych obiektów, co pozwala na bardziej złożone warunki. Na przykład następujący warunek definiuje żądaną wartość tagu dla każdego wzorca nazwy i sprawdza, czy nazwa zasobu jest zgodna ze wzorcem, ale nie ma wymaganej wartości tagu:
{
"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
}
Aby zapoznać się z przydatnymi przykładami, zobacz przykłady liczby wartości.
Odwoływanie się do właściwości zasobu tablicy
Wiele przypadków użycia wymaga pracy z właściwościami tablicy w ocenianym zasobie. Niektóre scenariusze wymagają odwoływania się do całej tablicy (na przykład sprawdzania jego długości). Inne wymagają zastosowania warunku do każdego elementu członkowskiego tablicy (na przykład upewnij się, że wszystkie reguły zapory blokują dostęp z Internetu). Zrozumienie różnych sposobów, w jaki usługa Azure Policy może odwoływać się do właściwości zasobów i jak zachowują się one podczas odwoływania się do właściwości tablicy, jest kluczem do pisania warunków obejmujących te scenariusze.
Odwoływanie się do właściwości zasobów
Właściwości zasobów można odwoływać się do usługi Azure Policy przy użyciu aliasów Istnieją dwa sposoby odwołowania się do wartości właściwości zasobu w usłudze Azure Policy:
Użyj warunku pola , aby sprawdzić, czy wszystkie wybrane właściwości zasobu spełniają warunek. Przykład:
{ "field": "Microsoft.Test/resourceType/property", "equals": "value" }
Użyj
field()
funkcji, aby uzyskać dostęp do wartości właściwości. Przykład:{ "value": "[take(field('Microsoft.Test/resourceType/property'), 7)]", "equals": "prefix_" }
Warunek pola ma niejawne allOf
zachowanie. Jeśli alias reprezentuje kolekcję wartości, sprawdza, czy wszystkie poszczególne wartości spełniają warunek. Funkcja field()
zwraca wartości reprezentowane przez alias as-is, który następnie może być manipulowany przez inne funkcje szablonu.
Odwoływanie się do pól tablicy
Właściwości zasobu tablicy są reprezentowane przez dwa różne typy aliasów. Jeden normalny alias i aliasy tablicy , które zostały [*]
do niego dołączone:
Microsoft.Test/resourceType/stringArray
Microsoft.Test/resourceType/stringArray[*]
Odwoływanie się do tablicy
Pierwszy alias reprezentuje pojedynczą wartość, wartość stringArray
właściwości z zawartości żądania. Ponieważ wartość tej właściwości jest tablicą, nie jest przydatna w warunkach zasad. Na przykład:
{
"field": "Microsoft.Test/resourceType/stringArray",
"equals": "..."
}
Ten warunek porównuje całą stringArray
tablicę z pojedynczą wartością ciągu. Większość warunków, w tym equals
, akceptuje tylko wartości ciągów, więc nie ma zbyt wiele zastosowania podczas porównywania tablicy z ciągiem. Głównym scenariuszem, w którym odwoływanie się do właściwości tablicy jest przydatne podczas sprawdzania, czy istnieje:
{
"field": "Microsoft.Test/resourceType/stringArray",
"exists": "true"
}
field()
W przypadku funkcji zwracana wartość jest tablicą z zawartości żądania, która może być następnie używana z dowolnymi obsługiwanymi funkcjami szablonu, które akceptują argumenty tablicowe. Na przykład następujący warunek sprawdza, czy długość wartości stringArray
jest większa niż 0:
{
"value": "[length(field('Microsoft.Test/resourceType/stringArray'))]",
"greater": 0
}
Odwoływanie się do kolekcji składowych tablicy
Aliasy używające [*]
składni reprezentują kolekcję wartości właściwości wybranych z właściwości tablicy, która różni się od wybierania samej właściwości tablicy. Na przykład Microsoft.Test/resourceType/stringArray[*]
zwraca kolekcję zawierającą wszystkie elementy członkowskie elementu stringArray
. Jak wspomniano wcześniej, warunek sprawdza, field
czy wszystkie wybrane właściwości zasobu spełniają warunek, dlatego następujący warunek jest spełniony tylko wtedy, gdy wszystkie elementy członkowskie stringArray
są równe "value"
.
{
"field": "Microsoft.Test/resourceType/stringArray[*]",
"equals": "value"
}
Jeśli tablica jest pusta, warunek ma wartość true, ponieważ żaden element członkowski tablicy nie jest naruszony. W tym scenariuszu zaleca się użycie wyrażenia count. Jeśli tablica zawiera obiekty, [*]
alias może służyć do wybierania wartości określonej właściwości z każdego elementu członkowskiego tablicy. Przykład:
{
"field": "Microsoft.Test/resourceType/objectArray[*].property",
"equals": "value"
}
Ten warunek ma wartość true, jeśli wartości wszystkich property
właściwości we właściwościach objectArray
są równe "value"
. Aby uzyskać więcej przykładów, zobacz Więcej przykładów aliasów.
W przypadku używania field()
funkcji do odwołowania się do aliasu tablicy zwracana wartość jest tablicą wszystkich wybranych wartości. To zachowanie oznacza, że typowy przypadek field()
użycia funkcji, możliwość stosowania funkcji szablonu do wartości właściwości zasobu jest ograniczona. Jedynymi funkcjami szablonu, które mogą być używane w tym przypadku, są te, które akceptują argumenty tablicowe. Na przykład można uzyskać długość tablicy za pomocą [length(field('Microsoft.Test/resourceType/objectArray[*].property'))]
polecenia . Jednak bardziej złożone scenariusze, takie jak stosowanie funkcji szablonu do każdego elementu członkowskiego tablicy i porównywanie jej z żądaną wartością, są możliwe tylko w przypadku używania count
wyrażenia. Aby uzyskać więcej informacji, zobacz Wyrażenie liczby pól.
Aby podsumować, zobacz następującą przykładowy zawartość zasobu i wybrane wartości zwracane przez różne aliasy:
{
"tags": {
"env": "prod"
},
"properties": {
"stringArray": [
"a",
"b",
"c"
],
"objectArray": [
{
"property": "value1",
"nestedArray": [
1,
2
]
},
{
"property": "value2",
"nestedArray": [
3,
4
]
}
]
}
}
W przypadku użycia warunku pola w przykładowej zawartości zasobu wyniki są następujące:
Alias | Wybrane wartości |
---|---|
Microsoft.Test/resourceType/missingArray |
null |
Microsoft.Test/resourceType/missingArray[*] |
Pusta kolekcja wartości. |
Microsoft.Test/resourceType/missingArray[*].property |
Pusta kolekcja wartości. |
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 |
Gdy używasz field()
funkcji w przykładowej zawartości zasobu, wyniki są następujące:
Wyrażenie | Zwrócona wartość |
---|---|
[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] |
Wyrażenia liczby pól
Wyrażenia liczby pól zliczają, ile elementów członkowskich tablicy spełnia warunek i porównuje liczbę z wartością docelową. Count
jest bardziej intuicyjna i wszechstronna do oceniania tablic w porównaniu z field
warunkami. Składnia jest następująca:
{
"count": {
"field": <[*
] alias>,
"where": <optional policy condition expression>
},
"equals|greater|less|any other operator": <target value>
}
W przypadku użycia bez where
warunku count
po prostu zwraca długość tablicy. W przypadku przykładowej zawartości zasobu z poprzedniej sekcji następujące count
wyrażenie jest oceniane na true
wartość , ponieważ stringArray
ma trzy elementy członkowskie:
{
"count": {
"field": "Microsoft.Test/resourceType/stringArray[*]"
},
"equals": 3
}
To zachowanie działa również z zagnieżdżonych tablic. Na przykład następujące count
wyrażenie jest obliczane, true
ponieważ w nestedArray
tablicach znajdują się cztery elementy członkowskie tablicy:
{
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*].nestedArray[*]"
},
"greaterOrEquals": 4
}
Moc count
jest w where
stanie. Po count
określeniu usługa Azure Policy wylicza elementy członkowskie tablicy i oblicza je względem warunku, zliczając liczbę elementów członkowskich tablicy obliczonych na true
wartość . W szczególności w każdej iteracji where
oceny warunku usługa Azure Policy wybiera jeden element członkowski i
tablicy i ocenia zawartość zasobu względem where
warunku tak, jakby i
była jedynym elementem członkowskim tablicy. Posiadanie tylko jednego elementu członkowskiego tablicy dostępnego w każdej iteracji umożliwia zastosowanie złożonych warunków dla każdego pojedynczego elementu członkowskiego tablicy.
Przykład:
{
"count": {
"field": "Microsoft.Test/resourceType/stringArray[*]",
"where": {
"field": "Microsoft.Test/resourceType/stringArray[*]",
"equals": "a"
}
},
"equals": 1
}
Aby ocenić count
wyrażenie, usługa Azure Policy oblicza where
warunek trzy razy, raz dla każdego elementu członkowskiego stringArray
, zliczając, ile razy został obliczony na true
wartość . where
Gdy warunek odwołuje się do Microsoft.Test/resourceType/stringArray[*]
składowych tablicy, zamiast wybierać wszystkie elementy członkowskie stringArray
, wybiera tylko jeden element członkowski tablicy za każdym razem:
Iteracja | Wybrane Microsoft.Test/resourceType/stringArray[*] wartości |
where Wynik oceny |
---|---|---|
1 | "a" |
true |
2 | "b" |
false |
3 | "c" |
false |
Zwraca wartość count
1
.
Oto bardziej złożone wyrażenie:
{
"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
}
Iteracja | Wybrane wartości | where Wynik oceny |
---|---|---|
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 |
Zwraca wartość count
1
.
Fakt, że where
wyrażenie jest oceniane względem całej zawartości żądania (ze zmianami tylko do składowej tablicy, która jest obecnie wyliczana), oznacza, że where
warunek może również odwoływać się do pól spoza tablicy:
{
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*]",
"where": {
"field": "tags.env",
"equals": "prod"
}
},
"equals": 0
}
Iteracja | Wybrane wartości | where Wynik oceny |
---|---|---|
1 | tags.env =>"prod" |
true |
2 | tags.env =>"prod" |
true |
Wyrażenia liczby zagnieżdżonych mogą służyć do stosowania warunków do zagnieżdżonych pól tablicy. Na przykład następujący warunek sprawdza, czy tablica objectArray[*]
ma dokładnie dwa elementy członkowskie zawierające nestedArray[*]
jeden lub więcej elementów członkowskich:
{
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*]",
"where": {
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*].nestedArray[*]"
},
"greaterOrEquals": 1
}
},
"equals": 2
}
Iteracja | Wybrane wartości | Wynik oceny liczby zagnieżdżonych |
---|---|---|
1 | Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =>1 , 2 |
nestedArray[*] ma 2 elementy członkowskie =>true |
2 | Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =>3 , 4 |
nestedArray[*] ma 2 elementy członkowskie =>true |
Ponieważ oba elementy członkowskie objectArray[*]
mają tablicę nestedArray[*]
podrzędną z dwoma elementami członkowskimi, wyrażenie liczby zewnętrznej zwraca wartość 2
.
Bardziej złożony przykład: sprawdź, czy tablica objectArray[*]
ma dokładnie dwa elementy członkowskie z dowolnymi elementami nestedArray[*]
członkowskimi równymi 2
lub 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
}
Iteracja | Wybrane wartości | Wynik oceny liczby zagnieżdżonych |
---|---|---|
1 | Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =>1 , 2 |
nestedArray[*] contains 2 =>true |
2 | Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =>3 , 4 |
nestedArray[*] contains 3 =>true |
Ponieważ oba elementy członkowskie objectArray[*]
mają tablicę nestedArray[*]
podrzędną zawierającą wartość 2
lub 3
, wyrażenie liczby zewnętrznej zwraca wartość 2
.
Uwaga
Wyrażenia liczby zagnieżdżonych pól mogą odwoływać się tylko do zagnieżdżonych tablic. Na przykład wyrażenie licznika odwołujące się do może mieć zagnieżdżona liczba odwołująca się do Microsoft.Test/resourceType/objectArray[*]
zagnieżdżonej tablicy Microsoft.Test/resourceType/objectArray[*].nestedArray[*]
, ale nie może mieć zagnieżdżonego wyrażenia liczbowego odwołującego się do Microsoft.Test/resourceType/stringArray[*]
.
Uzyskiwanie dostępu do bieżącego elementu członkowskiego tablicy za pomocą funkcji szablonu
W przypadku korzystania z funkcji szablonu użyj current()
funkcji , aby uzyskać dostęp do wartości bieżącego elementu członkowskiego tablicy lub wartości dowolnej z jego właściwości. Aby uzyskać dostęp do wartości bieżącego elementu członkowskiego tablicy, przekaż alias zdefiniowany w count.field
elemencie lub dowolny z jego aliasów podrzędnych jako argument funkcji current()
. Na przykład:
{
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*]",
"where": {
"value": "[current('Microsoft.Test/resourceType/objectArray[*].property')]",
"like": "value*"
}
},
"equals": 2
}
Iteracja | current() zwrócona wartość |
where Wynik oceny |
---|---|---|
1 | Wartość property w pierwszym elemencie członkowskim elementu objectArray[*] : value1 |
true |
2 | Wartość property w pierwszym elemencie członkowskim elementu objectArray[*] : value2 |
true |
Funkcja field wewnątrz miejsca, w którym warunki
Funkcja field()
może również służyć do uzyskiwania dostępu do wartości bieżącego elementu członkowskiego tablicy, o ile wyrażenie count nie znajduje się wewnątrz warunku istnienia (field()
funkcja zawsze odwołuje się do zasobu ocenianego w warunku if ). Zachowanie field()
podczas odwoływania się do ocenianej tablicy opiera się na następujących pojęciach:
- Aliasy tablic są rozpoznawane jako kolekcja wartości wybranych ze wszystkich elementów członkowskich tablicy.
field()
funkcje odwołujące się do aliasów tablicy zwracają tablicę z wybranymi wartościami.- Odwołanie do zliczanego aliasu tablicy wewnątrz
where
warunku zwraca kolekcję z pojedynczą wartością wybraną z elementu członkowskiego tablicy, który jest obliczany w bieżącej iteracji.
To zachowanie oznacza, że w przypadku odwoływania się do zliczanego elementu członkowskiego tablicy z funkcją field()
wewnątrz where
warunku zwraca tablicę z jednym elementem członkowskim. Chociaż to zachowanie może nie być intuicyjne, jest zgodne z ideą, że aliasy tablic zawsze zwracają kolekcję wybranych właściwości. Oto przykład:
{
"count": {
"field": "Microsoft.Test/resourceType/stringArray[*]",
"where": {
"field": "Microsoft.Test/resourceType/stringArray[*]",
"equals": "[field('Microsoft.Test/resourceType/stringArray[*]')]"
}
},
"equals": 0
}
Iteracja | Wartości wyrażeń | where Wynik oceny |
---|---|---|
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 |
W związku z tym, gdy istnieje potrzeba uzyskania dostępu do wartości zliczanego aliasu tablicy z funkcją field()
first()
, w tym celu należy opakować ją za pomocą funkcji szablonu:
{
"count": {
"field": "Microsoft.Test/resourceType/stringArray[*]",
"where": {
"field": "Microsoft.Test/resourceType/stringArray[*]",
"equals": "[first(field('Microsoft.Test/resourceType/stringArray[*]'))]"
}
}
}
Iteracja | Wartości wyrażeń | where Wynik oceny |
---|---|---|
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 |
Aby zapoznać się z przydatnymi przykładami, zobacz Przykłady liczby pól.
Modyfikowanie tablic
Dołączanie i modyfikowanie właściwości zmiany zasobu podczas tworzenia lub aktualizowania. Podczas pracy z właściwościami tablicy zachowanie tych efektów zależy od tego, czy operacja próbuje zmodyfikować [*]
alias, czy nie:
Uwaga
modify
Używanie efektu z aliasami jest obecnie dostępne w wersji zapoznawczej.
Alias | Efekt | Wynik |
---|---|---|
Microsoft.Storage/storageAccounts/networkAcls.ipRules |
append |
Usługa Azure Policy dołącza całą tablicę określoną w szczegółach efektu, jeśli jej brakuje. |
Microsoft.Storage/storageAccounts/networkAcls.ipRules |
modify z operacją add |
Usługa Azure Policy dołącza całą tablicę określoną w szczegółach efektu, jeśli jej brakuje. |
Microsoft.Storage/storageAccounts/networkAcls.ipRules |
modify z operacją addOrReplace |
Usługa Azure Policy dołącza całą tablicę określoną w szczegółach efektu, jeśli brakuje lub zastąpi istniejącą tablicę. |
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*] |
append |
Usługa Azure Policy dołącza element członkowski tablicy określony w szczegółach efektu. |
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*] |
modify z operacją add |
Usługa Azure Policy dołącza element członkowski tablicy określony w szczegółach efektu. |
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*] |
modify z operacją addOrReplace |
Usługa Azure Policy usuwa wszystkie istniejące elementy członkowskie tablicy i dołącza element członkowski tablicy określony w szczegółach efektu. |
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].action |
append |
Usługa Azure Policy dołącza wartość do action właściwości każdego elementu członkowskiego tablicy. |
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].action |
modify z operacją add |
Usługa Azure Policy dołącza wartość do action właściwości każdego elementu członkowskiego tablicy. |
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].action |
modify z operacją addOrReplace |
Usługa Azure Policy dołącza lub zastępuje istniejącą action właściwość każdego elementu członkowskiego tablicy. |
Aby uzyskać więcej informacji, zobacz przykłady dołączania.
Więcej przykładów aliasów
Zaleceniem jest użycie wyrażeń liczby pól w celu sprawdzenia, czy anyOf
allOf
elementy członkowskie tablicy w zawartości żądania spełniają warunek. W przypadku niektórych prostych warunków można osiągnąć ten sam wynik przy użyciu metody dostępu do pola z aliasem tablicy, zgodnie z opisem w temacie Odwoływanie się do kolekcji składowych tablicy. Ten wzorzec może być przydatny w regułach zasad, które przekraczają limit dozwolonych count
wyrażeń. Oto przykłady typowych przypadków użycia:
Przykładowa reguła zasad dla następującej tabeli scenariuszy:
"policyRule": {
"if": {
"allOf": [
{
"field": "Microsoft.Storage/storageAccounts/networkAcls.ipRules",
"exists": "true"
},
<-- Condition (see table below) -->
]
},
"then": {
"effect": "[parameters('effectType')]"
}
}
Tablica jest następująca ipRules
w poniższej tabeli scenariuszy:
"ipRules": [
{
"value": "127.0.0.1",
"action": "Allow"
},
{
"value": "192.168.1.1",
"action": "Allow"
}
]
Dla każdego z poniższych przykładów warunku zastąp wartość <field>
"field": "Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].value"
.
Następujące wyniki są wynikiem kombinacji warunku oraz przykładowej reguły zasad i tablicy poprzednich istniejących wartości:
Stan | Wynik | Scenariusz | Objaśnienie |
---|---|---|---|
{<field>,"notEquals":"127.0.0.1"} |
Nic | Brak dopasowania | Jeden element tablicy ocenia wartość false (127.0.0.1 != 127.0.0.1 ) i jedną jako true (127.0.0.1 != 192.168.1.1 ), więc notEquals warunek jest fałszywy i efekt nie jest wyzwalany. |
{<field>,"notEquals":"10.0.4.1"} |
Efekt zasad | Brak dopasowania | Oba elementy tablicy są obliczane jako true (10.0.4.1 != 127.0.0.1 and 10.0.4.1 != 192.168.1.1 ), więc notEquals warunek jest spełniony , a efekt jest wyzwalany. |
"not":{<field>,"notEquals":"127.0.0.1" } |
Efekt zasad | Jedno lub więcej dopasowań | Jeden element tablicy ocenia wartość false (127.0.0.1 != 127.0.0.1 ) i jedną jako true (127.0.0.1 != 192.168.1.1 ), więc notEquals warunek ma wartość false. Operator logiczny ocenia wartość true (a nie false), więc efekt jest wyzwalany. |
"not":{<field>,"notEquals":"10.0.4.1"} |
Nic | Jedno lub więcej dopasowań | Oba elementy tablicy mają wartość true (10.0.4.1 != 127.0.0.1 and 10.0.4.1 != 192.168.1.1 ), więc notEquals warunek ma wartość true. Operator logiczny ocenia wartość false (nie prawda), więc efekt nie jest wyzwalany. |
"not":{<field>,"Equals":"127.0.0.1"} |
Efekt zasad | Nie wszystkie dopasowania | Jeden element tablicy ocenia wartość true (127.0.0.1 == 127.0.0.1 ) i jedną jako false (127.0.0.1 == 192.168.1.1 ), więc Equals warunek ma wartość false. Operator logiczny ocenia wartość true (a nie false), więc efekt jest wyzwalany. |
"not":{<field>,"Equals":"10.0.4.1"} |
Efekt zasad | Nie wszystkie dopasowania | Oba elementy tablicy są obliczane jako false (10.0.4.1 == 127.0.0.1 and 10.0.4.1 == 192.168.1.1 ), więc Equals warunek ma wartość false. Operator logiczny ocenia wartość true (a nie false), więc efekt jest wyzwalany. |
{<field>,"Equals":"127.0.0.1"} |
Nic | Wszystkie dopasowania | Jeden element tablicy ocenia wartość true (127.0.0.1 == 127.0.0.1 ) i jedną jako false (127.0.0.1 == 192.168.1.1 ), więc Equals warunek jest fałszywy i efekt nie jest wyzwalany. |
{<field>,"Equals":"10.0.4.1"} |
Nic | Wszystkie dopasowania | Oba elementy tablicy są obliczane jako false (10.0.4.1 == 127.0.0.1 and 10.0.4.1 == 192.168.1.1 ), więc Equals warunek jest fałszywy , a efekt nie jest wyzwalany. |
Następne kroki
- Zapoznaj się z przykładami w przykładach usługi Azure Policy.
- Przejrzyj temat Struktura definicji zasad Azure Policy.
- Przejrzyj wyjaśnienie działania zasad.
- Dowiedz się, jak programowo tworzyć zasady.
- Dowiedz się, jak korygować niezgodne zasoby.
- Sprawdź, co to jest grupa zarządzania za pomocą funkcji Organizowanie zasobów przy użyciu grup zarządzania platformy Azure.