Padrão de política do Azure: operadores lógicos
Uma definição de política pode conter várias instruções condicionais. Você pode precisar que cada afirmação seja verdadeira ou apenas algumas delas sejam verdadeiras. Para suportar essas necessidades, a linguagem tem operadores lógicos para not, allOf e anyOf. Eles são opcionais e podem ser aninhados para criar cenários complexos.
Amostra 1: Um operador lógico
Esta definição de política avalia as contas do Azure Cosmos DB para ver se failovers automáticos e vários locais de gravação estão configurados. Quando não são, a auditoria aciona e cria uma entrada de log quando o recurso não compatível é criado ou atualizado.
{
"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": {}
}
}
Exemplo 1: Explicação
"policyRule": {
"if": {
"allOf": [{
"field": "type",
"equals": "Microsoft.DocumentDB/databaseAccounts"
},
{
"field": "Microsoft.DocumentDB/databaseAccounts/enableAutomaticFailover",
"equals": "false"
},
{
"field": "Microsoft.DocumentDB/databaseAccounts/enableMultipleWriteLocations",
"equals": "false"
}
]
},
"then": {
O bloco policyRule.if usa um único allOf para garantir que todas as três condições sejam verdadeiras. Somente quando todas essas condições forem avaliadas como verdadeiras é que o efeito de auditoria é acionado.
Amostra 2: Vários operadores lógicos
Esta definição de política avalia recursos para um padrão de nomenclatura. Se um recurso não corresponder, ele será negado.
{
"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"
}
}
}
}
Exemplo 2: Explicação
"if": {
"allOf": [{
"not": {
"field": "name",
"match": "contoso??????"
}
},
{
"not": {
"field": "name",
"match": "contoso-???-##"
}
}
]
},
Este bloco policyRule.if também inclui um único allOf, mas cada condição é encapsulada com o operador não lógico. O condicional dentro do operador não lógico avalia primeiro e, em seguida, avalia o não para determinar se a cláusula inteira é verdadeira ou falsa. Se ambos os operadores não lógicos avaliarem como verdadeiro, o efeito de política será acionado.
Amostra 3: Combinando operadores lógicos
Esta definição de política avalia as contas do Spring on Azure para ver se o rastreamento não está habilitado ou se o rastreamento não está em um estado bem-sucedido.
{
"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"
}
}
}
}
Exemplo 3: Explicação
"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"
}
}
Este bloco policyRule.if inclui os operadores lógicos allOf e anyOf . O operador lógico anyOf avalia true desde que uma condição incluída seja true. Como o tipo está no centro do allOf, ele deve sempre avaliar a verdade. Se o tipo e uma das condições em anyOf forem verdadeiros, o efeito de política será acionado.
Próximos passos
- Analise outros padrões e definições incorporadas.
- Reveja a estrutura de definição do Azure Policy.
- Veja Compreender os efeitos do Policy.