View a markdown version of this page

DevOps Agent über Webhook aufrufen - AWS DevOps Agentin

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

DevOps Agent über Webhook aufrufen

Webhooks ermöglichen es externen Systemen, automatisch Agentenuntersuchungen auszulösen AWS DevOps . Dies ermöglicht die Integration mit Ticketsystemen, Überwachungstools und anderen Plattformen, die bei Vorfällen HTTP-Anfragen senden können.

Voraussetzungen

Stellen Sie vor der Konfiguration des Webhook-Zugriffs sicher, dass Sie über Folgendes verfügen:

  • Ein in Agent konfigurierter Agentenbereich AWS DevOps

  • Zugriff auf die AWS DevOps Agentenkonsole

  • Das externe System, das Webhook-Anfragen sendet

Webhook-Typen

AWS DevOps Agent unterstützt die folgenden Arten von Webhooks:

  • Integration-specific Webhooks — Werden automatisch generiert, wenn Sie Integrationen von Drittanbietern wie Dynatrace, Splunk, Datadog, New Relic oder Slack konfigurieren. ServiceNow Diese Webhooks sind mit der spezifischen Integration verknüpft und verwenden Authentifizierungsmethoden, die vom Integrationstyp bestimmt werden

  • Generische Webhooks — Können manuell erstellt werden, um Untersuchungen aus beliebigen Quellen auszulösen, die nicht von einer bestimmten Integration abgedeckt werden. In der AWS DevOps Agentenkonsole wird ein generischer Webhook als Agent Space-Webhook erstellt (auf einen Agent Space beschränkt). Wenn Sie einen generischen Webhook erstellen, wählen Sie dessen Authentifizierungsmethode: HMAC oder API-Schlüssel (Bearer-Token).

  • Grafana-Alert-Webhooks — Grafana kann über Webhook-Kontaktpunkte Warnmeldungen direkt an den AWS DevOps Agenten senden. Anweisungen zur Einrichtung, einschließlich einer benutzerdefinierten Benachrichtigungsvorlage, finden Sie unter Grafana verbinden. Grafana verbinden

Webhook-Authentifizierungsmethoden

Die Authentifizierungsmethode für Ihren Webhook hängt davon ab, mit welcher Integration er verknüpft ist:

HMAC-Authentifizierung — Wird verwendet von:

  • Webhooks zur Dynatrace-Integration

  • Generische Webhooks (wählen Sie HMAC bei der Erstellung aus)

  • MCP-Server-Webhooks (wählen Sie HMAC bei der Erstellung aus)

Inhaber-Token-Authentifizierung — Wird verwendet von:

  • Webhooks zur Splunk-Integration

  • Webhooks zur Datadog-Integration

  • Webhooks zur Integration von New Relic

  • ServiceNow Webhooks für die Integration

  • Webhooks für die Slack-Integration

  • Webhooks zur Grafana-Integration

  • Generische Webhooks (wählen Sie bei der Erstellung den API-Schlüssel aus)

  • MCP-Server-Webhooks (wählen Sie bei der Erstellung den API-Schlüssel aus)

Grundlegendes zur HMAC-Authentifizierung

HMAC (Hash-based Message Authentication Code) ist ein kryptografischer Mechanismus, der sowohl die Integrität als auch die Authentizität einer Webhook-Anfrage überprüft. Wenn Sie einen Webhook mit HMAC-Authentifizierung senden, generieren Sie eine Signatur, indem Sie den Anforderungszeitstempel und die Nutzlast mithilfe Ihres geheimen Schlüssels zusammen mit dem Algorithmus hashen. SHA-256 AWS DevOps Der Agent berechnet seinerseits unabhängig denselben Hash und vergleicht die beiden Signaturen. Wenn sie übereinstimmen, wird die Anfrage akzeptiert.

Da der Zeitstempel in der Signatur enthalten ist, bietet HMAC auch einen Wiederholungsschutz. Der AWS DevOps Agent kann Anfragen mit zu weit in der Vergangenheit liegenden Zeitstempeln zurückweisen und so verhindern, dass ein Angreifer eine gültige Anfrage erfasst und erneut sendet.

Wahl zwischen HMAC und Bearer-Token

Überlegungen HMAC Inhaber-Token
Komplexität des Setups Noch komplexer — Ihr Kunde muss für jede Anfrage eine Signatur anhand des Zeitstempels und der Nutzlast berechnen Einfacher — fügen Sie ein statisches Token in den Header ein Authorization
Integrität der Nutzdaten Verifiziert — Jede Änderung an der Nutzlast nach dem Signieren macht die Signatur ungültig Nicht verifiziert — das Token authentifiziert den Absender, schützt aber nicht den Inhalt der Nutzdaten
Schutz bei der Wiedergabe Built-in — Der Zeitstempel in der Signatur ermöglicht es dem Server, veraltete Anfragen abzulehnen Nicht eingebaut — ein erfasstes Token kann wiederverwendet werden, bis es rotiert wird
Geheimes Expositionsrisiko Niedriger — das Geheimnis wird in der Anfrage nie übertragen; es wird nur die berechnete Signatur gesendet Höher — das Token wird in jedem Anforderungsheader gesendet, was die Gefahr erhöht, dass der Datenverkehr abgefangen wird
Wann sollte dies verwendet werden? Wird empfohlen, wenn Sie stärkere Sicherheitsgarantien benötigen, z. B. für generische Webhooks oder Umgebungen mit strengen Compliance-Anforderungen Geeignet, wenn eine einfache Integration im Vordergrund steht und Ihr Netzwerktransport vertrauenswürdig ist, z. B. für verwaltete SaaS-Integrationen über HTTPS

Konfiguration des Webhook-Zugriffs

Schritt 1: Navigieren Sie zur Webhook-Konfiguration

  1. Melden Sie sich bei der AWS Management Console an und navigieren Sie zur AWS DevOps Agent-Konsole

  2. Wählen Sie Ihren Agentenbereich aus

  3. Gehen Sie zum Tab „Funktionen“

  4. Wählen Sie im Abschnitt Webhook die Option Konfigurieren

Schritt 2: Generieren Sie Webhook-Anmeldeinformationen

Für integrationsspezifische Webhooks:

Webhooks werden automatisch generiert, wenn Sie die Konfiguration einer Drittanbieter-Integration abschließen. Die Webhook-Endpunkt-URL und die Anmeldeinformationen werden am Ende des Einrichtungsprozesses der Integration bereitgestellt.

Für generische Webhooks:

  1. Wählen Sie „Webhook generieren“

  2. Wählen Sie für den Webhook-Authentifizierungstyp HMAC - oder API-Schlüssel aus:

    • HMAC — Das System generiert ein Webhook-Signaturgeheimnis. Ihr Client signiert jede Anfrage und sendet die Signatur im x-amzn-event-signature Header (siehe Version 1 unten).

    • API-Schlüssel — Das System generiert einen API-Schlüssel (Inhaber-Token). Ihr Client sendet ihn im Authorization: Bearer <token> Header (siehe Version 2 unten).

  3. Speichern Sie das generierte Geheimnis oder den API-Schlüssel sicher. Sie werden ihn nicht erneut abrufen können.

  4. Kopieren Sie die angegebene Webhook-Endpunkt-URL

Schritt 3: Konfigurieren Sie Ihr externes System

Verwenden Sie die URL und die Anmeldeinformationen des Webhook-Endpunkts, um Ihr externes System so zu konfigurieren, dass Anfragen an den AWS DevOps Agenten gesendet werden. Die spezifischen Konfigurationsschritte hängen von Ihrem externen System ab.

Verwaltung der Webhook-Anmeldeinformationen

Webhook-Anmeldeinformationen sind vertraulich. AWS DevOps Der Agent zeigt das Webhook-Geheimnis einmal an, wenn Sie den Webhook erstellen. Es gibt das Geheimnis nicht erneut über die Konsole, die API oder die Infrastruktur als Code zurück. Die Webhook-URL bleibt verfügbar. Wenn Sie das Geheimnis verlieren oder den Webhook erstellen, ohne ihn aufzuzeichnen, drehen Sie den Webhook, um ein neues Geheimnis zu generieren.

Rotierende Webhook-Anmeldeinformationen

Auf der Registerkarte „Funktionen“ können Sie die Anmeldeinformationen für jeden Webhook rotieren. Bei der Rotation bleibt dieselbe Webhook-URL erhalten und es wird ein neues Geheimnis generiert. Durch die Rotation wird das vorherige Geheimnis ungültig. Der Absender stoppt also, bis Sie es mit dem neuen Geheimnis aktualisieren. Rotieren Sie einen Webhook, wenn Sie das Secret verlieren oder wenn Sie ein Secret ersetzen möchten, das möglicherweise kompromittiert ist.

Um einen Webhook zu drehen:

  1. Melden Sie sich bei der AWS Management Console an und öffnen Sie die AWS DevOps Agent-Konsole.

  2. Wählen Sie Ihren Agentenbereich aus.

  3. Gehen Sie zur Registerkarte „Funktionen“ und suchen Sie dann nach dem Webhook:

    • Verwenden Sie für einen Integrations-Webhook die Capability Webhooks-Tabelle. Suchen Sie die Integration anhand ihres Identifikators, z. B. Ihrer ServiceNow Instanz-URL oder Ihres Grafana-Endpunkts.

    • Verwenden Sie für einen generischen Webhook den Abschnitt Agent Space Webhook.

  4. Öffnen Sie den Webhook-Editor. Wählen Sie für einen Integrations-Webhook Bearbeiten. Wählen Sie für einen generischen Webhook Aktionen und dann Bearbeiten aus.

  5. Wählen Sie „Webhook drehen“. Die Konsole generiert ein neues Geheimnis und behält dieselbe Webhook-URL bei.

  6. Wählen Sie „.csv-Datei herunterladen“, um die URL und den geheimen Schlüssel zu speichern, und bestätigen Sie dann, dass Sie sie gespeichert haben. Sie können das Geheimnis nicht abrufen, nachdem Sie diese Seite verlassen haben.

  7. Aktualisieren Sie den Absender mit dem neuen Geheimnis. Für eine Integration erweitern Sie die Anweisungen zur Serviceeinrichtung, um dienstspezifische Schritte zu finden, oder lesen Sie in der Verbindungsanleitung für Ihre Integration nach.

Um die Webhook-URL zu kopieren, ohne den Schlüssel zu rotieren, wählen Sie URL kopieren.

Webhooks, die mit Infrastruktur als Code erstellt wurden

Wenn Sie einen Webhook mit dem AWS CloudFormation AWS CDK oder Terraform erstellen, gibt der Stack das Webhook-Geheimnis nicht als Ausgabe zurück, da es sich um einen sensiblen Wert handelt. Wenn die Bereitstellung abgeschlossen ist, rufen Sie das Geheimnis ab, indem Sie den Webhook rotieren, wie im vorherigen Abschnitt beschrieben. Konfigurieren Sie dann Ihren Drittanbieterdienst mit der Webhook-URL und dem neuen Secret.

Webhook-Anmeldeinformationen entfernen

Um einen generischen Webhook zu löschen, öffnen Sie den Abschnitt Agent Space Webhook, wählen Sie Aktionen und dann Entfernen aus. Nachdem Sie den Webhook entfernt haben, akzeptiert der Endpunkt keine Anfragen mehr, bis Sie einen neuen Webhook erstellen.

Den Webhook verwenden

Webhook-Anforderungsformat

Um eine Untersuchung auszulösen, sollte Ihr externes System eine HTTP-POST-Anfrage an die Webhook-Endpunkt-URL senden.

Für Version 1 (HMAC-Authentifizierung):

Header:

  • Content-Type: application/json

  • x-amzn-event-signature: <HMAC signature>

  • x-amzn-event-timestamp: <+%Y-%m-%dT%H:%M:%S.000Z>

Die HMAC-Signatur wird generiert, indem Sie den Anfragetext mit Ihrem geheimen Schlüssel signieren. SHA-256

Für Version 2 (Bearer-Token-Authentifizierung):

Kopfzeilen:

  • Content-Type: application/json

  • Authorization: Bearer <your-token>

Text der Anfrage:

Der Anfragetext sollte Informationen über den Vorfall enthalten:

{ "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" } } }

Nutzlast-Schema:

{ 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; }

Beispielcode

Version 1 (HMAC-Authentifizierung) —: 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 (HMAC-Authentifizierung) — 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 (Bearer-Token-Authentifizierung) -: 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 (Bearer-Token-Authentifizierung) — 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"

Fehlerbehebung bei Webhooks

Wenn Sie keine 200 erhalten

Ein Wert von 200 und eine Nachricht wie Webhook Received zeigen an, dass die Authentifizierung bestanden wurde und die Nachricht in die Warteschlange gestellt wurde, damit das System sie überprüfen und verarbeiten kann. Wenn Sie keine 200, sondern eine 4xx erhalten, stimmt höchstwahrscheinlich etwas mit der Authentifizierung oder den Headern nicht. Versuchen Sie, manuell mit den Curl-Optionen zu senden, um das Debuggen der Authentifizierung zu erleichtern.

Wenn Sie 200 erhalten, aber eine Untersuchung nicht beginnt

Die wahrscheinliche Ursache ist eine falsch formatierte Nutzlast.

  1. Vergewissern Sie sich, dass sowohl der Zeitstempel als auch die Incident-ID aktualisiert und eindeutig sind. Doppelte Nachrichten werden dedupliziert.

  2. Überprüfen Sie, ob die Nachricht ein gültiges JSON ist

  3. Überprüfen Sie, ob das Format korrekt ist

Wenn Sie 200 erhalten und die Untersuchung sofort abgebrochen wird

Höchstwahrscheinlich haben Sie das Limit für den Monat erreicht. Bitte wenden Sie sich an Ihren AWS Ansprechpartner, um gegebenenfalls eine Änderung des Ratenlimits zu beantragen.