View a markdown version of this page

Invocar al DevOps agente a través de Webhook - AWS DevOps Agente

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Invocar al DevOps agente a través de Webhook

Los webhooks permiten que los sistemas externos AWS DevOps activen automáticamente las investigaciones de los agentes. Esto permite la integración con sistemas de emisión de tickets, herramientas de monitoreo y otras plataformas que pueden enviar solicitudes HTTP cuando se producen incidentes.

Requisitos previos

Antes de configurar el acceso a los webhooks, asegúrate de tener:

  • Un espacio de agente configurado en AWS DevOps Agent

  • Acceso a la consola del AWS DevOps agente

  • El sistema externo que enviará las solicitudes de webhook

Tipos de webhook

AWS DevOps El agente admite los siguientes tipos de webhooks:

  • Integration-specific webhooks: se generan automáticamente al configurar integraciones de terceros, como Dynatrace, Splunk, Datadog, New Relic o Slack. ServiceNow Estos webhooks están asociados a la integración específica y utilizan métodos de autenticación determinados por el tipo de integración

  • Webhooks genéricos: se pueden crear manualmente para iniciar investigaciones desde cualquier fuente que no esté incluida en una integración específica. Los webhooks genéricos utilizan actualmente la autenticación HMAC (el token portador no está disponible actualmente).

  • Webhooks de alertas de Grafana: Grafana puede enviar notificaciones de alerta directamente al AWS DevOps agente a través de los puntos de contacto de webhook. Para obtener instrucciones de configuración que incluyen una plantilla de notificación personalizada, consulte Conectar Grafana.

Métodos de autenticación de Webhook

El método de autenticación de tu webhook depende de la integración a la que esté asociado:

Autenticación HMAC: utilizada por:

  • Webhooks de integración con Dynatrace

  • Webhooks genéricos (no vinculados a una integración específica de terceros)

Autenticación mediante token de portador: utilizada por:

  • Webhooks de integración con Splunk

  • Webhooks de integración de Datadog

  • Webhooks de integración de New Relic

  • ServiceNow webhooks de integración

  • Webhooks de integración de Slack

  • Webhooks de integración de Grafana

Comprensión de la autenticación HMAC

El HMAC (código de autenticación de Hash-based mensajes) es un mecanismo criptográfico que verifica tanto la integridad como la autenticidad de una solicitud de webhook. Cuando envías un webhook con autenticación HMAC, generas una firma mezclando la marca temporal y la carga útil de la solicitud utilizando tu clave secreta con el algoritmo. SHA-256 AWS DevOps El agente calcula de forma independiente el mismo hash por su lado y compara las dos firmas. Si coinciden, se acepta la solicitud.

Como la marca de tiempo está incluida en la firma, el HMAC también ofrece protección contra la reproducción: el AWS DevOps agente puede rechazar las solicitudes con marcas de tiempo demasiado antiguas, lo que impide que un atacante capture y reenvíe una solicitud válida.

Elegir entre el HMAC y el token Bearer

Consideración HMAC Token de portador
Complejidad de la configuración Más complejo: su cliente debe calcular una firma para cada solicitud utilizando la marca de tiempo y la carga útil Más sencillo: incluye un token estático en el encabezado Authorization
Integridad de la carga útil Verificado: cualquier modificación de la carga útil después de la firma invalida la firma No verificado: el token autentica al remitente pero no protege el contenido de la carga
Protección de reproducción Built-in — la marca de tiempo de la firma permite al servidor rechazar solicitudes obsoletas No está integrado: un token capturado se puede reutilizar hasta que se rote
Riesgo de exposición secreta Inferior: el secreto nunca se transmite en la solicitud; solo se envía la firma computada Más alto: el token se envía en el encabezado de cada solicitud, lo que aumenta la exposición si se intercepta el tráfico
Cuándo se debe usar Se recomienda cuando se necesitan garantías de seguridad más sólidas, como en el caso de webhooks genéricos o entornos con requisitos de cumplimiento estrictos Adecuado cuando la facilidad de integración es una prioridad y se confía en el transporte de su red, como en el caso de las integraciones SaaS gestionadas a través de HTTPS

Configurar el acceso al webhook

Paso 1: Navegue hasta la configuración del webhook

  1. Inicie sesión en la consola AWS de administración y navegue hasta la consola del AWS DevOps agente

  2. Seleccione su espacio de agente

  3. Ve a la pestaña Capacidades

  4. En la sección Webhook, haga clic en Configurar

Paso 2: Generar las credenciales del webhook

Para webhooks específicos de la integración:

Los webhooks se generan automáticamente al completar la configuración de una integración de terceros. La URL y las credenciales del punto final del webhook se proporcionan al final del proceso de configuración de la integración.

Para webhooks genéricos:

  1. Haz clic en Generar webhook

  2. El sistema generará un key pair HMAC

  3. Guarde de forma segura la clave y el secreto generados; no podrá volver a recuperarlos

  4. Copia la URL del punto final del webhook proporcionada

Paso 3: Configura tu sistema externo

Utilice la URL y las credenciales del punto de conexión del webhook para configurar su sistema externo y enviar solicitudes al AWS DevOps agente. Los pasos de configuración específicos dependen del sistema externo.

Administrar las credenciales de webhook

Eliminar credenciales: para eliminar las credenciales del webhook, vaya a la sección de configuración del webhook y haga clic en Eliminar. Tras eliminar las credenciales, el punto final del webhook ya no aceptará solicitudes hasta que generes nuevas credenciales.

Regeneración de credenciales: para generar nuevas credenciales, elimine primero las credenciales existentes y, a continuación, genere un nuevo key pair o token.

Uso del webhook

Formato de solicitud de webhook

Para iniciar una investigación, tu sistema externo debe enviar una solicitud HTTP POST a la URL del punto final del webhook.

Para la versión 1 (autenticación HMAC):

Encabezados:

  • Content-Type: application/json

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

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

La firma HMAC se genera al firmar el cuerpo de la solicitud con su clave secreta mediante. SHA-256

Para la versión 2 (autenticación con token de portador):

Encabezados:

  • Content-Type: application/json

  • Authorization: Bearer <your-token>

Cuerpo de la solicitud:

El organismo solicitante debe incluir información sobre el 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 ejemplo

Versión 1 (autenticación 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); });

Versión 1 (autenticación 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"

Versión 2 (autenticación con 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), }); }

Versión 2 (autenticación 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"

Solución de problemas de webhooks

Si no recibes un 200

Un 200 y un mensaje como el webhook recibido indican que la autenticación se ha aprobado y que el mensaje se ha puesto en cola para que el sistema lo verifique y procese. Si no obtienes un 200 sino un 4xx, lo más probable es que haya algún problema con la autenticación o los encabezados. Intenta enviarlo manualmente usando las opciones curl para ayudar a depurar la autenticación.

Si recibes un 200 pero no se inicia una investigación

La causa probable es una carga mal formateada.

  1. Compruebe que tanto la marca de tiempo como el identificador del incidente estén actualizados y sean únicos. Los mensajes duplicados se deduplican.

  2. Comprueba que el mensaje sea un JSON válido

  3. Comprueba que el formato es correcto

Si recibes un 200$ y la investigación se cancela inmediatamente

Lo más probable es que hayas alcanzado el límite del mes. Hable con su AWS contacto para solicitar un cambio en el límite de la tarifa, si es necesario.