Uma service policy com um rule_list guarda uma lista ordenada de regras. O algoritmo de combinação de regras decide como essa lista é percorrida e, portanto, qual ação de regra vence quando mais de uma regra pode casar com uma requisição.

Os três algoritmos

FIRST_MATCH é o padrão e o que a maioria das pessoas raciocina. As regras são avaliadas sequencialmente de cima para baixo até uma casar. A ação dessa regra é aplicada e a avaliação para. A ordem na lista é tudo: uma regra ampla perto do topo pode ofuscar uma regra mais específica abaixo, que nunca tem a chance de rodar.

ALLOW_OVERRIDES avalia todas as regras com ação ALLOW antes de qualquer regra com ação DENY. O efeito prático é que se qualquer regra ALLOW casar, a requisição é permitida, mesmo que uma regra DENY também casasse. A permissão vence os empates.

DENY_OVERRIDES é o espelho: todas as regras DENY são avaliadas antes de qualquer regra ALLOW. Se qualquer regra DENY casar, a requisição é negada, independentemente de um ALLOW que casa. A negação vence os empates.

Por que a ordem importa

Considere duas regras: uma nega um ASN ruim específico, e uma permite tudo de um país parceiro. Sob FIRST_MATCH, o que aparecer primeiro decide. Sob DENY_OVERRIDES, a negação é considerada primeiro, então uma requisição do ASN ruim é bloqueada mesmo que também venha do país parceiro. Sob ALLOW_OVERRIDES, a mesma requisição é permitida, porque a permissão é considerada primeiro.

As mesmas regras, três resultados diferentes para a requisição que se sobrepõe. É por isso que ler uma política sem conhecer seu algoritmo pode enganar você.

A restrição do App Firewall

Há uma regra rígida a conhecer. Se qualquer regra na política é configurada com uma ação de App Firewall (WAF), o algoritmo de combinação precisa ser FIRST_MATCH. Os modos de override não são permitidos junto com ações WAF, porque o processamento WAF está atrelado à avaliação sequencial. Se você vê ações WAF nas regras, pode assumir FIRST_MATCH.

Onde o algoritmo vive

Um ponto sutil: no schema do objeto service_policy, o algoritmo de combinação de regras não é um campo no spec da própria política. Ele é definido no nível do service policy set, o contêiner ordenado ao qual a política pertence. O rule_list dentro de uma política documenta que suas regras são avaliadas de cima para baixo, que é o comportamento FIRST_MATCH, e esse é o padrão seguro a assumir quando você está lendo uma única política isoladamente.

Por essa razão o explicador neste site assume, por padrão, a avaliação FIRST_MATCH de cima para baixo, e mostra um algoritmo explícito apenas se o JSON colado carregar um. Quando você está auditando um deployment real, verifique o policy set que a contém para confirmar o algoritmo em vigor.