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 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

  1. Faça login no console AWS de gerenciamento e navegue até o console do AWS DevOps agente

  2. Selecione seu espaço de agente

  3. Vá para a guia Capacidades

  4. 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:

  1. Clique em Gerar webhook

  2. O sistema gerará um par de chaves HMAC

  3. Armazene com segurança a chave e o segredo gerados — você não poderá recuperá-los novamente

  4. 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/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 de token do 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:

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.

  1. Verifique se o timestamp e o ID do incidente estão atualizados e exclusivos. As mensagens duplicadas são desduplicadas.

  2. Verifique se a mensagem é um JSON válido

  3. 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.