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 bilhetes, 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 do 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 Agent 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. Atualmente, os webhooks genéricos usam autenticação HMAC (o token do portador não está disponível no momento).
Webhooks de alerta do Grafana — O Grafana pode enviar notificações de alerta diretamente AWS DevOps ao 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 (não vinculados a uma integração específica de terceiros)
Autenticação de token do portador — usada por:
Webhooks de integração com o Splunk
Webhooks de integração com Datadog
Webhooks de integração com a New Relic
ServiceNow webhooks de integração
Webhooks de integração com o Slack
Webhooks de integração com Grafana
Entendendo a autenticação HMAC
O HMAC (Código de Autenticação de Hash-based Mensagens) é 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 timestamp e a carga da solicitação usando sua chave secreta com o algoritmo. SHA-256 AWS DevOps O agente calcula de forma independente o mesmo hash em seu lado 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 fornece proteção de repetição — o AWS DevOps agente pode rejeitar solicitações com carimbos de data/hora muito antigos, impedindo que um invasor capture e reenvie uma solicitação válida.
Escolhendo entre HMAC e 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 carimbo de data/hora e a carga | Mais simples — inclua um token estático no cabeçalho Authorization |
| Integridade da carga | 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 timestamp na assinatura permite que o servidor rejeite solicitações obsoletas | Não incorporado — um token capturado pode ser reutilizado até ser rotacionado |
| 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 via HTTPS |
Configurando o acesso ao webhook
Etapa 1: Navegue até a configuração do webhook
Faça login no console AWS de gerenciamento e navegue até o console do AWS DevOps agente
Selecione seu espaço de agente
Vá para a guia Capacidades
Na seção Webhook, clique em 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:
Clique em Gerar webhook
O sistema gerará um par de chaves HMAC
Armazene com segurança a chave e o segredo gerados — você não poderá recuperá-los novamente
Copie o URL do endpoint do webhook fornecido
Etapa 3: configurar seu sistema externo
Use o URL e as credenciais do endpoint do webhook para configurar seu sistema externo para enviar solicitações ao Agente. AWS DevOps As etapas específicas de configuração dependem do seu sistema externo.
Gerenciando credenciais de webhook
Removendo credenciais — Para excluir as credenciais do webhook, acesse a seção de configuração do webhook e clique em Remover. Depois de remover as credenciais, o endpoint do webhook não aceitará mais solicitações até que você gere novas credenciais.
Regeneração de credenciais — Para gerar novas credenciais, primeiro remova as existentes e, em seguida, gere um novo token ou par de chaves.
Usando o webhook
Formato de solicitação de webhook
Para acionar 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/jsonx-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 de token do portador):
Cabeçalhos:
Content-Type: application/jsonAuthorization: Bearer <your-token>
Corpo da solicitação:
O corpo da solicitação deve incluir informações sobre o incidente:
json { "title": "Incident title", "severity": "high", "affectedResources": ["resource-id-1", "resource-id-2"], "timestamp": "2025-11-23T18:00:00Z", "description": "Detailed incident description", "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 do token do 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 do token do 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 com 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 o sistema verificar e processar. Se você não obtiver um 200, mas um 4xx, provavelmente há algo errado com a autenticação ou os cabeçalhos. Tente enviar manualmente usando as opções de curl para ajudar a depurar a autenticação.
Se você receber um 200, mas a investigação não começar
A causa provável é uma carga com formato incorreto.
Verifique se o timestamp e o ID do incidente estão atualizados e exclusivos. As mensagens duplicadas são desduplicadas.
Verifique se a mensagem é um JSON válido
Verifique se o formato está correto
Se você receber um 200 e a investigação for imediatamente cancelada
Provavelmente você atingiu o limite do mês. Fale com seu AWS contato para solicitar uma alteração do limite de tarifa, se apropriado.