Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Richiamo DevOps dell'agente tramite Webhook
I webhook consentono ai sistemi esterni di avviare automaticamente le indagini degli agenti. AWS DevOps Ciò consente l'integrazione con sistemi di ticketing, strumenti di monitoraggio e altre piattaforme in grado di inviare richieste HTTP in caso di incidenti.
Prerequisiti
Prima di configurare l'accesso ai webhook, assicurati di avere:
Un Agent Space configurato in Agent AWS DevOps
Accesso alla console dell' AWS DevOps agente
Il sistema esterno che invierà le richieste di webhook
Tipi di webhook
AWS DevOps Agent supporta i seguenti tipi di webhook:
Integration-specific webhook: generati automaticamente quando configuri integrazioni di terze parti come Dynatrace, Splunk, Datadog, New Relic o Slack. ServiceNow Questi webhook sono associati all'integrazione specifica e utilizzano metodi di autenticazione determinati dal tipo di integrazione
Webhook generici: possono essere creati manualmente per avviare indagini da qualsiasi fonte non coperta da un'integrazione specifica. I webhook generici attualmente utilizzano l'autenticazione HMAC (il token bearer non è attualmente disponibile).
Webhook di avviso Grafana: Grafana può inviare notifiche di avviso direttamente AWS DevOps all'agente tramite i punti di contatto webhook. Per istruzioni di configurazione che includono un modello di notifica personalizzato, vedi Connecting Grafana.
Metodi di autenticazione Webhook
Il metodo di autenticazione per il webhook dipende dall'integrazione a cui è associato:
Autenticazione HMAC: utilizzata da:
Webhook di integrazione con Dynatrace
Webhook generici (non collegati a una specifica integrazione di terze parti)
Autenticazione con token Bearer: utilizzata da:
Webhook di integrazione Splunk
Webhook di integrazione Datadog
Nuovi webhook di integrazione con Relic
ServiceNow webhook di integrazione
webhook di integrazione con Slack
Webhook di integrazione Grafana
Comprendere l'autenticazione HMAC
HMAC (Hash-based Message Authentication Code) è un meccanismo crittografico che verifica l'integrità e l'autenticità di una richiesta webhook. Quando si invia un webhook con autenticazione HMAC, si genera una firma eseguendo l'hashing del timestamp e del payload della richiesta utilizzando la chiave segreta con l'algoritmo. SHA-256 AWS DevOps L'agente calcola in modo indipendente lo stesso hash su un lato e confronta le due firme. Se corrispondono, la richiesta viene accettata.
Poiché il timestamp è incluso nella firma, HMAC fornisce anche una protezione dalla riproduzione: l' AWS DevOps agente può rifiutare le richieste con timestamp che risalgono troppo al passato, impedendo a un utente malintenzionato di acquisire e inviare nuovamente una richiesta valida.
Scelta tra HMAC e token Bearer
| Considerazione | HMAC | Token Bearer |
|---|---|---|
| Complessità di configurazione | Più complesso: il cliente deve calcolare una firma per ogni richiesta utilizzando il timestamp e il payload | Più semplice: includi un token statico nell'intestazione Authorization |
| Integrità del carico utile | Verificato: qualsiasi modifica al payload dopo la firma invalida la firma | Non verificato: il token autentica il mittente ma non protegge il contenuto del payload |
| Protezione da replay | Built-in — il timestamp nella firma consente al server di rifiutare le richieste obsolete | Non integrato: un token acquisito può essere riutilizzato finché non viene ruotato |
| Rischio di esposizione segreto | Inferiore: il segreto non viene mai trasmesso nella richiesta; viene inviata solo la firma computerizzata | Più alto: il token viene inviato in ogni intestazione di richiesta, aumentando l'esposizione se il traffico viene intercettato |
| Quando utilizzare | Consigliato quando sono necessarie garanzie di sicurezza più solide, ad esempio per webhook generici o ambienti con requisiti di conformità rigorosi | Ideale quando la facilità di integrazione è una priorità e il trasporto di rete è affidabile, ad esempio per le integrazioni SaaS gestite tramite HTTPS |
Configurazione dell'accesso al webhook
Fase 1: Accedere alla configurazione del webhook
Accedi alla console di AWS gestione e vai alla console dell' AWS DevOps agente
Seleziona il tuo Agent Space
Vai alla scheda Funzionalità
Nella sezione Webhook, fai clic su Configura
Fase 2: Generazione delle credenziali del webhook
Per webhook specifici per l'integrazione:
I webhook vengono generati automaticamente quando si completa la configurazione di un'integrazione di terze parti. L'URL e le credenziali dell'endpoint webhook vengono forniti al termine del processo di configurazione dell'integrazione.
Per i webhook generici:
Fai clic su Genera webhook
Il sistema genererà una coppia di key pair HMAC
Archivia in modo sicuro la chiave e il segreto generati: non potrai più recuperarli
Copia l'URL dell'endpoint del webhook fornito
Fase 3: Configurazione del sistema esterno
Utilizza l'URL e le credenziali dell'endpoint webhook per configurare il tuo sistema esterno per l'invio di richieste all'agente. AWS DevOps I passaggi di configurazione specifici dipendono dal sistema esterno.
Gestione delle credenziali del webhook
Rimozione delle credenziali: per eliminare le credenziali del webhook, vai alla sezione di configurazione del webhook e fai clic su Rimuovi. Dopo aver rimosso le credenziali, l'endpoint webhook non accetterà più richieste finché non ne genererai di nuove.
Rigenerazione delle credenziali: per generare nuove credenziali, rimuovi prima le credenziali esistenti, quindi genera una nuova coppia di chiavi o token.
Utilizzo del webhook
Formato di richiesta Webhook
Per avviare un'indagine, il sistema esterno deve inviare una richiesta POST HTTP all'URL dell'endpoint del webhook.
Per la versione 1 (autenticazione HMAC):
Intestazioni:
Content-Type: application/jsonx-amzn-event-signature: <HMAC signature>x-amzn-event-timestamp: <+%Y-%m-%dT%H:%M:%S.000Z>
La firma HMAC viene generata firmando il corpo della richiesta con la chiave segreta utilizzando. SHA-256
Per la versione 2 (autenticazione con token Bearer):
Intestazioni:
Content-Type: application/jsonAuthorization: Bearer <your-token>
Corpo della richiesta:
Il corpo della richiesta deve includere informazioni sull'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" } } }
Schema del payload:
{ 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; }
Codice di esempio
Versione 1 (autenticazione 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); });
Versione 1 (autenticazione 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"
Versione 2 (autenticazione con token Bearer) -: 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), }); }
Versione 2 (autenticazione con token Bearer) - 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"
Risoluzione dei problemi relativi ai webhook
Se non ricevi un 200
Un 200 e un messaggio simile a un webhook ricevuto indicano che l'autenticazione è stata superata e il messaggio è stato messo in coda per essere verificato ed elaborato dal sistema. Se non ottieni un 200 ma un 4xx, molto probabilmente c'è qualcosa che non va nell'autenticazione o nelle intestazioni. Prova a inviare manualmente utilizzando le opzioni curl per aiutare a eseguire il debug dell'autenticazione.
Se ricevi un 200 ma non viene avviata un'indagine
La causa probabile è un payload non formattato.
Verifica che sia il timestamp che l'ID dell'incidente siano aggiornati e unici. I messaggi duplicati vengono deduplicati.
Verifica che il messaggio sia JSON valido
Verifica che il formato sia corretto
Se ricevi 200 dollari e l'indagine viene immediatamente annullata
Molto probabilmente hai raggiunto il limite mensile. Rivolgiti al tuo AWS contatto per chiedere una modifica del limite di tariffa, se del caso.