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 los sistemas de venta de entradas, las herramientas de supervisión y otras plataformas que pueden enviar solicitudes HTTP cuando se producen incidentes.
Requisitos previos
Antes de configurar el acceso a los webhooks, asegúrese 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 webhooks
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. En la consola del AWS DevOps agente, se crea un webhook genérico como un webhook de Agent Space (limitado a un espacio de agente). Cuando creas un webhook genérico, eliges su método de autenticación: HMAC o clave API (token portador).
Webhooks de alerta de Grafana: Grafana puede enviar notificaciones de alerta directamente al agente a través de los puntos de contacto de los AWS DevOps webhooks. Para obtener instrucciones de configuración, incluida una plantilla de notificación personalizada, consulte Conectar Grafana. Conectando 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 (seleccione HMAC al crearlos)
Webhooks del servidor MCP (seleccione HMAC al crearlos)
Autenticación con el token del 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
Webhooks genéricos (seleccione la clave de API al crearlos)
Webhooks del servidor MCP (seleccione la clave de API al crearlos)
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 la autenticación HMAC, generas una firma al combinar la marca de tiempo y la carga útil de la solicitud utilizando tu clave secreta y el algoritmo. SHA-256 AWS DevOps El agente calcula de forma independiente el mismo hash y compara las dos firmas. Si coinciden, se acepta la solicitud.
Como la marca de tiempo está incluida en la firma, HMAC también protege la reproducción: el AWS DevOps agente puede rechazar solicitudes con marcas de tiempo demasiado antiguas, lo que evita que un atacante capture y vuelva a enviar 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: tu 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 | Verificada: 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 gire |
| Riesgo de exposición secreto | Menor: el secreto nunca se transmite en la solicitud; solo se envía la firma calculada | Más alto: el token se envía en cada encabezado de solicitud, lo que aumenta la exposición si se intercepta el tráfico |
| Cuándo se debe usar | Se recomienda cuando necesitas 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 el transporte de la red es confiable, como en el caso de las integraciones de SaaS gestionadas a través de HTTPS |
Configurar el acceso a los webhooks
Paso 1: Navega hasta la configuración del webhook
Inicie sesión en la consola AWS de administración y navegue hasta la consola del AWS DevOps agente
Seleccione su espacio de agente
Vaya a la pestaña Capacidades
En la sección Webhook, elige Configurar
Paso 2: Generar las credenciales de webhook
Para webhooks específicos de 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:
Elige Generar webhook
Para el tipo de autenticación de Webhook, elige la clave HMAC o API:
HMAC: el sistema genera un secreto de firma de webhooks. Su cliente firma cada solicitud y envía la firma en el
x-amzn-event-signatureencabezado (consulte la versión 1 a continuación).Clave de API: el sistema genera una clave de API (token de portador). Su cliente la envía en el
Authorization: Bearer <token>encabezado (consulte la versión 2 a continuación).
Almacene de forma segura el secreto o la clave de API generados. No podrás volver a recuperarla.
Copia la URL del punto final del webhook proporcionada
Paso 3: Configure su sistema externo
Utilice la URL y las credenciales del punto final del webhook para configurar su sistema externo de modo que envíe solicitudes al AWS DevOps agente. Los pasos de configuración específicos dependen del sistema externo.
Administrar las credenciales de los webhooks
Las credenciales de los webhooks son confidenciales. AWS DevOps El agente muestra el secreto del webhook una vez, al crear el webhook. No vuelve a devolver el secreto a través de la consola, la API o la infraestructura en forma de código. La URL del webhook permanece disponible. Si pierdes el secreto o creas el webhook sin registrarlo, gira el webhook para generar un nuevo secreto.
Rotación de las credenciales del webhook
Puedes rotar las credenciales de cualquier webhook desde la pestaña Capacidades. La rotación mantiene la misma URL del webhook y genera un nuevo secreto. La rotación invalida el secreto anterior, por lo que el remitente se detiene hasta que lo actualices con el nuevo secreto. Cambia un webhook cuando pierdas el secreto o cuando quieras reemplazar un secreto que podría estar comprometido.
Para rotar un webhook:
Inicie sesión en la consola AWS de administración y abra la consola del AWS DevOps agente.
Seleccione su espacio de agente.
Ve a la pestaña Capacidades y busca el webhook:
Para un webhook de integración, usa la tabla de webhooks de Capability. Busca la integración por su identificador, por ejemplo, la URL de la ServiceNow instancia o el punto final de Grafana.
Para un webhook genérico, usa la sección de webhooks de Agent Space.
Abre el editor de webhooks. Para un webhook de integración, selecciona Editar. Para un webhook genérico, selecciona Acciones y, a continuación , Editar.
Selecciona Rotar el webhook. La consola genera un nuevo secreto y conserva la misma URL del webhook.
Selecciona Descargar el archivo.csv para guardar la URL y el secreto y, a continuación, confirma que los has guardado. No puedes recuperar el secreto después de salir de esta página.
Actualiza al remitente con el nuevo secreto. Para una integración, amplía las instrucciones de configuración del servicio para ver los pasos específicos del servicio o consulta la guía de conexión de tu integración.
Para copiar la URL del webhook sin rotar el secreto, selecciona Copiar URL.
Webhooks creados con la infraestructura como código
Cuando creas un webhook con AWS CloudFormation el AWS CDK o Terraform, la pila no devuelve el secreto del webhook como resultado, porque es un valor sensible. Una vez completada la implementación, obtén el secreto rotando el webhook, tal y como se describe en la sección anterior. A continuación, configura tu servicio de terceros con la URL del webhook y el nuevo secreto.
Eliminar las credenciales del webhook
Para eliminar un webhook genérico, abre la sección Webhook de Agent Space, selecciona Acciones y, a continuación, selecciona Eliminar. Tras eliminar el webhook, el punto final dejará de aceptar solicitudes hasta que crees un webhook nuevo.
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/jsonx-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 utilizando. SHA-256
Para la versión 2 (autenticación con el token del portador):
Encabezados:
Content-Type: application/jsonAuthorization: Bearer <your-token>
Cuerpo de la solicitud:
El organismo solicitante debe incluir información sobre el 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 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 el token del 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 con el token del 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 de un webhook indican que la autenticación ha pasado y que el mensaje está en cola para que el sistema lo verifique y procese. Si no recibes un 200 sino un 4xx, lo más probable es que haya algún problema con la autenticación o los encabezados. Intenta enviarlos manualmente usando las opciones de curl para ayudar a depurar la autenticación.
Si recibes un 200 pero no se inicia la investigación
La causa más probable es que la carga esté mal formateada.
Comprueba que tanto la marca de tiempo como la identificación del incidente estén actualizadas y sean únicas. Los mensajes duplicados se deduplican.
Comprueba que el mensaje sea un JSON válido
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. Si procede, AWS comunícate con tu contacto para solicitar un cambio en el límite de tarifa.