---
name: azion-envie-eventos-do-waf-para-um-siem
description: >-
  Crie um stream que envia ao seu SIEM as requisições que o WAF analisou, no Azion Console ou com a Azion API, e confirme a entrega.
---

# Envie eventos do WAF para um SIEM

Você pode enviar os eventos do Web Application Firewall (WAF) para uma plataforma de security information and event management (SIEM) pelo Azion Console ou com a Azion API. Para enviar as requisições das suas aplicações sem dados do WAF, consulte [Endpoints](/pt-br/documentacao/plataforma/data-stream/endpoints/) e o guia do seu endpoint.

Um stream do [Data Stream](/pt-br/documentacao/plataforma/data-stream/) lê a fonte de dados *WAF Events* e formata cada evento com o template *WAF Event Collector*. Cada linha de log traz a pontuação que a requisição recebeu, as regras do WAF que ela acionou, a família do ataque e a ação que o WAF tomou. Para cada variável, consulte [WAF Events](/pt-br/documentacao/plataforma/data-stream/fontes-de-dados-e-variaveis/#waf-events).

O exemplo envia os eventos para um tópico do Apache Kafka que o seu SIEM lê. No formulário do stream, o endpoint é definido no campo **Connector**.

---

Selecione a interface uma vez. Os pré-requisitos e todas as tarefas abaixo mostram apenas esse caminho.

## Pré-requisitos

- Uma conta Azion com a permissão **Edit Data Stream**. Para as permissões, consulte [Configurações do stream](/pt-br/documentacao/plataforma/data-stream/configuracoes-do-stream/#permissoes).
- [Firewall](/pt-br/documentacao/plataforma/firewall/) com WAF na conta, protegendo um [workload](/pt-br/documentacao/plataforma/workloads/) que recebe requisições. Para configurar o WAF, consulte [Primeiros passos com WAF](/pt-br/documentacao/plataforma/firewall/waf/primeiros-passos/).
- Um endpoint que o seu SIEM lê. Este guia usa um cluster do Apache Kafka, com o host e a porta dos servidores para a conexão inicial e o nome de um tópico. Para os outros endpoints para os quais um stream pode enviar, consulte [Endpoints](/pt-br/documentacao/plataforma/data-stream/endpoints/).

**Console**

- Acesso ao Azion Console. Para entrar, consulte [Como acessar o Azion Console](/pt-br/documentacao/guias/plataforma/conta-e-billing/como-acessar-o-azion-console/).

**API**

- Um personal token. Para criar um, consulte [Como criar um personal token](/pt-br/documentacao/guias/plataforma/conta-e-billing/personal-tokens/).
- O ID do workload que o WAF protege.
- `curl`.

---

## Crie o stream

O stream coleta os eventos do WAF do workload que você escolher, por meio de um filtro de workloads. Diferente do sampling, um filtro de workloads mantém os seus outros streams ativos.

**Console**

Para criar o stream no Azion Console:

1. **Abra o Data Stream**

   Acesse [Azion Console](https://console.azion.com/) > **Data Stream**.

2. **Selecione + Stream**

3. **Dê um nome ao stream**

   Na seção **General**, insira um **Name**. Por exemplo: `waf-to-siem`.

4. **Selecione a fonte de dados WAF Events**

   Na seção **Input**, selecione *WAF Events* em **Data Source**.

5. **Desligue o Sampling**

   Na seção **Transform**, desligue **Sampling** enquanto **Option** ainda está em *All Current and Future Workloads*, o valor inicial. Um stream não pode ter sampling e um filtro de workloads ao mesmo tempo.

6. **Escolha o workload**

   Na seção **Transform**, defina **Option** como *Filter Workloads*. Em **Available Workload**, selecione o workload que o WAF protege e mova-o para **Chosen Workload** com a seta.

7. **Selecione o template**

   Na seção **Render Template**, selecione *WAF Event Collector* em **Template**. O campo **Data Set** mostra as chaves de cada linha de log.

8. **Selecione o endpoint**

   Na seção **Output**, selecione *Apache Kafka* em **Connector**. Para outro SIEM, selecione a opção dele, como *Splunk*, *IBM QRadar* ou *Elasticsearch*, e insira os campos que [Endpoints](/pt-br/documentacao/plataforma/data-stream/endpoints/) lista para ele.

9. **Insira os bootstrap servers**

   Em **Bootstrap Servers**, insira cada servidor como `host:port`, separados por vírgula e sem espaço. Por exemplo: `kafka1.example.com:9092,kafka2.example.com:9092`.

10. **Insira o tópico**

    Em **Kafka Topic**, insira o nome do tópico que o seu SIEM lê. Por exemplo: `azion.waf`.

11. **(Opcional) Ligue o TLS**

    Ligue **Enable Transport Layer Security (TLS)** para enviar os eventos criptografados. Os servidores de destino precisam de um certificado de uma autoridade certificadora confiável.

12. **Mantenha o stream ativo**

    Na seção **Status**, mantenha **Active** ligado.

13. **Selecione Save**

O Console mostra `Your data stream has been created`. O stream aparece na lista do **Data Stream** com `waf` na coluna **Source** e o status *Active*.

**API**

Para criar o stream com a API, envie uma requisição `POST` para `https://api.azion.com/v4/workspace/stream/streams`. Substitua `[TOKEN VALUE]` pelo seu personal token, `<workload-id>` pelo ID do seu workload e os valores do cluster pelos seus:

```bash
curl -X POST 'https://api.azion.com/v4/workspace/stream/streams' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Token [TOKEN VALUE]' \
  -d '{
    "name": "waf-to-siem",
    "active": true,
    "inputs": [
      { "type": "raw_logs", "attributes": { "data_source": "waf" } }
    ],
    "transform": [
      { "type": "filter_workloads", "attributes": { "workloads": [<workload-id>] } },
      { "type": "render_template", "attributes": { "template": 4 } }
    ],
    "outputs": [
      {
        "type": "kafka",
        "attributes": {
          "bootstrap_servers": "kafka1.example.com:9092,kafka2.example.com:9092",
          "kafka_topic": "azion.waf",
          "use_tls": true
        }
      }
    ]
  }'
```

A fonte de dados `waf` é *WAF Events* no Console, e o template `4` é o *WAF Event Collector*. A API exige `kafka_topic` e `use_tls`: envie `true` para criptografar os eventos com TLS, ou `false` para enviá-los sem criptografia. Uma resposta `201` traz o stream armazenado em `data`. Guarde o `id` dele: ele identifica o stream em todas as requisições seguintes, como `/v4/workspace/stream/streams/<stream-id>`. Para cada chave do corpo, consulte [Configurações do stream](/pt-br/documentacao/plataforma/data-stream/configuracoes-do-stream/#objeto-do-stream).

Salvar o stream verifica o formato de cada campo e não contata o cluster. Um endereço de servidor ou um tópico errado só aparece quando o stream envia. Uma ativação entra em vigor depois de um a dois minutos.

---

## Confirme a entrega

[Real-Time Events](/pt-br/documentacao/plataforma/real-time-events/fontes-de-dados/#data-stream) registra cada envio de um stream, entregue ou não, com o código de status que o endpoint retornou. Envie algumas requisições ao workload que o WAF analisa e aguarde cerca de um minuto. Um stream envia um lote a cada 60 segundos, ou antes, quando chega a 2.000 linhas de log.

**Console**

Para encontrar os envios no Azion Console:

1. **Abra o Real-Time Events**

   Acesse [Azion Console](https://console.azion.com/) > **Real-Time Events**.

2. **Selecione a fonte de dados Data Stream**

3. **Leia os envios mais recentes**

   Cada linha é um envio. Encontre as linhas cujo **Endpoint Type** corresponde ao seu endpoint e leia o **Status Code** delas.

Um **Status Code** `200` significa que o endpoint aceitou o lote. **Streamed Lines** dá o número de linhas de log do lote.

**API**

Para ler os envios com a API, faça uma query no dataset `dataStreamedEvents` da API GraphQL do Real-Time Events. Substitua as datas por um intervalo que cubra a ativação do stream:

```bash
curl -X POST 'https://api.azion.com/v4/events/graphql' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Token [TOKEN VALUE]' \
  -d '{"query":"query { dataStreamedEvents(limit: 20, filter: {tsRange: {begin: \"2026-01-01T11:30:00\", end: \"2026-01-01T13:00:00\"}}, orderBy: [ts_DESC]) { ts endpointType statusCode streamedLines dataStreamed } }"}'
```

A API responde `200` com um registro para cada envio, o mais recente primeiro. Para um stream que envia para o S3, um registro fica como abaixo. Os seus registros trazem o tipo do seu endpoint em `endpointType`:

```json
{
  "data": {
    "dataStreamedEvents": [
      {
        "ts": "2026-01-01T12:00:00Z",
        "endpointType": "S3",
        "statusCode": 200,
        "streamedLines": 2,
        "dataStreamed": 2797
      }
    ]
  }
}
```

Um `statusCode` `200` significa que o endpoint aceitou o lote, cujo tamanho `streamedLines` informa em linhas de log e `dataStreamed` em bytes. Uma lista `dataStreamedEvents` vazia significa que o stream não enviou nada no intervalo. Para cada campo, consulte [Campos da API GraphQL do Real-Time Events](/pt-br/documentacao/devtools/graphql/campos-gql-real-time-events/#datastreamedevents-data-stream).

Um status diferente de `200` é a resposta do endpoint, e `503` significa que Data Stream encontrou o endpoint indisponível. Para as causas, consulte [Solucionar problemas de Data Stream](/pt-br/documentacao/plataforma/data-stream/solucao-de-problemas/).

No SIEM, cada linha de log traz as chaves do template *WAF Event Collector*. Leia estas chaves para verificar que os eventos são os que o WAF analisou:

- `waf_attack_action` traz a ação que o WAF tomou, como `$BLOCK` ou `$PASS`.
- `waf_attack_family` traz a classe da infração, como `SQL` ou `XSS`.
- `waf_score` e `waf_match` trazem a pontuação da requisição e as infrações que ela acionou.
- `blocked` vale `1` quando o WAF bloqueou a requisição. Enquanto `waf_learning` vale `1`, o WAF não bloqueia nenhuma requisição.

Para correlacionar esses eventos com os dados de requisição das suas aplicações em uma única linha de log, use a fonte de dados *Applications* com o template *Applications + WAF Event Collector*. Para o trade-off, consulte [Boas práticas para Data Stream](/pt-br/documentacao/plataforma/data-stream/boas-praticas/#use-o-template-predefinido-applications--waf-event-collector-para-alimentar-um-siem).

---

## Próximos passos

- [Fontes de dados e variáveis](/pt-br/documentacao/plataforma/data-stream/fontes-de-dados-e-variaveis.md#waf-events): Leia o que cada variável da fonte de dados WAF Events traz, com um valor de exemplo.
- [Endpoints](/pt-br/documentacao/plataforma/data-stream/endpoints.md): Encontre os campos do endpoint que o seu SIEM lê, com os limites e os nomes na API.
- [Envie logs para o Apache Kafka](/pt-br/documentacao/guias/plataforma/observabilidade/apache-kafka-endpoint.md): Defina os bootstrap servers, o tópico e o TLS de um endpoint Apache Kafka.
- [Solucionar problemas de Data Stream](/pt-br/documentacao/plataforma/data-stream/solucao-de-problemas.md): Descubra o que mudar quando um envio retorna um status diferente de 200.
- [Bloquear atacantes automaticamente a partir de detecções do SIEM](/pt-br/documentacao/casos-de-uso/proteger-aplicacoes-e-redes/bloquear-atacantes-automaticamente-a-partir-de-deteccoes-do-siem.md): Um design em que as detecções do SIEM sobre estes eventos voltam como bloqueios em uma network list.
