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 korzystająca z warunków w elem.
- 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ą pojedynczą lokalizację parametru allowedLocations i wartości domyślne eastus2:
"parameters": {
"allowedLocations": {
"type": "string",
"metadata": {
"description": "The list of allowed locations for resources.",
"displayName": "Allowed locations",
"strongType": "location"
},
"defaultValue": "eastus2"
}
}
Ponieważ typ był ciągiem, 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 typu tablicy. 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 definicji zasad nie można zmienić właściwości typu dla parametru.
Ta nowa definicja parametru przyjmuje więcej niż jedną wartość podczas przypisywania zasad. Po zdefiniowaniu właściwości tablicy allowedValues wartości dostępne podczas przypisywania są dodatkowo ograniczone do wstępnie zdefiniowanej listy opcji. Użycie wartości allowedValues jest opcjonalne.
Przekazywanie wartości do tablicy parametrów podczas przypisywania
Podczas przypisywania zasad za pośrednictwem witryny Azure Portal parametr tablicy typów jest wyświetlany jako pojedyncze pole tekstowe. Wskazówka mówi : "Użyj ; aby oddzielić wartości. (np. Londyn; Nowy Jork)". 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 parametrami parametrów
- Azure PowerShell: polecenie cmdlet New-AzPolicyAssignment z parametrem PolicyParameter
- Interfejs API REST: w operacji tworzenia PUT jako część treści żądania jako wartość właściwości properties.parameters
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 warunek powyżej był bardziej ogólny, użyj odwołania do parametrów zamiast tablicy literałów:
{
"count": {
"value": "[parameters('patterns')]",
"name": "pattern",
"where": {
"field": "name",
"like": "[current('pattern')]"
}
},
"greater": 0
}
Jeśli wyrażenie liczby wartości nie znajduje się w żadnym innym wyrażeniu liczby, jest opcjonalne, count.name
a current()
funkcja może być używana bez żadnych argumentów:
{
"count": {
"value": "[parameters('patterns')]",
"where": {
"field": "name",
"like": "[current()]"
}
},
"greater": 0
}
Liczba wartości obsługuje 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 zachowanie "wszystkie". 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 alias "normalny" 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. W przypadku Microsoft.Test/resourceType/stringArray[*]
elementu funkcja 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 "wartości".
{
"field": "Microsoft.Test/resourceType/stringArray[*]",
"equals": "value"
}
Jeśli tablica jest pusta, warunek zwróci wartość true, ponieważ żaden element członkowski tablicy nie jest niezgodny. 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 Dodatkowe przykłady 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żywania 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 |
W przypadku korzystania z 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 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 tablicy i ocenia zawartość zasobu względem where
warunku, tak jakby i jest 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
, będzie 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.
Dodatkowe przykłady aliasów [*]
Zaleca się użycie wyrażeń liczby pól w celu sprawdzenia, czy "wszystkie" lub "dowolne" elementy członkowskie tablicy w zawartości żądania spełniają warunek. Jednak 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 sekcji Odwoływanie się do kolekcji składowych tablicy. Ten wzorzec może być przydatny w regułach zasad, które przekraczają limit dozwolonych wyrażeń liczbowych . Oto przykłady typowych przypadków użycia:
Przykładowa reguła zasad dla poniższej tabeli scenariuszy:
"policyRule": {
"if": {
"allOf": [
{
"field": "Microsoft.Storage/storageAccounts/networkAcls.ipRules",
"exists": "true"
},
<-- Condition (see table below) -->
]
},
"then": {
"effect": "[parameters('effectType')]"
}
}
Tablica ipRules jest następująca w poniższej tabeli scenariuszy:
"ipRules": [
{
"value": "127.0.0.1",
"action": "Allow"
},
{
"value": "192.168.1.1",
"action": "Allow"
}
]
Dla każdego poniższego przykładu warunku zastąp ciąg <field>
"field": "Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].value"
.
Następujące wyniki są wynikiem kombinacji warunku oraz przykładowej reguły zasad i tablicy istniejących wartości powyżej:
Stan | Wynik | Scenariusz | Objaśnienie |
---|---|---|---|
{<field>,"notEquals":"127.0.0.1"} |
Nic | Brak dopasowania | Jeden element tablicy oblicza wartość false (127.0.0.1 != 127.0.0.1) i jeden jako true (127.0.0.1 != 192.168.1.1), więc warunek notEquals jest fałszywy i efekt nie jest wyzwalany. |
{<field>,"notEquals":"10.0.4.1"} |
Efekt zasad | Brak dopasowania | Oba elementy tablicy mają wartość true (10.0.4.1 != 127.0.0.1 i 10.0.4.1 != 192.168.1.1), więc warunek notEquals jest spełniony i efekt jest wyzwalany. |
"not":{<field>,"notEquals":"127.0.0.1" } |
Efekt zasad | Jedno lub więcej dopasowań | Jeden element tablicy oblicza wartość false (127.0.0.1 != 127.0.0.1) i jeden jako true (127.0.0.1 != 192.168.1.1), więc warunek notEquals jest fałszywy. 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 i 10.0.4.1 != 192.168.1.1), więc warunek notEquals jest spełniony. 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 oblicza wartość true (127.0.0.1 == 127.0.0.1) i jeden jako false (127.0.0.1 == 192.168.1.1), więc warunek Equals jest fałszywy. 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 i 10.0.4.1 == 192.168.1.1), więc warunek Equals jest fałszywy. 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 ma wartość true (127.0.0.1 == 127.0.0.1) i jeden jako false (127.0.0.1 == 192.168.1.1), więc warunek Equals jest fałszywy , a 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 i 10.0.4.1 == 192.168.1.1), więc warunek Equals 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.