---
title: 20. Área de automação
slug: 20-area-de-automacao
docTags: 
createdAt: 2026-10-13T14:40:23.624Z
---

*O que a plataforma faz sozinha, num lugar só — conectores, regras e destinos de webhook.*

A **Automação** é o grupo do menu com tudo o que roda sem ninguém clicar: o que **entra** (conectores que trazem eventos e logs), o que **decide** (regras que transformam resposta e log em achado, e avisos por regra) e o que **sai** (destinos que recebem um aviso por HTTP quando algo acontece). Antes isso estava espalhado entre Auditoria e Administração, e quem queria saber "o que a plataforma faz sozinha" precisava conhecer três menus.

| **Tela**                   | **O que faz**                                                                                                                | **Para ver**      |
| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ----------------- |
| **Painel da automação**    | coletores no ar, inspeções, execuções e custo da semana, achados abertos, o que está falhando e a cadeia de selos            | `automacao:ler`   |
| **Achados**                | a caixa única: achados de inspeção e de log, para confirmar, descartar ou promover                                           | `automacao:ler`   |
| **Eventos e conectores**   | SIEM, XDR, EDR, nuvem, identidade e ITSM; regras de log e achados de log ficam na integração aberta (*Eventos e conectores*) | `integracao:ler`  |
| **Automação de respostas** | a resposta de auditoria que vira NC ou risco (*Automação de respostas*)                                                      | `auditoria:ler`   |
| **Avisos por regra**       | quem recebe o quê, e quando (*Avisos e e-mail*)                                                                              | `admin:usuarios`  |
| **Fontes de conteúdo**     | de onde o coletor lê documentos, código e mensagens                                                                          | `integracao:ler`  |
| **Inspeções**              | uma fonte lida pelas lentes e julgada contra as normas                                                                       | `automacao:ler`   |
| **Lentes**                 | o que procurar, escrito pelo cliente                                                                                         | `automacao:ler`   |
| **Destinos**               | para onde sai o aviso: webhook, Teams, CITSmart ou e-mail                                                                    | `automacao:ler`   |
| **Sandbox**                | ensaiar regra e modelo sem gravar de verdade (*Modelos de linguagem, parecer prévio e sandbox*)                              | `llm:administrar` |



As telas mudaram de grupo, e não de endereço: avisos antigos, links e a ajuda continuam abrindo a mesma tela. Embaixo do grupo há atalhos para **Modelo de linguagem**, **Contas de serviço** e **Regras de atendimento**, que ficam onde estão porque servem à plataforma inteira (ou aos casos).

As permissões da área são `automacao:ler` (ver destinos e entregas), `automacao:escrever` (cadastrar, testar e reenviar) e `automacao:triar` (decidir o que um achado da automação vira). De fábrica, o administrador e o gestor têm as três, e o analista tem ler e triar. Perfis próprios que já viam ou mantinham as integrações receberam o equivalente na atualização.

***

### <font color="#15803D">O coletor: quem faz o trabalho pesado</font>

Ler milhares de documentos, abrir compactados, fazer OCR e chamar o modelo de linguagem é peso, e esse peso não roda dentro da plataforma: roda no **grc-coletor**, um processo à parte, em quantas instâncias forem precisas — numa máquina ao lado ou dentro da rede do cliente. O coletor fala com a plataforma só pela API, com uma **conta de serviço** do perfil **Coletor de inspeção** (Administração ▸ Contas de serviço): pede trabalho, recebe a inspeção com a credencial da fonte, entrega os achados e encerra.

Há dois jeitos de ligar o coletor:

•     **Coletor da instalação** (GRC\_COLETOR\_CHAVE\_INSTALACAO, a mesma no app e no coletor, ao menos 32 caracteres). Ele atende **todos os tenants ativos** — inclusive os criados depois que subiu, conferidos a cada cinco minutos —, sem uma chave por cliente e sem reinício. Em cada tenant ele trabalha com uma conta de serviço própria, **Coletor da instalação**, que a plataforma cria na primeira vez e que o administrador do tenant vê em Contas de serviço: o RLS, a trilha e o teto de ingestão seguem por tenant. **Revogar** essa conta tira o coletor da instalação daquele tenant. A chave da instalação só abre a API do coletor: no resto da plataforma ela não vale nada.

•     **Coletor do cliente** (GRC\_COLETOR\_CHAVES): a chave de uma conta de serviço do próprio tenant, para quem roda o coletor dentro da rede do cliente, perto das fontes que só ele alcança.

•     Cada inspeção vai a um coletor por vez, por 15 minutos renováveis. Coletor que cai deixa a vez vencer e outro continua de onde os documentos ficaram.

•     Antes de cada lote ao modelo, o coletor pergunta se pode: com gente usando a IA pela tela, fora da janela de lote ou com o modelo recusando chamadas, ele espera. A tela continua rápida.

•     A entrega tem teto por tenant (600 documentos por minuto). Vinte coletores juntos não deixam a plataforma lenta. O teto é contado no banco e vale para a instalação inteira: com várias instâncias da aplicação atrás do balanceador, o tenant continua com 600 no total, e não 600 em cada uma. Quem passa do teto recebe 429 com o tempo de espera, e o coletor tenta de novo depois.

•     O topo de **Inspeções** diz quantos coletores estão no ar e se têm OCR.

•     A API do coletor é só para conta de serviço. Nem o administrador, que tem todas as permissões, a chama com o login dele: a resposta leva a credencial decifrada da fonte.

•     Fora da própria máquina e da rede do compose, o coletor só fala com a plataforma por **https** (`GRC_COLETOR_API`). Quem instala numa rede já cifrada por outro meio libera o http com `GRC_COLETOR_PERMITIR_HTTP=true`.

•     Sem memória, o coletor sai e o contêiner sobe de novo: ficar de pé com o trabalhador parado deixaria os tenants sem inspeção.

***

### <font color="#15803D">Fontes de conteúdo</font>

Em **Automação ▸ Fontes de conteúdo** (mudar pede `integracao:escrever`), **Nova fonte** e escolha o tipo: **Pasta**, **MinIO ou S3**, **Envio manual**, **Links**, **SharePoint**, **OneDrive**, **SharePoint local**, **Google Drive**, **CITSmart Athena (GED)**, **GitHub**, **GitLab**, **E-mail (IMAP)**, **E-mail (Microsoft 365)** ou **Teams (canais)**. O formulário pede os campos do tipo; senha, token e chave vão cifrados e não voltam à tela (em branco na edição mantém o que está guardado).

•     **Testar** é um pedido: a plataforma não alcança a fonte, quem alcança é o coletor. Ele atende no pulso seguinte e devolve uma amostra do que enxergou (até cinco documentos), ou o erro.

•     **Pasta**: cada tenant tem a própria pasta no coletor, `/dados/<código do tenant>` (`GRC_COLETOR_PASTAS` muda a raiz), e o **caminho** da fonte é relativo a ela: politicas, ou . para a pasta inteira. Caminho absoluto, .. e link simbólico para fora são recusados — o mesmo coletor atende vários tenants, e nenhum lê a pasta do outro.

•     **Links** lê só a web pública: endereço da rede interna é recusado, no cadastro e a cada link seguido.

•     Todo endereço de fonte (S3, Athena, SharePoint local, GitHub, GitLab, IMAP) é conferido: rede do cliente sim; a própria máquina, os metadados da nuvem e a rede da plataforma, não. Redirecionamento para outro servidor é seguido sem a credencial da fonte.

•     **Envio manual**: em **Arquivos**, envie o contrato ou a política avulsa (até 50 MB); entra na próxima execução das inspeções da fonte.

•     **E-mail e Teams** leem mensagens de pessoas. A fonte só roda depois que quem administra a plataforma (`admin:usuarios`) registrar, em **Base legal**, a hipótese da LGPD, a política que sustenta o monitoramento e quem a aprovou no jurídico e no encarregado de dados. Revogar a base legal pausa as inspeções da fonte.

***

### <font color="#15803D">Lentes</font>

Uma lente é o que procurar, escrito como se diria a um auditor. Em **Automação ▸ Lentes**, **Nova lente**: um gatilho por título ##, com o que conta e o que não conta como achado (o formulário traz um modelo). Mudar as instruções cria a **versão** seguinte — o achado diz por qual versão foi reconhecido, e os documentos já vistos voltam ao modelo na execução seguinte.

**Lentes de fábrica.** Todo tenant nasce com cinco lentes do produto, marcadas **de fábrica**: segredos e credenciais expostos, dados pessoais fora do lugar (LGPD), procedimento que contraria a política, incidente sem tratamento e obrigação de fornecedor descumprida. Elas são só leitura: **Ligar** e **Desligar** valem para o seu tenant, e **Duplicar** cria uma cópia sua, que você ajusta à vontade — a de fábrica continua recebendo as melhorias do produto. Os exemplos que você põe numa lente de fábrica são do seu tenant. O modelo de tenant, no console, diz quais nascem ligadas.

Em **Versões e exemplos**, os **exemplos** são os casos já revisados por gente: "não é achado" (falso positivo) e "é achado". Os ativos entram no prompt da lente, para o mesmo erro não voltar. O falso positivo marcado na triagem vira exemplo sozinho.

O documento chega ao modelo como **dado**, depois das instruções, e um detector procura nele texto escrito para dar ordens ao modelo ("ignore as instruções anteriores…"): documento assim vira achado **Injeção de prompt suspeita**, mesmo que o modelo não dispare nada.

***

### <font color="#15803D">Inspeções</font>

Em **Automação ▸ Inspeções**, **Nova inspeção** junta uma **fonte**, as **lentes** e, se quiser, as **normas contra as quais julgar** (frameworks e temas do catálogo). Escolha a **frequência**, um **teto de tokens por execução** (estourado, a execução para e retoma depois de onde parou), **só estas extensões** e se o coletor deve fazer OCR. Salvar deixa em rascunho; **Ativar** põe na fila.

•     **Executar agora** antecipa a vez; **Reanalisar tudo** esquece o que já foi visto.

•     Documento com o mesmo conteúdo e a mesma chave de análise (versão das lentes, exemplos, normas e modelo) não vai ao modelo de novo.

•     Compactados (zip, 7z, tar, gz, bz2, xz) são abertos até três níveis, com teto de 5 000 arquivos e 512 MB descompactados — a bomba de compressão para no teto e o documento fica como falha.

Clique no nome da inspeção para ver:

•     **Achados**: o que as lentes reconheceram, com o trecho, a confiança e a versão da lente;

•     **Normas**: cada requisito e quantos documentos o **atendem**, atendem **em parte**, **não atendem** ou não tratam do assunto (**sem evidência**), com o trecho que sustenta cada veredito. Requisito sem trecho próximo no documento é "sem evidência" sem gastar chamada ao modelo; "não atende" com confiança vira também achado, ligado ao requisito;

•     **Documentos**: o que foi visto, ignorado, sem texto ou com falha, e o motivo;

•     **Execuções**: cada passada do coletor, com documentos, achados e tokens.

***

### <font color="#15803D">Painel da automação</font>

**Automação ▸ Painel da automação** mostra, numa olhada, o que roda sozinho: quantos coletores responderam nos últimos três minutos, inspeções ativas (e as atrasadas há mais de uma hora), execuções, documentos, achados e tokens dos últimos sete dias, o custo por inspeção, os achados abertos por severidade e destinos com entrega desistida. Em **Pede atenção** aparecem a fonte que falhou no teste e a inspeção ativa que não executa há uma semana. A tela se atualiza a cada minuto.

***

### <font color="#15803D">Achados: a caixa única</font>

Em **Automação ▸ Achados** estão, num lugar só, os achados das **inspeções** e os das **regras de log** — filtre por origem, situação, severidade ou texto. Clique no achado para ver a explicação, o trecho, o documento, o requisito, a lente e o selo. Decidir pede `automacao:triar`:

•     **Confirmar** — é achado, e alguém vai cuidar dele;

•     **Falso positivo** — pede o motivo, e o motivo vira **exemplo na lente** que reconheceu o achado: o mesmo caso não volta na próxima execução;

•     **Descartar** — não interessa, sem ensinar nada à lente;

•     **Reabrir** — volta atrás numa decisão;

•     **Virar NC** (pede também `nc:tratar`), **Virar risco** (`risco:escrever`) ou **Abrir caso** (`caso:abrir`). A NC nasce com origem **Inspeção**, o requisito violado, o trecho como evidência, o documento como link e a referência ao achado — promover de novo é recusado. O risco entra com o impacto da severidade; o caso, como incidente pelo canal API, com impacto e urgência da severidade.

**Comentários** ficam no achado, com resposta. **PDF** gera o relatório do achado, com a evidência, o selo, os comentários e quem gerou. Achado de log segue as decisões da tela de eventos (virar NC, risco ou descartar).

***

### <font color="#15803D">O selo: prova de que o achado não foi mexido</font>

Cada achado de inspeção, ao ser gravado, entra na **cadeia do dia** do tenant: o selo dele é o hash do conteúdo (título, explicação, evidências, documento, lente, requisito) **mais o selo do anterior**. O banco recusa mudar o conteúdo de um achado selado — a triagem (estado, motivo, quem decidiu, o que virou) continua livre. Se alguém mudasse o conteúdo por baixo, a cadeia quebraria daquele ponto em diante. Pelo mesmo motivo, achado selado não se apaga: a inspeção que já tem achados é **pausada**, e não removida, e a lente que reconheceu algum é **desativada** — a tela diz isso ao tentar.

No **Painel**, **Cadeia de selos** lista os dias; **Conferir** refaz os hashes, elo a elo, até o fim da cadeia, e separa os dois problemas: **lacuna** (falta um elo — achado apagado) e **adulteração** (o conteúdo do achado mudou depois de selado). Mesmo depois de uma lacuna, o conteúdo de cada elo seguinte continua conferido. De hora em hora a plataforma **ancora** a ponta de cada cadeia (**Ancorar agora** antecipa). A âncora leva o carimbo de tempo da **FreeTSA** (RFC 3161), a autoridade gratuita que o produto usa por padrão — só o hash sai da instalação — e o arquivo .tst pode ser baixado e conferido com qualquer ferramenta de carimbo de tempo (openssl ts -verify, com o certificado da FreeTSA). GRC\_SELO\_TSA\_URL troca a autoridade; vazio desliga, para a instalação sem internet, e aí a cadeia vale pelo encadeamento.

***

### <font color="#15803D">Destinos: avisar outro sistema quando algo acontece</font>

Um destino recebe um aviso a cada evento que ele assina. O **tipo** diz como:

| **Tipo**            | **O que chega**                                                                                                                                                                                            |
| ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Webhook**         | um POST com o JSON do evento, assinado — para o SIEM, o sistema de chamados ou um script seu                                                                                                               |
| **Microsoft Teams** | um cartão no canal: **Adaptive Card**, para o fluxo "Quando uma solicitação de webhook é recebida" do Power Automate, ou **MessageCard**, para o conector de entrada antigo                                |
| **CITSmart**        | um chamado aberto no CITSmart (/webmvc/servicerequestincident/create), com o título e o texto do evento; informe os ids de solicitante, atividade e contrato e o cabeçalho Authorization, guardado cifrado |
| **E-mail**          | a notificação às pessoas escolhidas — no sino e por e-mail, conforme a preferência de cada uma; não sai pedido para fora da plataforma                                                                     |



Em **Automação ▸ Destinos** (cadastrar pede `automacao:escrever`):

1.     Clique em **Novo destino** e escolha o **tipo** (não muda depois).

2.     Preencha **Nome** e **Endereço** (http ou https, com o nome completo do servidor ou o IP; o e-mail não tem endereço, e sim as pessoas que recebem) e marque em **Eventos** o que ele recebe:

◦      **nc.criada** — uma não conformidade nasceu, de qualquer origem (regra, auditoria, automação, log, inspeção ou à mão);

◦      **nc.estado\_alterado** — a NC mudou de estado (triagem, plano, conclusão, encerramento);

◦      **risco.criado** — um risco foi registrado;

◦      **achado\_de\_log.criado** — as regras de log reconheceram um desvio;

◦      **achado\_de\_inspecao.criado** — uma inspeção reconheceu um achado (lente, segredo, injeção ou requisito não atendido).

3.     Clique em **Criar destino**. A tela mostra o **segredo de assinatura** uma vez só: copie e entregue a quem cuida do sistema que recebe. Perdeu? **Trocar segredo** gera outro (o antigo deixa de valer na hora).

4.     Clique em **Testar**: a plataforma manda um evento teste agora e mostra o que o destino respondeu e em quanto tempo.

Na lista, cada destino mostra a última entrega com sucesso, a última falha e quantas entregas estão na fila. **Pausar** segura o envio (o que acontecer nesse meio-tempo não é enfileirado); **Entregas** abre o histórico, e **Reenviar** põe de volta na fila uma entrega que falhou — depois de consertar o outro lado.

O endereço não pode ser a própria máquina da plataforma, o enlace local onde mora o serviço de metadados da nuvem (169.254.x.x) nem um nome sem domínio (postgres, objetos), que é como os serviços da instalação se chamam entre si. Rede privada é aceita: o sistema de chamados do cliente costuma morar nela. A rede da própria plataforma, não: com a aplicação em contêiner, a sub-rede dela é recusada sozinha; fora de contêiner, informe as redes a recusar em GRC\_AUTOMACAO\_REDES\_BLOQUEADAS (CIDR, separados por vírgula). O endereço é conferido no cadastro e de novo a cada envio.

O **Testar** de um destino CITSmart abre um chamado de verdade no CITSmart do cliente, e a tela pede confirmação antes.

***

### <font color="#15803D">O que chega do outro lado</font>

```none
POST /seu/endereco
Content-Type: application/json
X-GRC-Evento: nc.criada
X-GRC-Entrega: 4f0c…           (o id desta entrega; igual nas tentativas)
X-GRC-Tentativa: 1
X-GRC-Timestamp: 1759314656    (segundos desde 1970)
X-GRC-Assinatura: sha256=9331ca93…
 
{"evento": "nc.criada", "entregaId": "4f0c…", "ocorridoEm": "2026-10-01T10:30:56Z",
 "registro": {"tipo": "NAO_CONFORMIDADE", "id": "…", "numero": "NC-2026-0237", "titulo": "…",
              "severidade": "ALTA", "estado": "IDENTIFICADO", "origem": "INSPECAO",
              "requisitoId": "…", "evidenciaUrl": "https://…", "referenciaExterna": "…"}}

```

A assinatura é o HMAC-SHA256 do segredo sobre `<X-GRC-Timestamp>.<corpo>`. Confira as duas coisas antes de confiar no aviso: a assinatura e o instante (recuse o que tiver mais de cinco minutos). Em Python:

```python
import hmac, hashlib, time
esperada = "sha256=" + hmac.new(segredo.encode(), f"{ts}.{corpo}".encode(), hashlib.sha256).hexdigest()
ok = hmac.compare_digest(esperada, cabecalho_assinatura) and abs(time.time() - int(ts)) < 300

```

Responda **2xx em até 10 segundos** e processe depois. Sem resposta, com 5xx, 408 ou 429, a entrega volta para a fila e tenta de novo em 30 s, 1 min, 2 min… dobrando até 6 h entre tentativas, e desiste depois de 10 (cerca de oito horas e meia). Outro 4xx (endereço errado, autenticação recusada) desiste na hora, porque repetir não muda nada. Use X-GRC-Entrega para descartar repetidos: numa queda de rede, a mesma entrega pode chegar duas vezes.

A entrega nasce na mesma gravação do que aconteceu: se a NC for gravada, o aviso não se perde mesmo que o destino esteja fora do ar; se a gravação for desfeita, o aviso não sai. Entregas enviadas ficam 30 dias no histórico, e as que desistiram, 90.

***

### <font color="#15803D">Não conformidade por API, com o que ela viola</font>

Quem cria NC pela API (uma conta de serviço com nc\:tratar) pode dizer, além de título, descrição e severidade, o que o achado viola e de onde ele veio:

| **Campo**                   | **O que é**                                                                    |
| --------------------------- | ------------------------------------------------------------------------------ |
| `origem`                    | MANUAL (padrão) ou INSPECAO. As demais origens nascem só dentro da plataforma. |
| `requisitoId`, `controleId` | o requisito e o controle do catálogo (de fábrica ou do tenant)                 |
| `evidenciaUrl`              | onde a evidência mora — o documento, o commit, a página; só http e https       |
| `evidenciaTrecho`           | o trecho que sustenta o achado, já sem dados pessoais                          |
| `referenciaExterna`         | o id do achado no sistema que o mandou                                         |



Com referenciaExterna, o pedido é **idempotente**: mandar o mesmo achado de novo devolve a NC que já existe (200), em vez de criar outra (201). É o que deixa um coletor reenviar um lote que caiu no meio sem duplicar nada. A NC mostra requisito, controle e evidência no detalhe, e o webhook nc.criada leva os mesmos campos.

***

### <font color="#15803D">Dados pessoais antes do modelo de linguagem</font>

Cada modelo em **Administração ▸ Modelo de linguagem** tem **Mascarar dados pessoais**. Ligado, o texto vai ao modelo com CPF, CNPJ, e-mail, telefone e cartão trocados por marcadores (\[CPF], \[E-MAIL]…) — o modelo não vê o número, mas vê que havia um, e é o que uma regra como "dado pessoal em log" precisa julgar. Número sem pontuação só vira marcador quando o dígito verificador confere (o cartão, quando passa no Luhn): onze dígitos quaisquer podem ser um pedido ou um protocolo.

Vem ligado para modelo fora da rede da instalação e desligado para o que mora nela (localhost, rede privada ou o ollama do compose), que é o caminho recomendado para quem não pode mandar texto para fora.

***

### <font color="#15803D">Análise de aderência gravada</font>

A análise de aderência do acervo (*Acervo de documentos*) continua sem guardar nada por padrão. Marque **Gravar esta análise** antes de **Analisar** para guardar **só o resultado** — requisito a requisito, com os trechos citados —, nunca o documento. As gravadas aparecem em **Análises gravadas**, abaixo da tela: clique para reabrir (e baixar o relatório de novo) ou apague. Cada pessoa vê as suas; quem configura o acervo vê todas.

O conector de logs **GRCS Inspect** saiu do catálogo de **Eventos e conectores**: não aceita integração nova, e a integração que já existe continua coletando até ser removida.

O destino **CITSmart** não reenvia sozinho uma entrega que pode ter aberto o chamado (resposta que não veio, erro do servidor): o CITSmart não recusa chamado repetido, e reenviar abriria o segundo. A entrega fica como desistida, com o aviso de conferir no CITSmart; **Reenviar** continua à mão. Conexão recusada, 429 e 503 voltam à fila normalmente.
