---
name: azion-execute-bot-manager-em-toda-requisicao
description: >-
  Crie a regra do Rules Engine que entrega toda requisição de um firewall a uma instância do Bot Manager, pelo Azion Console, pela Azion CLI ou pela API.
---

# Execute Bot Manager em toda requisição

Você pode executar uma instância do Bot Manager em toda requisição que um firewall recebe com uma regra do [Rules Engine for Firewall](/pt-br/documentacao/plataforma/firewall/rules-engine/), pelo Azion Console, pela Azion CLI ou pela API. Uma instância de função não pontua nada até que uma regra entregue uma requisição a ela; para saber onde a regra fica no caminho que uma requisição percorre, consulte [Score de bots](/pt-br/documentacao/plataforma/firewall/bot-manager/score-de-bots/).

---

## Pré-requisitos

- Um [firewall](/pt-br/documentacao/plataforma/firewall/) vinculado ao workload que atende a sua aplicação. Consulte [Primeiros passos com Bot Manager](/pt-br/documentacao/plataforma/firewall/bot-manager/primeiros-passos/).
- Uma instância de função do Bot Manager nesse firewall, e o id dela. Para criar uma, consulte [Execute Bot Manager em modo de observação](/pt-br/documentacao/guias/seguranca-de-aplicacoes/bots-e-rede/modo-de-observacao/).
- A [Azion CLI](/pt-br/documentacao/devtools/cli/) instalada e um personal token configurado, para o procedimento da CLI.
- Um personal token, para o procedimento da API. Para criar um, consulte [Personal Tokens](/pt-br/documentacao/fundamentos/personal-tokens/).

---

## Crie a regra

A regra abaixo corresponde a toda requisição que o firewall recebe e executa uma instância em cada uma delas. `value` guarda o id da **instância de função** neste firewall, então substitua `12347` pelo seu. Ele nunca guarda o id da função instalada, que é o mesmo para toda instância dela na conta.

```json
{
  "name": "Run Bot Manager on every request",
  "active": true,
  "criteria": [
    [
      {
        "conditional": "if",
        "variable": "${request_uri}",
        "operator": "starts_with",
        "argument": "/"
      }
    ]
  ],
  "behaviors": [
    {
      "type": "run_function",
      "attributes": {
        "value": 12347
      }
    }
  ]
}
```

**Console**

Para criar a regra pelo Azion Console:

1. **Abra o firewall que carrega a instância**

   Acesse [Azion Console](https://console.azion.com/) > **Firewalls** e selecione esse firewall.

2. **Selecione a aba Rules Engine**

3. **Selecione + Rule**

4. **Nomeie a regra**

   Informe `Run Bot Manager on every request` como o nome. A descrição é opcional.

5. **Defina o critério**

   Na seção **Criteria**, selecione `Request Uri` como variável e *starts with* como operador, e informe `/` como argumento.

6. **Adicione o behavior Run Function**

   Na seção **Behaviors**, selecione **Run Function**. Isso adiciona um segundo controle, que não tem rótulo e traz o placeholder `Select an function`. Esse controle guarda as instâncias de função deste firewall; selecione a que deve ser executada.

7. **Selecione Save**

O firewall agora guarda a regra, e a instância pontua toda requisição que o firewall recebe. O seletor do behavior lista instâncias, não funções, e apenas as ativas. Uma regra carrega no máximo um behavior **Run Function**, o que Azion Console impõe desabilitando a opção assim que há um na regra. A variável `Request Uri` não exige mais nada ligado, enquanto `Header User Agent` e `Request Args` só são oferecidas enquanto [WAF](/pt-br/documentacao/plataforma/firewall/#waf) está ligado no firewall.

**CLI**

Para criar a regra com a Azion CLI, salve a regra acima como `rule.json`. `azion create firewall-rule` lê a regra inteira desse arquivo e não tem flag para um critério ou um behavior:

```bash
azion create firewall-rule --firewall-id <firewall-id> --file rule.json
```

```text
Created Firewall Rule with ID 123458
```

A Azion CLI confirma a regra com o id que ela recebeu. Leia a regra de volta e a plataforma terá acrescentado uma chave que ela mesma atribui, `"order": 0`, que é a posição da regra entre as regras daquele firewall. `criteria` é uma lista de listas, e o behavior recebe a chave `type`. Um arquivo que escreve `name` no lugar é recusado com `Failed to decode the given 'json' file`, uma mensagem que não nomeia nem o campo nem o motivo: o arquivo é JSON válido e o defeito está no formato.

**API**

Envie uma requisição `POST` à coleção `request_rules` do firewall que carrega a instância, com `rule.json` como corpo:

```bash
curl --request POST \
  --url https://api.azion.com/v4/workspace/firewalls/<firewall-id>/request_rules \
  --header 'Accept: application/json' \
  --header 'Authorization: Token [TOKEN VALUE]' \
  --header 'Content-Type: application/json' \
  --data @rule.json
```

A API responde `202` e retorna a regra com uma chave que ela atribuiu: o `order` que a regra tem entre as regras daquele firewall, `0` para a primeira.

> **nota**
>
> Baseie o critério na URI da requisição. A variável `${request_args}` com o operador `matches` e `.*` como argumento parece corresponder a tudo e não corresponde: a variável fica vazia sempre que uma requisição não traz query string, e uma variável vazia não corresponde a nada. Uma regra montada assim passa silenciosamente por todo `POST` cujo payload está no corpo. Executar uma segunda instância na mesma requisição exige uma segunda regra, porque uma regra carrega no máximo um behavior `run_function`.

---

## Próximos passos

- [Leia o report log de uma instância](/pt-br/documentacao/guias/seguranca-de-aplicacoes/bots-e-rede/ler-o-report-log.md): As pontuações que a instância produz depois que a regra entrega toda requisição a ela.
- [Rules Engine for Firewall](/pt-br/documentacao/plataforma/firewall/rules-engine.md): Os criteria e os behaviors que uma regra de firewall aceita, além dos dois que esta regra usa.
