Créer des stratégies pour les propriétés de tableau sur des ressources Azure
Les propriétés Azure Resource Manager sont généralement définies comme des chaînes et des valeurs booléennes. Lorsqu’il existe une relation un-à-plusieurs, des propriétés complexes sont plutôt définies comme des tableaux. Dans Azure Policy, les tableaux sont utilisés de différentes manières :
- Le type d’un paramètre de définition, pour fournir plusieurs options.
- Une partie d’une règle de stratégie utilisant les conditions
in
ounotIn
. - Une partie d’une règle de stratégie qui compte le nombre de membres d’un tableau qui remplissent une condition.
- Dans les effets append et modify pour mettre à jour un tableau existant
Cet article traite chaque utilisation par Azure Policy et fournit plusieurs exemples de définitions.
Tableaux de paramètres
Définir un tableau de paramètres
La définition d’un paramètre sous forme de tableau permet une flexibilité de la stratégie lorsque plusieurs valeurs sont nécessaires. Cette définition de stratégie permet de définir n’importe quel localisation unique pour le paramètre allowedLocations
, et sa valeur par défaut est eastus2 :
"parameters": {
"allowedLocations": {
"type": "string",
"metadata": {
"description": "The list of allowed locations for resources.",
"displayName": "Allowed locations",
"strongType": "location"
},
"defaultValue": "eastus2"
}
}
Comme type
était string, une seule valeur peut être définie lors de l’affectation de la stratégie. Si cette stratégie est affectée, les ressources dans l’étendue sont autorisées uniquement dans une seule région Azure. La plupart des définitions de stratégies doivent autoriser une liste des options approuvées, par exemple pour autoriser eastus2, eastus, et westus2.
Pour créer la définition de stratégie de façon à autoriser plusieurs options, utilisez le type
array. La même stratégie peut être réécrite comme suit :
"parameters": {
"allowedLocations": {
"type": "array",
"metadata": {
"description": "The list of allowed locations for resources.",
"displayName": "Allowed locations",
"strongType": "location"
},
"defaultValue": [
"eastus2"
],
"allowedValues": [
"eastus2",
"eastus",
"westus2"
]
}
}
Remarque
Lorsqu’une définition de stratégie est enregistrée, la propriété type
sur un paramètre ne peut pas être modifiée.
Cette nouvelle définition de paramètre accepte plusieurs valeurs lors de l’affectation de stratégie. Avec la propriété de tableau allowedValues
définie, les valeurs disponibles lors de l’affectation sont limitées à la liste prédéfinie de choix. L’utilisation de allowedValues
est facultative.
Passer des valeurs à un tableau de paramètres lors de l’attribution
Lorsque vous affectez la stratégie via le portail Azure, un paramètre de type
array s’affiche sous la forme d’une zone de texte unique. L’indicateur mentionne Use ; to separate values. (e.g. London;New York)
. Pour passer les valeurs d’emplacement autorisées de eastus2, eastus et westus2 au paramètre, utilisez la chaîne suivante :
eastus2;eastus;westus2
Le format de la valeur du paramètre est différent lorsque vous utilisez Azure CLI, Azure PowerShell ou l’API REST. Les valeurs sont transmises via une chaîne JSON qui inclut également le nom du paramètre.
{
"allowedLocations": {
"value": [
"eastus2",
"eastus",
"westus2"
]
}
}
Pour utiliser cette chaîne avec chaque kit SDK, utilisez les commandes suivantes :
- Azure CLI : Commande az policy assignment create avec le paramètre
params
. - Azure PowerShell : Applet de commande New-AzPolicyAssignment avec le paramètre
PolicyParameter
. - API REST : Dans l’opération PUT create, dans le corps de la requête comme valeur de la propriété
properties.parameters
.
Utilisation de tableaux dans des conditions
In et notIn
Les conditions in
et notIn
ne fonctionnent qu’avec des valeurs de tableau. Elles vérifient l’existence d’une valeur dans un tableau. Le tableau peut être un tableau JSON littéral ou une référence à un paramètre de tableau. Par exemple :
{
"field": "tags.environment",
"in": [
"dev",
"test"
]
}
{
"field": "location",
"notIn": "[parameters('allowedLocations')]"
}
value count
L’expression value count compte le nombre d’expressions qui remplissent une condition. Elle offre un moyen d’évaluer plusieurs fois la même condition, en utilisant des valeurs différentes pour chaque itération. Par exemple, la condition suivante vérifie si le nom de la ressource correspond à un modèle dans un tableau de modèles :
{
"count": {
"value": [
"test*",
"dev*",
"prod*"
],
"name": "pattern",
"where": {
"field": "name",
"like": "[current('pattern')]"
}
},
"greater": 0
}
Pour évaluer l’expression, Azure Policy évalue la condition where
trois fois, une fois pour chaque membre de [ "test*", "dev*", "prod*" ]
, en comptant le nombre de fois où elle a été jugée true
. À chaque itération, la valeur du membre du tableau actuel est associée au nom d’index pattern
défini par count.name
. Cette valeur peut ensuite être référencée à l’intérieur de la condition where
en appelant une fonction de modèle spéciale : current('pattern')
.
Itération | valeur renvoyée current('pattern') |
---|---|
1 | "test*" |
2 | "dev*" |
3 | "prod*" |
La condition est vraie uniquement si le nombre obtenu est supérieur à 0.
Pour rendre la condition précédente plus générique, utilisez une référence parameters
au lieu d’un tableau de littéraux :
{
"count": {
"value": "[parameters('patterns')]",
"name": "pattern",
"where": {
"field": "name",
"like": "[current('pattern')]"
}
},
"greater": 0
}
Lorsque l’expression value count
ne figure pas sous une autre expression count
, count.name
est facultatif et la fonction current()
peut être utilisée sans argument :
{
"count": {
"value": "[parameters('patterns')]",
"where": {
"field": "name",
"like": "[current()]"
}
},
"greater": 0
}
value count
prend également en charge les tableaux d’objets complexes, ce qui permet des conditions plus complexes. Par exemple, la condition suivante définit une valeur de balise souhaitée pour chaque modèle de nom, et vérifie si le nom de la ressource correspond au modèle, mais n’a pas la valeur de balise requise :
{
"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
}
Pour obtenir des exemples utiles, consultez Exemples value count.
Référencement des propriétés de ressource de tableau
De nombreux cas d’usage requièrent l’utilisation de propriétés de tableau dans la ressource évaluée. Certains scénarios requièrent le référencement d’un tableau entier (par exemple, la vérification de sa longueur). D’autres requièrent l’application d’une condition à chaque membre du tableau (par exemple, s’assurer que toutes les règles de pare-feu bloquent l’accès à partir d’Internet). Comprendre les différentes façons dont Azure Policy peut faire référence aux propriétés de ressources et comment ces références se comportent lorsqu’elles font référence à des propriétés de tableau est la clé pour écrire les conditions qui couvrent ces scénarios.
Référencement des propriétés de ressource
Les propriétés de ressource peuvent être référencées par Azure Policy à l’aide d’alias. Il existe deux façons de référencer les valeurs d’une propriété de ressource dans Azure Policy :
Utilisez la condition field pour vérifier si toutes les propriétés de ressources sélectionnées remplissent une condition. Exemple :
{ "field": "Microsoft.Test/resourceType/property", "equals": "value" }
Utilisez la fonction
field()
pour accéder à la valeur d’une propriété. Exemple :{ "value": "[take(field('Microsoft.Test/resourceType/property'), 7)]", "equals": "prefix_" }
La condition field a un comportement implicite allOf
. Si l’alias représente une collection de valeurs, il vérifie si toutes les valeurs individuelles remplissent la condition. La fonction field()
retourne les valeurs représentées par l’alias telles quelles, qui peuvent ensuite être manipulées par d’autres fonctions de modèle.
Référencement des champs de tableau
Les propriétés de ressource de tableau sont représentées par deux types d’alias différents. Un alias normal et des alias de tableau auxquels [*]
est attaché :
Microsoft.Test/resourceType/stringArray
Microsoft.Test/resourceType/stringArray[*]
Référencement du tableau
Le premier alias représente une valeur unique, la valeur de la propriété stringArray
provenant du contenu de la demande. Étant donné que la valeur de cette propriété est un tableau, elle n’est pas utile dans les conditions de stratégie. Par exemple :
{
"field": "Microsoft.Test/resourceType/stringArray",
"equals": "..."
}
Cette condition compare l’intégralité du tableau stringArray
à une valeur de chaîne unique. La plupart des conditions, notamment equals
, acceptent uniquement des valeurs de chaîne. Il n’est donc pas très utile de comparer un tableau à une chaîne. Le principal scénario où il est utile de référencer la propriété du tableau est lorsqu’il s’agit de vérifier si cette propriété existe :
{
"field": "Microsoft.Test/resourceType/stringArray",
"exists": "true"
}
Avec la fonction field()
, la valeur renvoyée est le tableau du contenu de la demande, qui peut ensuite être utilisé avec l’une des fonctions de modèle prises en charge qui acceptent des arguments de tableau. Par exemple, la condition suivante vérifie si la longueur de stringArray
est supérieure à 0 :
{
"value": "[length(field('Microsoft.Test/resourceType/stringArray'))]",
"greater": 0
}
Référencement de la collection des membres du tableau
Les alias qui utilisent la syntaxe [*]
représentent une collection de valeurs de propriétés sélectionnées à partir d’une propriété de tableau, ce qui est différent de la sélection de la propriété de tableau proprement dite. Par exemple, Microsoft.Test/resourceType/stringArray[*]
retourne une collection qui contient tous les membres de stringArray
. Comme mentionné précédemment, une condition field
vérifie que toutes les propriétés de ressources sélectionnées remplissent la condition. Par conséquent, la condition suivante est vraie uniquement si tous les membres de stringArray
sont égaux à "value"
.
{
"field": "Microsoft.Test/resourceType/stringArray[*]",
"equals": "value"
}
Si le tableau est vide, la condition prend la valeur true, car aucun membre du tableau ne présente de violation. Dans ce scénario, nous vous recommandons d’utiliser plutôt l’expression count. Si le tableau contient des objets, un alias [*]
peut être utilisé pour sélectionner la valeur d’une propriété spécifique de chaque membre du tableau. Exemple :
{
"field": "Microsoft.Test/resourceType/objectArray[*].property",
"equals": "value"
}
Cette condition est vraie si les valeurs de toutes les propriétés property
dans objectArray
sont égales à "value"
. Pour obtenir plus d’exemples, consultez Autres exemples d’alias.
Lors de l’utilisation de la fonction field()
pour référencer un alias de tableau, la valeur renvoyée est un tableau de toutes les valeurs sélectionnées. Ce comportement signifie que le cas d’usage courant de la fonction field()
, c’est-à-dire la possibilité d’appliquer des fonctions de modèle à des valeurs de propriété de ressource, est limité. Les seules fonctions de modèle qui peuvent être utilisées dans ce cas sont celles qui acceptent des arguments de tableau. Par exemple, il est possible d’obtenir la longueur du tableau avec [length(field('Microsoft.Test/resourceType/objectArray[*].property'))]
. Toutefois, des scénarios plus complexes, tels que l’application d’une fonction de modèle à chaque membre du tableau et sa comparaison à une valeur souhaitée, sont possibles uniquement en utilisant l’expression count
. Pour plus d’informations, consultez Expression field count.
Pour résumer, consultez l’exemple de contenu de ressource suivant et les valeurs sélectionnées renvoyées par différents alias :
{
"tags": {
"env": "prod"
},
"properties": {
"stringArray": [
"a",
"b",
"c"
],
"objectArray": [
{
"property": "value1",
"nestedArray": [
1,
2
]
},
{
"property": "value2",
"nestedArray": [
3,
4
]
}
]
}
}
Lorsque vous utilisez la condition field sur l’exemple de contenu de ressource, les résultats sont les suivants :
Alias | Valeurs sélectionnées |
---|---|
Microsoft.Test/resourceType/missingArray |
null |
Microsoft.Test/resourceType/missingArray[*] |
Collection vide de valeurs. |
Microsoft.Test/resourceType/missingArray[*].property |
Collection vide de valeurs. |
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 |
Lorsque vous utilisez la fonction field()
sur l’exemple de contenu de ressource, les résultats sont les suivants :
Expression | Valeur renvoyée |
---|---|
[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] |
Expressions field count
Les expressions field count comptent le nombre de membres de tableau qui remplissent une condition et le comparent à une valeur cible. L’expression Count
est plus intuitive et polyvalente pour l’évaluation des tableaux par rapport aux conditions field
. La syntaxe est :
{
"count": {
"field": <[*
] alias>,
"where": <optional policy condition expression>
},
"equals|greater|less|any other operator": <target value>
}
En cas d’utilisation sans condition where
, count
retourne simplement la longueur d’un tableau. Avec l’exemple de contenu de ressource de la section précédente, l’évaluation de l’expression count
suivante est true
puisque stringArray
a trois membres :
{
"count": {
"field": "Microsoft.Test/resourceType/stringArray[*]"
},
"equals": 3
}
Ce comportement fonctionne également avec les tableaux imbriqués. Par exemple, l’expression count
suivante est évaluée comme true
dans la mesure où il y a quatre membres de tableau dans les tableaux nestedArray
:
{
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*].nestedArray[*]"
},
"greaterOrEquals": 4
}
La puissance de count
tient à la condition where
. Quand count
est spécifié, Azure Policy énumère les membres du tableau et évalue chacun d’entre eux par rapport à la condition, en comptant le nombre de membres du tableau évalués comme true
. Plus précisément, dans chaque itération de l’évaluation de la condition where
, Azure Policy sélectionne un membre de tableau unique i
et évalue le contenu de la ressource par rapport à la condition where
comme si i
était le seul membre du tableau. Le fait d’avoir un seul membre de tableau disponible dans chaque itération permet d’appliquer des conditions complexes sur chaque membre du tableau.
Exemple :
{
"count": {
"field": "Microsoft.Test/resourceType/stringArray[*]",
"where": {
"field": "Microsoft.Test/resourceType/stringArray[*]",
"equals": "a"
}
},
"equals": 1
}
Pour évaluer l’expression count
, Azure Policy évalue la condition where
trois fois, une fois pour chaque membre de stringArray
, en comptant le nombre de fois où elle a été jugée true
. Lorsque la condition where
fait référence aux membres du tableau Microsoft.Test/resourceType/stringArray[*]
, au lieu de sélectionner tous les membres de stringArray
, elle ne sélectionne qu’un seul membre de tableau à chaque fois :
Itération | Valeurs Microsoft.Test/resourceType/stringArray[*] sélectionnées |
Résultat de l’évaluation where |
---|---|---|
1 | "a" |
true |
2 | "b" |
false |
3 | "c" |
false |
count
retourne 1
.
Voici une expression plus complexe :
{
"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
}
Itération | Valeurs sélectionnées | Résultat de l’évaluation 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
retourne 1
.
Le fait que l’expression where
soit évaluée par rapport à la totalité du contenu de la requête (avec des modifications apportées uniquement au membre du tableau en cours d’énumération) signifie que la condition where
peut également faire référence à des champs en dehors du tableau :
{
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*]",
"where": {
"field": "tags.env",
"equals": "prod"
}
},
"equals": 0
}
Itération | Valeurs sélectionnées | Résultat de l’évaluation where |
---|---|---|
1 | tags.env =>"prod" |
true |
2 | tags.env =>"prod" |
true |
Des expressions count imbriquées peuvent être utilisées pour appliquer des conditions aux champs de tableau imbriqués. Par exemple, la condition suivante vérifie que le tableau objectArray[*]
a exactement deux membres avec nestedArray[*]
qui contient un ou plusieurs membres :
{
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*]",
"where": {
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*].nestedArray[*]"
},
"greaterOrEquals": 1
}
},
"equals": 2
}
Itération | Valeurs sélectionnées | Résultat de l’évaluation count imbriquée |
---|---|---|
1 | Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =>1 , 2 |
nestedArray[*] a 2 membres =>true |
2 | Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =>3 , 4 |
nestedArray[*] a 2 membres =>true |
Étant donné que les deux membres de objectArray[*]
ont un tableau enfant nestedArray[*]
avec deux membres, l’expression outer count retourne 2
.
Exemple plus complexe : vérifiez que le tableau objectArray[*]
a exactement deux membres avec nestedArray[*]
avec tous les membres égaux à 2
ou 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
}
Itération | Valeurs sélectionnées | Résultat de l’évaluation count imbriquée |
---|---|---|
1 | Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =>1 , 2 |
nestedArray[*] contient 2 =>true |
2 | Microsoft.Test/resourceType/objectArray[*].nestedArray[*] =>3 , 4 |
nestedArray[*] contient 3 =>true |
Étant donné que les deux membres de objectArray[*]
ont un tableau enfant nestedArray[*]
qui contient 2
ou 3
, l’expression outer count retourne 2
.
Notes
Les expressions count de champs imbriqués peuvent seulement faire référence à des tableaux imbriqués. Par exemple, l’expression count faisant référence à Microsoft.Test/resourceType/objectArray[*]
peut avoir une expression count imbriquée ciblant le tableau imbriqué Microsoft.Test/resourceType/objectArray[*].nestedArray[*]
, mais elle ne peut pas avoir d’expression count imbriquée ciblant Microsoft.Test/resourceType/stringArray[*]
.
Accès au membre du tableau actuel avec des fonctions de modèle
Quand vous utilisez des fonctions de modèle, utilisez la fonction current()
pour accéder à la valeur du membre du tableau actuel ou aux valeurs de l’une de ses propriétés. Pour accéder à la valeur du membre du tableau actuel, passez l’alias défini dans count.field
ou l’un de ses alias enfants comme argument à la fonction current()
. Par exemple :
{
"count": {
"field": "Microsoft.Test/resourceType/objectArray[*]",
"where": {
"value": "[current('Microsoft.Test/resourceType/objectArray[*].property')]",
"like": "value*"
}
},
"equals": 2
}
Itération | valeur renvoyée current() |
Résultat de l’évaluation where |
---|---|---|
1 | La valeur de property dans le premier membre de objectArray[*] : value1 |
true |
2 | La valeur de property dans le premier membre de objectArray[*] : value2 |
true |
La fonction field dans des conditions where
La fonction field()
peut également être utilisée pour accéder à la valeur du membre du tableau actuel tant que l’expression count ne figure pas à l’intérieur d’une condition d’existence (la fonctionfield()
fait toujours référence à la ressource évaluée dans la condition if). Le comportement de field()
lorsque vous faites référence au tableau évalué repose sur les concepts suivants :
- Les alias de tableau sont résolus en une collection de valeurs sélectionnées parmi tous les membres du tableau.
- Les fonctions
field()
qui référencent des alias de tableau retournent un tableau avec les valeurs sélectionnées. - Le référencement de l’alias de tableau compté à l’intérieur de la condition
where
retourne une collection avec une seule valeur sélectionnée dans le membre du tableau évalué dans l’itération actuelle.
Ce comportement signifie que, lorsque vous faites référence au membre de tableau compté avec une fonction field()
à l’intérieur de la condition where
, un tableau avec un seul membre est renvoyé. Bien que ce comportement ne soit pas intuitif, il est cohérent avec l’idée que les alias de tableau retournent toujours une collection de propriétés sélectionnées. Voici un exemple :
{
"count": {
"field": "Microsoft.Test/resourceType/stringArray[*]",
"where": {
"field": "Microsoft.Test/resourceType/stringArray[*]",
"equals": "[field('Microsoft.Test/resourceType/stringArray[*]')]"
}
},
"equals": 0
}
Itération | Valeurs d’expressions | Résultat de l’évaluation 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 |
Par conséquent, lorsqu’il est nécessaire d’accéder à la valeur de l’alias de tableau compté avec une fonction field()
, la façon de le faire consiste à l’inclure dans un wrapper avec une fonction de modèle first()
:
{
"count": {
"field": "Microsoft.Test/resourceType/stringArray[*]",
"where": {
"field": "Microsoft.Test/resourceType/stringArray[*]",
"equals": "[first(field('Microsoft.Test/resourceType/stringArray[*]'))]"
}
}
}
Itération | Valeurs d’expressions | Résultat de l’évaluation 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 |
Pour obtenir des exemples utiles, consultez Exemples field count.
Modification de tableaux
Les effets append et modify modifient les propriétés d’une ressource lors de sa création ou de sa mise à jour. Lorsque vous utilisez des propriétés de tableau, le comportement de ces effets varie selon que l’opération tente de modifier ou non l’alias [*]
:
Remarque
L’utilisation de l’effet modify
avec des alias est actuellement disponible en préversion.
Alias | Résultat | Résultat |
---|---|---|
Microsoft.Storage/storageAccounts/networkAcls.ipRules |
append |
Azure Policy ajoute l’ensemble du tableau spécifié dans les détails de l’effet le cas échéant. |
Microsoft.Storage/storageAccounts/networkAcls.ipRules |
modify avec l’opération add |
Azure Policy ajoute l’ensemble du tableau spécifié dans les détails de l’effet le cas échéant. |
Microsoft.Storage/storageAccounts/networkAcls.ipRules |
modify avec l’opération addOrReplace |
Azure Policy ajoute l’ensemble du tableau spécifié dans les détails de l’effet le cas échéant ou remplace le tableau existant. |
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*] |
append |
Azure Policy ajoute le membre du tableau spécifié dans les détails de l’effet. |
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*] |
modify avec l’opération add |
Azure Policy ajoute le membre du tableau spécifié dans les détails de l’effet. |
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*] |
modify avec l’opération addOrReplace |
Azure Policy supprime tous les membres de tableau existants et ajoute le membre de tableau spécifié dans les détails de l’effet. |
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].action |
append |
Azure Policy ajoute une valeur à la propriété action de chaque membre du tableau. |
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].action |
modify avec l’opération add |
Azure Policy ajoute une valeur à la propriété action de chaque membre du tableau. |
Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].action |
modify avec l’opération addOrReplace |
Azure Policy ajoute ou remplace la propriété action de chaque membre du tableau. |
Pour plus d’informations, consultez ces exemples Append.
Autres exemples d’alias
Nous vous recommandons d’utiliser les expressions field count pour vérifier si allOf
ou anyOf
des membres d’un tableau dans le contenu de la requête remplissent une condition. Dans certaines conditions simples, il est possible d’obtenir le même résultat en utilisant un accesseur de champ avec un alias de tableau, comme décrit dans Référencement de la collection des membres du tableau. Ce modèle peut être utile dans les règles de stratégie qui dépassent la limite du nombre d’expressions count
. Voici des exemples de cas d’utilisation courants :
Voici un exemple de règle de stratégie pour le tableau de scénario suivant :
"policyRule": {
"if": {
"allOf": [
{
"field": "Microsoft.Storage/storageAccounts/networkAcls.ipRules",
"exists": "true"
},
<-- Condition (see table below) -->
]
},
"then": {
"effect": "[parameters('effectType')]"
}
}
Pour le tableau de scénario suivant, le tableau ipRules
se présente comme suit :
"ipRules": [
{
"value": "127.0.0.1",
"action": "Allow"
},
{
"value": "192.168.1.1",
"action": "Allow"
}
]
Pour chacun des exemples de condition suivants, remplacez <field>
par "field": "Microsoft.Storage/storageAccounts/networkAcls.ipRules[*].value"
.
Les résultats suivants viennent de la combinaison de la condition et de l’exemple de règle de stratégie et du tableau des valeurs existantes précédent :
Condition | Résultat | Scénario | Explication |
---|---|---|---|
{<field>,"notEquals":"127.0.0.1"} |
Rien | Aucun ne correspond | Un élément du tableau est évalué comme false (127.0.0.1 != 127.0.0.1 ) et un comme true (127.0.0.1 != 192.168.1.1 ) ; par conséquent, la condition notEquals est false et l’effet n’est pas déclenché. |
{<field>,"notEquals":"10.0.4.1"} |
Effet de la stratégie | Aucun ne correspond | Les deux éléments du tableau sont évalués comme true (10.0.4.1 != 127.0.0.1 and 10.0.4.1 != 192.168.1.1 ) ; par conséquent, la condition notEquals est true et l’effet est déclenché. |
"not":{<field>,"notEquals":"127.0.0.1" } |
Effet de la stratégie | Un ou plusieurs correspondent | Un élément du tableau est évalué comme false (127.0.0.1 != 127.0.0.1 ) et un comme true (127.0.0.1 != 192.168.1.1 ) ; par conséquent, la condition notEquals est false. L’opérateur logique est évalué comme true (et non false) ; par conséquent, l’effet est déclenché. |
"not":{<field>,"notEquals":"10.0.4.1"} |
Rien | Un ou plusieurs correspondent | Les deux éléments du tableau sont évalués comme true (10.0.4.1 != 127.0.0.1 and 10.0.4.1 != 192.168.1.1 ) ; par conséquent, la condition notEquals est true. L’opérateur logique est évalué comme false (et non true) ; par conséquent, l’effet n’est pas déclenché. |
"not":{<field>,"Equals":"127.0.0.1"} |
Effet de la stratégie | Tous ne correspondent pas | Un élément du tableau est évalué comme true (127.0.0.1 == 127.0.0.1 ) et un comme false (127.0.0.1 == 192.168.1.1 ) ; par conséquent, la condition Equals est false. L’opérateur logique est évalué comme true (et non false) ; par conséquent, l’effet est déclenché. |
"not":{<field>,"Equals":"10.0.4.1"} |
Effet de la stratégie | Tous ne correspondent pas | Les deux éléments du tableau sont évalués comme false (10.0.4.1 == 127.0.0.1 and 10.0.4.1 == 192.168.1.1 ) ; par conséquent, la condition Equals est false. L’opérateur logique est évalué comme true (et non false) ; par conséquent, l’effet est déclenché. |
{<field>,"Equals":"127.0.0.1"} |
Rien | Tous correspondent | Un élément du tableau est évalué comme true (127.0.0.1 == 127.0.0.1 ) et un comme false (127.0.0.1 == 192.168.1.1 ) ; par conséquent, la condition Equals est false et l’effet n’est pas déclenché. |
{<field>,"Equals":"10.0.4.1"} |
Rien | Tous correspondent | Les deux éléments du tableau sont évalués comme false (10.0.4.1 == 127.0.0.1 and 10.0.4.1 == 192.168.1.1 ) ; par conséquent, la condition Equals est false et l’effet n’est pas déclenché. |
Étapes suivantes
- Consultez des exemples à la page Exemples Azure Policy.
- Consultez la Structure de définition Azure Policy.
- Consultez la page Compréhension des effets de Policy.
- Découvrez comment créer des stratégies par programmation.
- Découvrez comment corriger des ressources non conformes.
- Pour en savoir plus sur les groupes d’administration, consultez Organiser vos ressources avec des groupes d’administration Azure.