Udostępnij za pośrednictwem


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 lub notIn.
  • 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 truewartość . 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, , 34

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 truewartość . 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 truewartość . 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[*]
=,>12
false
2 Microsoft.Test/resourceType/objectArray[*].property=>"value2" Microsoft.Test/resourceType/objectArray[*].nestedArray[*]
=,>34
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 modifyz 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 modifyz 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[*] modifyz operacją add Usługa Azure Policy dołącza element członkowski tablicy określony w szczegółach efektu.
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*] modifyz 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 modifyz 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 modifyz 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 allOfelementy 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