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.
Invoquer un DevOps agent via Webhook
Les Webhooks permettent à des systèmes externes de déclencher automatiquement des enquêtes sur les AWS DevOps agents. Cela permet l'intégration avec des systèmes de billetterie, des outils de surveillance et d'autres plateformes capables d'envoyer des requêtes HTTP en cas d'incident.
Conditions préalables
Avant de configurer l'accès au webhook, assurez-vous de disposer des éléments suivants :
Un espace d'agent configuré dans AWS DevOps 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. Dans la console AWS DevOps Agent, un webhook générique est créé en tant que webhook Agent Space (limité à un espace agent). Lorsque vous créez un webhook générique, vous choisissez sa méthode d'authentification : HMAC ou clé API (jeton porteur).
Webhooks d'alerte Grafana — Grafana peut envoyer des notifications d'alerte directement à l' AWS DevOps agent via les points de contact Webhook. 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 (sélectionnez HMAC lors de la création)
Webhooks du serveur MCP (sélectionnez HMAC lors de la création)
Authentification par jeton du porteur — Utilisée par :
Webhooks d'intégration Splunk
Webhooks d'intégration à Datadog
Webhooks d'intégration de New Relic
ServiceNow webhooks d'intégration
Webhooks d'intégration avec Slack
Webhooks d'intégration de Grafana
Webhooks génériques (sélectionnez la clé API lors de la création)
Webhooks du serveur MCP (sélectionnez la clé API lors de la création)
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 l'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 avec 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.
Comme l'horodatage est inclus dans la signature, le HMAC fournit également une protection contre les rediffusions : AWS DevOps l'agent peut rejeter les demandes dont l'horodatage est trop ancien, 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 la 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 de 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 fasse l'objet d'une rotation |
| Risque d'exposition secrète | 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 si le trafic est intercepté |
| 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 | Idéal lorsque la facilité d'intégration est une priorité et que votre transport 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 de AWS gestion et accédez à la console de l' AWS DevOps agent
Sélectionnez votre espace d'agent
Accédez à l'onglet Capacités
Dans la section Webhook, choisissez Configurer
Étape 2 : générer des informations d'identification pour le 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 du point de terminaison du webhook et les informations d'identification sont fournies à la fin du processus de configuration de l'intégration.
Pour les webhooks génériques :
Choisissez Générer un webhook
Pour le type d'authentification Webhook, choisissez HMAC ou clé API :
HMAC — Le système génère un secret de signature du webhook. Votre client signe chaque demande et envoie la signature dans l'
x-amzn-event-signatureen-tête (voir la version 1 ci-dessous).Clé API — Le système génère une clé API (jeton porteur). Votre client l'envoie dans l'
Authorization: Bearer <token>en-tête (voir la version 2 ci-dessous).
Stockez en toute sécurité la clé secrète ou API générée. Vous ne pourrez plus le 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
Les informations d'identification du Webhook sont sensibles. AWS DevOps L'agent affiche le secret du webhook une seule fois, lorsque vous créez le webhook. Il ne renvoie pas à nouveau le secret via la console, l'API ou l'infrastructure sous forme de code. L'URL du webhook reste disponible. Si vous perdez le secret ou si vous créez le webhook sans l'enregistrer, faites pivoter le webhook pour générer un nouveau secret.
Rotation des informations d'identification du webhook
Vous pouvez alterner les informations d'identification de n'importe quel webhook à partir de l'onglet Fonctionnalités. La rotation conserve la même URL de webhook et génère un nouveau secret. La rotation invalide le secret précédent, de sorte que l'expéditeur s'arrête jusqu'à ce que vous le mettiez à jour avec le nouveau secret. Faites pivoter un webhook lorsque vous perdez le secret ou lorsque vous souhaitez remplacer un secret qui pourrait être compromis.
Pour faire pivoter un webhook :
Connectez-vous à la console de AWS gestion et ouvrez la console de l' AWS DevOps agent.
Sélectionnez votre espace d'agent.
Accédez à l'onglet Fonctionnalités, puis recherchez le webhook :
Pour un webhook d'intégration, utilisez le tableau Capability Webhooks. Recherchez l'intégration à l'aide de son identifiant, par exemple l'URL de votre ServiceNow instance ou votre point de terminaison Grafana.
Pour un webhook générique, utilisez la section Webhook Agent Space.
Ouvrez l'éditeur de webhook. Pour un webhook d'intégration, choisissez Modifier. Pour un webhook générique, choisissez Actions, puis Modifier.
Choisissez Rotate webhook. La console génère un nouveau secret et conserve la même URL de webhook.
Choisissez Télécharger le fichier .csv pour enregistrer l'URL et le code secret, puis confirmez que vous les avez enregistrés. Vous ne pouvez pas récupérer le secret une fois que vous avez quitté cette page.
Mettez à jour l'expéditeur avec le nouveau secret. Pour une intégration, développez les instructions de configuration du service pour connaître les étapes spécifiques à chaque service, ou consultez le guide de connexion correspondant à votre intégration.
Pour copier l'URL du webhook sans modifier le secret, choisissez Copier l'URL.
Webhooks créés avec l'infrastructure en tant que code
Lorsque vous créez un webhook avec AWS CloudFormation le AWS CDK ou Terraform, la pile ne renvoie pas le secret du webhook en sortie, car il s'agit d'une valeur sensible. Une fois le déploiement terminé, obtenez le secret en faisant pivoter le webhook, comme décrit dans la section précédente. Configurez ensuite votre service tiers avec l'URL du webhook et le nouveau secret.
Supprimer les informations d'identification du webhook
Pour supprimer un webhook générique, ouvrez la section Webhook Agent Space, choisissez Actions, puis choisissez Supprimer. Une fois que vous avez supprimé le webhook, le point de terminaison n'accepte plus les demandes tant que vous n'avez pas créé un nouveau webhook.
Utilisation du webhook
Format de demande 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 requête avec votre clé secrète à l'aide SHA-256 de.
Pour la version 2 (authentification par jeton du porteur) :
En-têtes :
Content-Type: application/jsonAuthorization: Bearer <your-token>
Organisme de la demande :
L'organisme demandeur doit inclure des informations sur l'incident :
{ "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" } } }
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 au 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 au 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 un 200
Un 200 et un message tel que webhook received indiquent que l'authentification a été réussie et que le message a été mis en file d'attente pour que le système puisse le vérifier et le traiter. 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éboguer l'authentification.
Si vous recevez un 200 mais qu'aucune enquête ne démarre
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 un JSON valide
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 interlocuteur pour demander une modification de la limite tarifaire, le cas échéant.