Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Invocation de DevOps l'agent via Webhook
Les webhooks permettent aux systèmes externes de déclencher automatiquement les investigations des AWS DevOps agents. Cela permet l'intégration aux systèmes de billetterie, aux outils de surveillance et à d'autres plateformes qui peuvent envoyer des requêtes HTTP en cas d'incident.
Conditions préalables
Avant de configurer l'accès au webhook, assurez-vous d'avoir :
Un espace d'agent configuré dans AWS DevOps l'agent
Accès à la console de AWS DevOps l'agent
Le système externe qui enverra les demandes de webhook
Types de webhooks
AWS DevOps L'agent prend en charge les types de webhooks suivants :
Integration-specific webhooks : générés automatiquement lorsque vous configurez des intégrations tierces telles que Dynatrace, Splunk, Datadog, New Relic ou Slack. ServiceNow Ces webhooks sont associés à l'intégration spécifique et utilisent des méthodes d'authentification déterminées par le type d'intégration.
Webhooks génériques : ils peuvent être créés manuellement pour déclencher des enquêtes à partir de n'importe quelle source non couverte par une intégration spécifique. Les webhooks génériques utilisent actuellement l'authentification HMAC (le jeton porteur n'est pas disponible actuellement).
Webhooks d'alerte Grafana — Grafana peut envoyer des notifications d'alerte directement à l' AWS DevOps agent via les points de contact des webhooks. Pour les instructions de configuration, y compris un modèle de notification personnalisé, voir Connecting Grafana.
Méthodes d'authentification Webhook
La méthode d'authentification de votre webhook dépend de l'intégration à laquelle il est associé :
Authentification HMAC — Utilisée par :
Webhooks d'intégration de Dynatrace
Webhooks génériques (non liés à une intégration tierce spécifique)
Authentification par jeton au porteur : utilisée par :
Webhooks d'intégration Splunk
Webhooks d'intégration à Datadog
Webhooks d'intégration New Relic
ServiceNow webhooks d'intégration
Webhooks d'intégration à Slack
Webhooks d'intégration Grafana
Comprendre l'authentification HMAC
Le HMAC (Hash-based Message Authentication Code) est un mécanisme cryptographique qui vérifie à la fois l'intégrité et l'authenticité d'une demande de webhook. Lorsque vous envoyez un webhook avec authentification HMAC, vous générez une signature en hachant l'horodatage et la charge utile de la demande à l'aide de votre clé secrète et de l'algorithme. SHA-256 AWS DevOps L'agent calcule indépendamment le même hachage de son côté et compare les deux signatures. S'ils correspondent, la demande est acceptée.
L'horodatage étant inclus dans la signature, HMAC fournit également une protection contre les rediffusions. AWS DevOps L'agent peut rejeter les demandes dont l'horodatage remonte trop loin dans le passé, empêchant ainsi un attaquant de capturer et de renvoyer une demande valide.
Choisir entre le jeton HMAC et le jeton Bearer
| Considération | HMAC | Jeton au porteur |
|---|---|---|
| Complexité de configuration | Plus complexe : votre client doit calculer une signature pour chaque demande à l'aide de l'horodatage et de la charge utile | Plus simple : incluez un jeton statique dans l'Authorizationen-tête |
| Intégrité de la charge utile | Vérifié : toute modification de la charge utile après signature invalide la signature | Non vérifié : le jeton authentifie l'expéditeur mais ne protège pas le contenu de la charge utile |
| Protection contre les rediffusions | Built-in — l'horodatage dans la signature permet au serveur de rejeter les demandes périmées | Non intégré : un jeton capturé peut être réutilisé jusqu'à ce qu'il soit pivoté |
| Risque d'exposition secret | Inférieur : le secret n'est jamais transmis dans la demande ; seule la signature calculée est envoyée | Plus élevé : le jeton est envoyé dans chaque en-tête de demande, ce qui augmente l'exposition en cas d'interception du trafic |
| Quand l’utiliser | Recommandé lorsque vous avez besoin de garanties de sécurité renforcées, par exemple pour les webhooks génériques ou les environnements soumis à des exigences de conformité strictes | Convient lorsque la facilité d'intégration est une priorité et que le transport de votre réseau est fiable, par exemple pour les intégrations SaaS gérées via HTTPS |
Configuration de l'accès au webhook
Étape 1 : Accédez à la configuration du webhook
Connectez-vous à la console AWS de gestion et accédez à la console de l' AWS DevOps agent
Sélectionnez votre espace d'agent
Accédez à l'onglet Fonctionnalités
Dans la section Webhook, cliquez sur Configurer
Étape 2 : générer les informations d'identification du webhook
Pour les webhooks spécifiques à l'intégration :
Les webhooks sont automatiquement générés lorsque vous terminez la configuration d'une intégration tierce. L'URL et les informations d'identification du point de terminaison du webhook sont fournies à la fin du processus de configuration de l'intégration.
Pour les webhooks génériques :
Cliquez sur Générer un webhook
Le système générera une paire de clés HMAC
Stockez en toute sécurité la clé et le secret générés, vous ne pourrez plus les récupérer
Copiez l'URL du point de terminaison du webhook fournie
Étape 3 : Configuration de votre système externe
Utilisez l'URL et les informations d'identification du point de terminaison du webhook pour configurer votre système externe afin d'envoyer des demandes à l' AWS DevOps agent. Les étapes de configuration spécifiques dépendent de votre système externe.
Gestion des informations d'identification du webhook
Suppression des informations d'identification : pour supprimer les informations d'identification du webhook, accédez à la section de configuration du webhook et cliquez sur Supprimer. Après avoir supprimé les informations d'identification, le point de terminaison du webhook n'acceptera plus les demandes tant que vous n'aurez pas généré de nouvelles informations d'identification.
Régénération des informations d'identification : pour générer de nouvelles informations d'identification, supprimez d'abord les informations d'identification existantes, puis générez une nouvelle paire de clés ou un nouveau jeton.
Utilisation du webhook
Format de demande de webhook
Pour déclencher une enquête, votre système externe doit envoyer une requête HTTP POST à l'URL du point de terminaison du webhook.
Pour la version 1 (authentification HMAC) :
En-têtes :
Content-Type: application/jsonx-amzn-event-signature: <HMAC signature>x-amzn-event-timestamp: <+%Y-%m-%dT%H:%M:%S.000Z>
La signature HMAC est générée en signant le corps de la demande avec votre clé secrète à l'aide SHA-256 de.
Pour la version 2 (authentification par jeton porteur) :
En-têtes :
Content-Type: application/jsonAuthorization: Bearer <your-token>
Corps de la demande :
Le corps de la demande doit inclure des informations sur l'incident :
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" } } }
Schéma de charge utile :
{ 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; }
Exemple de code
Version 1 (authentification 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); });
Version 1 (authentification 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"
Version 2 (authentification par jeton porteur) - : 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), }); }
Version 2 (authentification par jeton porteur) - 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"
Résolution des problèmes liés aux webhooks
Si vous ne recevez pas de 200
Un 200 et un message tel que webhook reçus indiquent que l'authentification a été réussie et que le message a été mis en file d'attente pour que le système le vérifie et le traite. Si vous n'obtenez pas un 200 mais un 4xx, il y a probablement un problème avec l'authentification ou les en-têtes. Essayez d'envoyer manuellement à l'aide des options curl pour aider à débuguer l'authentification.
Si vous recevez un 200 mais qu'une enquête ne démarre pas
La cause probable est une charge utile mal formatée.
Vérifiez que l'horodatage et l'identifiant de l'incident sont à jour et uniques. Les messages dupliqués sont dédupliqués.
Vérifiez que le message est valide au format JSON
Vérifiez que le format est correct
Si vous recevez un 200$ et que l'enquête est immédiatement annulée
Vous avez probablement atteint la limite du mois. Adressez-vous à votre AWS contact pour demander une modification de la limite de taux, le cas échéant.