pending_approval, a chamada de ferramenta é
retida e seu agente espera. Por padrão um revisor limpa essa retenção do console.
O webhook de aprovação do firewall conecta o mesmo portão ao seu sistema: o
gateway faz POST de uma notificação assinada ao seu endpoint no momento em que uma
chamada é retida, e seu sistema faz POST de uma decisão assinada por HMAC de volta
para liberá-la — sem assento de console, sem consultar um humano.
Esta é a metade assíncrona (callback) do human-in-the-loop. A chamada retida, o
veredito e o caminho de resolução do console são cobertos em
Resolver aprovações e na
referência do Firewall; esta página
é apenas a fiação do webhook.
O webhook é um aviso de caminho rápido, não o sistema de registro. O long-poll
do relay na chamada retida é o portão autoritativo — se uma notificação é perdida
ou seu receptor está fora, a retenção ainda permanece e um revisor pode limpá-la
do console. Configurar o webhook apenas adiciona uma forma programática de
resolvê-la.
1. Quando usar um webhook de aprovação do firewall
Recorra a ele quando um portão de firewall human-in-the-loop tem de ser resolvido por algo diferente de uma pessoa clicando um botão:Roteie para sua própria UI de aprovações
Empurre chamadas de ferramenta retidas para o Slack, PagerDuty ou uma fila de
revisão interna e resolva-as onde sua equipe já trabalha.
Política programática
Auto-aprove um
db.query retido contra uma réplica de leitura, auto-rejeite
um contra prod — seu código decide, o gateway aplica.2. Configure-o no console
Ambas as metades vivem em uma configuração de workspace. Abra Firewall → Settings e preencha dois campos (uma ação Developer+ — a escrita de configurações é restrita por papel):Approval webhook URL — para onde notificamos você
Approval webhook URL — para onde notificamos você
O endpoint
https:// para o qual fazemos POST quando uma chamada é retida.
HTTP é recusado, e a URL passa por um preflight de SSRF ao salvar, então um
destino de loopback, faixa privada ou cloud-metadata é rejeitado antes de
poder ser armazenado. Deixe-o vazio para desabilitar o caminho assíncrono
inteiramente.Shared secret — como ambos os lados autenticam
Shared secret — como ambos os lados autenticam
3. A notificação que enviamos a você
Quando uma chamada é retida, fazemos POST de um envelope JSON assinado à sua URL:approval_id de que você precisa para resolver e identificadores para
correlacionar, nunca os argumentos da ferramenta. O detalhe do argumento vive na
fila de Approvals e no
log de events do firewall.
4. O callback que você faz POST de volta
Para liberar (ou rejeitar) a retenção, faça POST de sua decisão ao endpoint de callback com oapproval_id da notificação:
decision é approved ou rejected — nenhum outro valor é aceito. reason é
opcional e aparece na trilha de auditoria da aprovação resolvida.
O callback é first-decision-wins e idempotente: quem resolve primeiro — seu
webhook ou um revisor de console — define o resultado, e um callback repetido para
uma aprovação já resolvida retorna 200 para que seu sistema pare de fazer
retry.
5. Liberando a chamada retida
Resolver a aprovação não reproduz a chamada de ferramenta para você — ela levanta o portão para que seu agente possa reemiti-la. O runtime do agente:- Consulta o estado da retenção em
GET /api/v1/firewall/approvals/:id(uma chave com escopo de firewall-gateway, não sua chave de relay ou sessão de console) até ela sair depending. - No
approved, reenvia a chamada de ferramenta original carregando um headerX-OrcaRouter-Firewall-Approvalde uso único — o gateway deixa aquela única chamada passar e o token é gasto.
Se a regra subjacente foi editada depois de a chamada ser retida, a
fila de Approvals sinaliza que a regra
mudou desde então e suprime a cláusula “held because…” agora obsoleta, para que um
revisor de console não aja sobre proveniência que não corresponde mais ao que
reteve a chamada.
6. Verifique a fiação
Uma verificação rápida de ponta a ponta antes de depender dela:| Passo | O que fazer | Esperado |
|---|---|---|
| Reter uma chamada | Acione uma regra com um veredito pending_approval | 400 firewall_approval_pending |
| Notificação | Observe seu endpoint | POST firewall.approval.pending assinado chega |
| Callback | Faça POST de um { "decision": "approved" } assinado | 200 com o estado resolvido |
| Guarda de replay | Faça POST do callback de novo | 200, já resolvido (sem dupla aplicação) |
7. Onde isso se encaixa
Resolver aprovações
O caminho do revisor de console e o ciclo de vida completo da chamada retida.
Vereditos
De onde
pending_approval vem e como ele se compõe com outros vereditos.Chaves de gateway
Cunhe a chave com escopo de firewall-gateway de que o fluxo de consulta +
reenvio precisa.
Agência excessiva
A ameaça que os portões human-in-the-loop são construídos para conter.
