Modello di Criteri di Azure: operatori logici
Una definizione di criteri può contenere diverse istruzioni condizionali. Potrebbe essere necessario che ogni istruzione sia vera o che lo siano solo alcune. Per supportare queste esigenze, il linguaggio include gli operatori logici not, allOfe anyOf. Sono facoltativi e possono essere annidati per creare scenari complessi.
Esempio 1: un operatore logico
Questa definizione di criteri valuta gli account Azure Cosmos DB per verificare se sono configurati i failover automatici e più percorsi di scrittura. Se non lo sono, viene attivato l'effetto audit che crea una voce di log quando la risorsa non conforme viene creata o aggiornata.
{
"properties": {
"mode": "all",
"displayName": "Audit Automatic Failover for CosmosDB accounts",
"description": "This policy audits Automatic Failover for CosmosDB accounts",
"policyRule": {
"if": {
"allOf": [{
"field": "type",
"equals": "Microsoft.DocumentDB/databaseAccounts"
},
{
"field": "Microsoft.DocumentDB/databaseAccounts/enableAutomaticFailover",
"equals": "false"
},
{
"field": "Microsoft.DocumentDB/databaseAccounts/enableMultipleWriteLocations",
"equals": "false"
}
]
},
"then": {
"effect": "audit"
}
},
"parameters": {},
"metadata": {}
}
}
Campione 1: Spiegazione
"policyRule": {
"if": {
"allOf": [{
"field": "type",
"equals": "Microsoft.DocumentDB/databaseAccounts"
},
{
"field": "Microsoft.DocumentDB/databaseAccounts/enableAutomaticFailover",
"equals": "false"
},
{
"field": "Microsoft.DocumentDB/databaseAccounts/enableMultipleWriteLocations",
"equals": "false"
}
]
},
"then": {
Il blocco policyRule.if usa un singolo operatore allOf per assicurar che tutte e tre le condizioni siano vere. Solo se tutte queste condizioni restituiscono true, viene attivato l'effetto audit.
Esempio 2: Più operatori logici
Questa definizione di criteri valuta le risorse in base a un modello di denominazione. Se una risorsa non corrisponde, viene negata.
{
"properties": {
"displayName": "Match multiple name patterns.",
"description": "Allows one of multiple naming patterns for resources.",
"mode": "Indexed",
"policyRule": {
"if": {
"allOf": [{
"not": {
"field": "name",
"match": "contoso??????"
}
},
{
"not": {
"field": "name",
"match": "contoso-???-##"
}
}
]
},
"then": {
"effect": "deny"
}
}
}
}
Campione 2: Spiegazione
"if": {
"allOf": [{
"not": {
"field": "name",
"match": "contoso??????"
}
},
{
"not": {
"field": "name",
"match": "contoso-???-##"
}
}
]
},
Anche questo blocco policyRule.if include un singolo operatore allOf, ma ogni condizione è racchiusa nell'operatore logico not. Viene valutata prima l'istruzione condizionale all'interno dell'operatore logico not e quindi viene valutato l'operatore logico not per determinare se l'intera clausola è vera o falsa. Se entrambi gli operatori logici not operatori logici restituiscono true, viene attivato l'effetto dei criteri.
Esempio 3: Combinazione di operatori logici
Questa definizione dei criteri valuta gli account Spring su Azure per verificare se la traccia non è abilitata o se la traccia non si trova in uno stato di esito positivo.
{
"properties": {
"displayName": "Audit Azure Spring Cloud instances where distributed tracing is not enabled",
"description": "Distributed tracing tools in Azure Spring Cloud allow debugging and monitoring the complex interconnections between microservices in an application. Distributed tracing tools should be enabled and in a healthy state.",
"mode": "Indexed",
"policyRule": {
"if": {
"allOf": [{
"field": "type",
"equals": "Microsoft.AppPlatform/Spring"
},
{
"anyOf": [{
"field": "Microsoft.AppPlatform/Spring/trace.enabled",
"notEquals": "true"
},
{
"field": "Microsoft.AppPlatform/Spring/trace.state",
"notEquals": "Succeeded"
}
]
}
]
},
"then": {
"effect": "audit"
}
}
}
}
Campione 3: Spiegazione
"policyRule": {
"if": {
"allOf": [{
"field": "type",
"equals": "Microsoft.AppPlatform/Spring"
},
{
"anyOf": [{
"field": "Microsoft.AppPlatform/Spring/trace.enabled",
"notEquals": "true"
},
{
"field": "Microsoft.AppPlatform/Spring/trace.state",
"notEquals": "Succeeded"
}
]
}
]
},
"then": {
"effect": "audit"
}
}
Questo blocco policyRule.if include entrambi gli operatori logici allOf e anyOf. L'operatore logico anyOf restituisce true finché una condizione inclusa è true. Poiché type è alla base dell'operatore allOf, deve sempre restituire true. Se type e una delle condizioni nell'operatore anyOf sono true, viene attivato l'effetto dei criteri.
Passaggi successivi
- Esaminare altri modelli e definizioni predefinite.
- Vedere la struttura delle definizioni di Criteri di Azure.
- Leggere Informazioni sugli effetti di Criteri.