View a markdown version of this page

Invocando o DevOps agente por meio do Webhook - AWS DevOps Agente

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Invocando o DevOps agente por meio do Webhook

Os webhooks permitem que sistemas externos acionem automaticamente as investigações do AWS DevOps agente. Isso permite a integração com sistemas de emissão de tíquetes, ferramentas de monitoramento e outras plataformas que podem enviar solicitações HTTP quando ocorrem incidentes.

Pré-requisitos

Antes de configurar o acesso ao webhook, verifique se você tem:

  • Um espaço de agente configurado no AWS DevOps Agente

  • Acesso ao console do AWS DevOps agente

  • O sistema externo que enviará solicitações de webhook

Tipos de webhook

AWS DevOps O agente oferece suporte aos seguintes tipos de webhooks:

  • Integration-specific webhooks — gerados automaticamente quando você configura integrações de terceiros, como Dynatrace, Splunk, Datadog, New Relic ou Slack. ServiceNow Esses webhooks estão associados à integração específica e usam métodos de autenticação determinados pelo tipo de integração.

  • Webhooks genéricos — Podem ser criados manualmente para acionar investigações de qualquer fonte não coberta por uma integração específica. No console do AWS DevOps Agente, um webhook genérico é criado como um webhook do Agent Space (com o escopo de um Agent Space). Ao criar um webhook genérico, você escolhe seu método de autenticação: HMAC ou chave de API (token portador).

  • Webhooks de alerta do Grafana — O Grafana pode enviar notificações de alerta diretamente ao AWS DevOps agente por meio de pontos de contato do webhook. Para obter instruções de configuração, incluindo um modelo de notificação personalizado, consulte Conectando o Grafana.

Métodos de autenticação de webhook

O método de autenticação do seu webhook depende da integração à qual ele está associado:

Autenticação HMAC — Usada por:

  • Webhooks de integração com o Dynatrace

  • Webhooks genéricos (selecione HMAC na criação)

  • Webhooks do servidor MCP (selecione HMAC na criação)

Autenticação por token de portador — Usada por:

  • Webhooks de integração com o Splunk

  • Webhooks de integração com Datadog

  • Webhooks de integração com New Relic

  • ServiceNow webhooks de integração

  • Webhooks de integração com o Slack

  • Webhooks de integração com o Grafana

  • Webhooks genéricos (selecione a chave da API na criação)

  • Webhooks do servidor MCP (selecione a chave da API na criação)

Entendendo a autenticação HMAC

O HMAC (Hash-based Message Authentication Code) é um mecanismo criptográfico que verifica a integridade e a autenticidade de uma solicitação de webhook. Ao enviar um webhook com autenticação HMAC, você gera uma assinatura combinando o carimbo de data/hora e a carga útil da solicitação usando sua chave secreta com o algoritmo. SHA-256 AWS DevOps O agente calcula de forma independente o mesmo hash e compara as duas assinaturas. Se corresponderem, a solicitação será aceita.

Como o carimbo de data/hora está incluído na assinatura, o HMAC também oferece proteção contra repetição — o AWS DevOps agente pode rejeitar solicitações com carimbos de data/hora que estão muito distantes, impedindo que um invasor capture e reenvie uma solicitação válida.

Escolhendo entre o HMAC e o token Bearer

Consideração HMAC Token do portador
Complexidade da configuração Mais complexo — seu cliente deve computar uma assinatura para cada solicitação usando o timestamp e a carga Mais simples — inclua um token estático no Authorization cabeçalho
Integridade da carga útil Verificado — qualquer modificação na carga após a assinatura invalida a assinatura Não verificado — o token autentica o remetente, mas não protege o conteúdo da carga
Proteção de repetição Built-in — o carimbo de data/hora na assinatura permite que o servidor rejeite solicitações obsoletas Não incorporado — um token capturado pode ser reutilizado até ser girado
Risco de exposição secreta Inferior — o segredo nunca é transmitido na solicitação; somente a assinatura computada é enviada Maior — o token é enviado em cada cabeçalho de solicitação, aumentando a exposição se o tráfego for interceptado
Quando usar Recomendado quando você precisa de garantias de segurança mais fortes, como para webhooks genéricos ou ambientes com requisitos rígidos de conformidade Adequado quando a facilidade de integração é uma prioridade e seu transporte de rede é confiável, como para integrações SaaS gerenciadas por HTTPS

Configurando o acesso ao webhook

Etapa 1: Navegue até a configuração do webhook

  1. Faça login no AWS Management Console e navegue até o console do AWS DevOps Agente

  2. Selecione seu Agent Space

  3. Vá para a guia Capacidades

  4. Na seção Webhook, escolha Configurar

Etapa 2: gerar credenciais de webhook

Para webhooks específicos de integração:

Os webhooks são gerados automaticamente quando você conclui a configuração de uma integração de terceiros. O URL e as credenciais do endpoint do webhook são fornecidos no final do processo de configuração da integração.

Para webhooks genéricos:

  1. Escolha Gerar webhook

  2. Para o tipo de autenticação Webhook, escolha a chave HMAC ou API:

    • HMAC — O sistema gera um segredo de assinatura de webhook. Seu cliente assina cada solicitação e envia a assinatura no x-amzn-event-signature cabeçalho (consulte a Versão 1 abaixo).

    • Chave de API — O sistema gera uma chave de API (token portador). Seu cliente o envia no Authorization: Bearer <token> cabeçalho (consulte a versão 2 abaixo).

  3. Armazene com segurança o segredo gerado ou a chave de API. Você não poderá recuperá-lo novamente.

  4. Copie o URL do endpoint do webhook fornecido

Etapa 3: configurar seu sistema externo

Use a URL e as credenciais do endpoint do webhook para configurar seu sistema externo para enviar solicitações ao Agente. AWS DevOps As etapas de configuração específicas dependem do seu sistema externo.

Gerenciando credenciais de webhook

As credenciais do webhook são confidenciais. AWS DevOps O agente mostra o segredo do webhook uma vez, quando você cria o webhook. Ele não retorna o segredo novamente por meio do console, da API ou da infraestrutura como código. O URL do webhook permanece disponível. Se você perder o segredo ou criar o webhook sem gravá-lo, gire o webhook para gerar um novo segredo.

Credenciais rotativas de webhook

Você pode alternar as credenciais de qualquer webhook na guia Capacidades. O Rotation mantém o mesmo URL do webhook e gera um novo segredo. A rotação invalida o segredo anterior, então o remetente pára até que você o atualize com o novo segredo. Gire um webhook quando perder o segredo ou quando quiser substituir um segredo que possa estar comprometido.

Para girar um webhook:

  1. Faça login no AWS Management Console e abra o console do AWS DevOps Agente.

  2. Selecione seu Agent Space.

  3. Vá até a guia Capacidades e encontre o webhook:

    • Para um webhook de integração, use a tabela Capability Webhooks. Encontre a integração por seu identificador, por exemplo, o URL da sua ServiceNow instância ou seu endpoint Grafana.

    • Para um webhook genérico, use a seção Webhook do Agent Space.

  4. Abra o editor de webhook. Para um webhook de integração, escolha Editar. Para um webhook genérico, escolha Ações e, em seguida, Editar.

  5. Escolha Rotate webhook. O console gera um novo segredo e mantém o mesmo URL do webhook.

  6. Escolha Baixar arquivo.csv para salvar o URL e o segredo e, em seguida, confirme se você os salvou. Você não pode recuperar o segredo depois de sair desta página.

  7. Atualize o remetente com o novo segredo. Para uma integração, expanda Instruções de configuração do serviço para ver as etapas específicas do serviço ou consulte o guia de conexão para sua integração.

Para copiar o URL do webhook sem girar o segredo, escolha Copiar URL.

Webhooks criados com infraestrutura como código

Quando você cria um webhook com AWS CloudFormation o AWS CDK ou o Terraform, a pilha não retorna o segredo do webhook como saída, porque é um valor confidencial. Após a conclusão da implantação, obtenha o segredo girando o webhook, conforme descrito na seção anterior. Em seguida, configure seu serviço de terceiros com o URL do webhook e o novo segredo.

Removendo credenciais de webhook

Para excluir um webhook genérico, abra a seção Webhook do Agent Space, escolha Ações e escolha Remover. Depois de remover o webhook, o endpoint não aceita mais solicitações até que você crie um novo webhook.

Usando o webhook

Formato de solicitação de webhook

Para iniciar uma investigação, seu sistema externo deve enviar uma solicitação HTTP POST para a URL do endpoint do webhook.

Para a versão 1 (autenticação HMAC):

Cabeçalhos:

  • Content-Type: application/json

  • x-amzn-event-signature: <HMAC signature>

  • x-amzn-event-timestamp: <+%Y-%m-%dT%H:%M:%S.000Z>

A assinatura HMAC é gerada assinando o corpo da solicitação com sua chave secreta usando SHA-256.

Para a versão 2 (autenticação por token de portador):

Cabeçalhos:

  • Content-Type: application/json

  • Authorization: Bearer <your-token>

Corpo da solicitação:

O corpo da solicitação deve incluir informações sobre o incidente:

{ "eventType": "incident", "incidentId": "incident-123", "action": "created", "priority": "HIGH", "title": "High CPU usage on production server", "description": "High CPU usage on production server host ABC in AWS account 1234 region us-east-1", "timestamp": "2025-11-23T18:00:00Z", "service": "MyProductionService", "data": { "metadata": { "region": "us-east-1", "environment": "production" } } }

Esquema de carga útil:

{ eventType: 'incident'; incidentId: string; action: 'created' | 'updated' | 'closed' | 'resolved'; priority: "CRITICAL" | "HIGH" | "MEDIUM" | "LOW" | "MINIMAL"; title: string; description?: string; timestamp?: string; service?: string; // The original event generated by service is attached here. data?: object; }

Código de exemplo

Versão 1 (autenticação HMAC) -: JavaScript

const crypto = require('crypto'); // Webhook configuration const webhookUrl = 'https://your-webhook-endpoint.amazonaws.com/invoke'; const webhookSecret = 'your-webhook-secret-key'; // Incident data const incidentData = { eventType: 'incident', incidentId: 'incident-123', action: 'created', priority: "HIGH", title: 'High CPU usage on production server', description: 'High CPU usage on production server host ABC in AWS account 1234 region us-east-1', timestamp: new Date().toISOString(), service: 'MyTestService', data: { metadata: { region: 'us-east-1', environment: 'production' } } }; // Convert data to JSON string const payload = JSON.stringify(incidentData); const timestamp = new Date().toISOString(); const hmac = crypto.createHmac("sha256", webhookSecret); hmac.update(`${timestamp}:${payload}`, "utf8"); const signature = hmac.digest("base64"); // Send the request fetch(webhookUrl, { method: 'POST', headers: { 'Content-Type': 'application/json', 'x-amzn-event-timestamp': timestamp, 'x-amzn-event-signature': signature }, body: payload }) .then(res => { console.log(`Status Code: ${res.status}`); return res.text(); }) .then(data => { console.log('Response:', data); }) .catch(error => { console.error('Error:', error); });

Versão 1 (autenticação HMAC) - cURL:

#!/bin/bash # Configuration WEBHOOK_URL="https://event-ai.us-east-1.api.aws/webhook/generic/YOUR_WEBHOOK_ID" SECRET="YOUR_WEBHOOK_SECRET" # Create payload TIMESTAMP=$(date -u +%Y-%m-%dT%H:%M:%S.000Z) INCIDENT_ID="test-alert-$(date +%s)" PAYLOAD=$(cat <<EOF { "eventType": "incident", "incidentId": "$INCIDENT_ID", "action": "created", "priority": "HIGH", "title": "Test Alert", "description": "Test alert description", "service": "TestService", "timestamp": "$TIMESTAMP" } EOF ) # Generate HMAC signature SIGNATURE=$(echo -n "${TIMESTAMP}:${PAYLOAD}" | openssl dgst -sha256 -hmac "$SECRET" -binary | base64) # Send webhook curl -X POST "$WEBHOOK_URL" \ -H "Content-Type: application/json" \ -H "x-amzn-event-timestamp: $TIMESTAMP" \ -H "x-amzn-event-signature: $SIGNATURE" \ -d "$PAYLOAD"

Versão 2 (autenticação por token de portador) -: JavaScript

function sendEventToWebhook(webhookUrl, secret) { const timestamp = new Date().toISOString(); const payload = { eventType: 'incident', incidentId: 'incident-123', action: 'created', priority: "HIGH", title: 'Test Alert', description: 'Test description', timestamp: timestamp, service: 'TestService', data: {} }; fetch(webhookUrl, { method: "POST", headers: { "Content-Type": "application/json", "x-amzn-event-timestamp": timestamp, "Authorization": `Bearer ${secret}`, // Fixed: template literal }, body: JSON.stringify(payload), }); }

Versão 2 (autenticação por token de portador) - cURL:

#!/bin/bash # Configuration WEBHOOK_URL="https://event-ai.us-east-1.api.aws/webhook/generic/YOUR_WEBHOOK_ID" SECRET="YOUR_WEBHOOK_SECRET" # Create payload TIMESTAMP=$(date -u +%Y-%m-%dT%H:%M:%S.000Z) INCIDENT_ID="test-alert-$(date +%s)" PAYLOAD=$(cat <<EOF { "eventType": "incident", "incidentId": "$INCIDENT_ID", "action": "created", "priority": "HIGH", "title": "Test Alert", "description": "Test alert description", "service": "TestService", "timestamp": "$TIMESTAMP" } EOF ) # Send webhook curl -X POST "$WEBHOOK_URL" \ -H "Content-Type: application/json" \ -H "x-amzn-event-timestamp: $TIMESTAMP" \ -H "Authorization: Bearer $SECRET" \ -d "$PAYLOAD"

Solução de problemas de webhooks

Se você não receber um 200

Um 200 e uma mensagem como webhook recebida indicam que a autenticação foi aprovada e a mensagem foi colocada na fila para que o sistema verifique e processe. Se você não obtiver 200, mas 4xx, provavelmente há algo errado com a autenticação ou os cabeçalhos. Tente enviar manualmente usando as opções curl para ajudar a depurar a autenticação.

Se você receber 200, mas uma investigação não começar

A causa provável é uma carga mal formatada.

  1. Verifique se o carimbo de data/hora e o ID do incidente estão atualizados e exclusivos. As mensagens duplicadas são desduplicadas.

  2. Verifique se a mensagem é JSON válida

  3. Verifique se o formato está correto

Se você receber 200 e a investigação for imediatamente cancelada

O mais provável é que você tenha atingido o limite do mês. Fale com seu AWS contato para solicitar uma alteração no limite de tarifa, se apropriado.