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 attivare 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 al 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 webhook
Tipi di webhook
AWS DevOps L'agente supporta i seguenti tipi di webhook:
Integration-specific webhook: generato automaticamente quando si configurano 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. Nella console dell' AWS DevOps agente, viene creato un webhook generico come webhook di Agent Space (con ambito di un Agent Space). Quando crei un webhook generico, ne scegli il metodo di autenticazione: HMAC o chiave API (token al portatore).
Webhook di avviso Grafana: Grafana può inviare notifiche di avviso direttamente all'agente tramite i punti di contatto webhook. AWS DevOps Per istruzioni di configurazione che includono un modello di notifica personalizzato, vedi Connecting Grafana. Collegare Grafana
Metodi di autenticazione Webhook
Il metodo di autenticazione per il tuo webhook dipende dall'integrazione a cui è associato:
Autenticazione HMAC: utilizzata da:
Webhook di integrazione Dynatrace
Webhook generici (seleziona HMAC al momento della creazione)
Webhook per server MCP (seleziona HMAC al momento della creazione)
Autenticazione con token al portatore: utilizzata da:
Webhook di integrazione Splunk
Webhook di integrazione con Datadog
Webhook di integrazione New Relic
ServiceNow webhook di integrazione
webhook di integrazione con Slack
Webhook di integrazione con Grafana
Webhook generici (seleziona la chiave API al momento della creazione)
Webhook del server MCP (seleziona la chiave API al momento della creazione)
Comprendere l'autenticazione HMAC
L'HMAC (Hash-based Message Authentication Code) è un meccanismo crittografico che verifica sia l'integrità che l'autenticità di una richiesta webhook. Quando invii un webhook con autenticazione HMAC, generi una firma sommando il timestamp della richiesta e il payload utilizzando la tua 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 troppo lontani nel passato, impedendo a un utente malintenzionato di acquisire e inviare nuovamente una richiesta valida.
Scelta tra HMAC e token Bearer
| Considerazione | HMAC | Token al portatore |
|---|---|---|
| Complessità della 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 payload | 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 dai replay | Built-in — il timestamp nella firma consente al server di rifiutare richieste obsolete | Non integrato: un token acquisito può essere riutilizzato finché non viene ruotato |
| Rischio di esposizione segreta | Inferiore: il segreto non viene mai trasmesso nella richiesta; viene inviata solo la firma computerizzata | Più alto: il token viene inviato nell'intestazione di ogni richiesta, aumentando l'esposizione se il traffico viene intercettato |
| Quando utilizzarlo | Consigliato quando sono necessarie garanzie di sicurezza più solide, ad esempio per webhook generici o ambienti con severi requisiti di conformità | 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
Passaggio 1: accedi alla configurazione del webhook
Accedi alla console di AWS gestione e vai alla console dell' AWS DevOps agente
Seleziona il tuo spazio agente
Vai alla scheda Funzionalità
Nella sezione Webhook, scegli Configura
Passo 2: Genera le credenziali del webhook
Per webhook specifici per l'integrazione:
I webhook vengono generati automaticamente quando completi 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:
Scegli Genera webhook
Per il tipo di autenticazione Webhook, scegli HMAC o chiave API:
HMAC: il sistema genera un segreto di firma del webhook. Il cliente firma ogni richiesta e invia la firma nell'
x-amzn-event-signatureintestazione (vedi la Versione 1 di seguito).Chiave API: il sistema genera una chiave API (token al portatore). Il tuo cliente lo invia nell'
Authorization: Bearer <token>intestazione (vedi la versione 2 di seguito).
Archivia in modo sicuro la chiave segreta o API generata. Non sarai in grado di recuperarlo nuovamente.
Copia l'URL dell'endpoint del webhook fornito
Passaggio 3: configura il tuo sistema esterno
Utilizza l'URL e le credenziali dell'endpoint webhook per configurare il tuo sistema esterno per inviare richieste all'agente. AWS DevOps I passaggi di configurazione specifici dipendono dal tuo sistema esterno.
Gestione delle credenziali webhook
Le credenziali Webhook sono sensibili. AWS DevOps L'agente mostra il segreto del webhook una volta, quando si crea il webhook. Non restituisce nuovamente il segreto tramite la console, l'API o l'infrastruttura come codice. L'URL del webhook rimane disponibile. Se perdi il segreto o crei il webhook senza registrarlo, ruota il webhook per generare un nuovo segreto.
Rotazione delle credenziali del webhook
Puoi ruotare le credenziali di qualsiasi webhook dalla scheda Funzionalità. La rotazione mantiene lo stesso URL del webhook e genera un nuovo segreto. La rotazione invalida il segreto precedente, quindi il mittente si ferma finché non lo aggiorni con il nuovo segreto. Ruota un webhook quando perdi il segreto o quando desideri sostituire un segreto che potrebbe essere compromesso.
Per ruotare un webhook:
Accedere alla console di AWS gestione e aprire la console dell' AWS DevOps agente.
Seleziona il tuo spazio agente.
Vai alla scheda Funzionalità, quindi trova il webhook:
Per un webhook di integrazione, usa la tabella Capability Webhooks. Trova l'integrazione in base al relativo identificatore, ad esempio l'URL dell' ServiceNow istanza o l'endpoint Grafana.
Per un webhook generico, usa la sezione Agent Space Webhook.
Apri l'editor del webhook. Per un webhook di integrazione, scegli Modifica. Per un webhook generico, scegli Azioni, quindi Modifica.
Scegli Ruota webhook. La console genera un nuovo segreto e mantiene lo stesso URL del webhook.
Scegli Scarica il file .csv per salvare l'URL e il segreto, quindi conferma di averli salvati. Non puoi recuperare il segreto dopo aver lasciato questa pagina.
Aggiorna il mittente con il nuovo segreto. Per un'integrazione, espandi le istruzioni di configurazione del servizio per i passaggi specifici del servizio o consulta la guida alla connessione per l'integrazione.
Per copiare l'URL del webhook senza ruotare il segreto, scegli Copia URL.
Webhook creati con l'infrastruttura come codice
Quando si crea un webhook con AWS CloudFormation, AWS CDK o Terraform, lo stack non restituisce il segreto del webhook come output, perché si tratta di un valore sensibile. Al termine della distribuzione, ottieni il segreto ruotando il webhook, come descritto nella sezione precedente. Quindi configura il tuo servizio di terze parti con l'URL del webhook e il nuovo segreto.
Rimozione delle credenziali webhook
Per eliminare un webhook generico, apri la sezione Agent Space Webhook, scegli Azioni, quindi scegli Rimuovi. Dopo aver rimosso il webhook, l'endpoint non accetta più richieste finché non crei un nuovo webhook.
Usare il webhook
Formato di richiesta Webhook
Per avviare un'indagine, il sistema esterno deve inviare una richiesta HTTP POST all'URL dell'endpoint 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 al portatore):
Intestazioni:
Content-Type: application/jsonAuthorization: Bearer <your-token>
Corpo della richiesta:
L'organo richiedente deve includere informazioni sull'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" } } }
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 al portatore) -: 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 al portatore) - 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 come 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 usando le opzioni curl per facilitare il debug dell'autenticazione.
Se ricevi un 200 ma l'indagine non inizia
La causa probabile è un payload non formattato correttamente.
Verifica che sia il timestamp che l'ID dell'incidente siano aggiornati e univoci. I messaggi duplicati vengono deduplicati.
Verifica che il messaggio sia un JSON valido
Verifica che il formato sia corretto
Se ricevi un 200 e l'indagine viene immediatamente annullata
Molto probabilmente hai raggiunto il limite del mese. Rivolgiti al tuo AWS referente per chiedere una modifica del limite di tariffa, se necessario.