Zum Inhalt springen

Eingehende Webhooks

Eingehende Webhooks empfangen Ereignisse aus anderen Werkzeugen und wandeln sie in Tickets oder Aktualisierungen um. Es gibt drei Eingangspunkte:

Herkunft Adresse Konfiguration in Core
Monitoring-, DevOps- und Sicherheitswerkzeuge /api/connectors/{vendor}/{tenant} Integrations, Konnektor des Anbieters
Andere ITSM-Systeme und generische REST-Quellen /api/integration/webhook/{integration_id} Integration Center
On-Premises-SNMP-Gateway /api/snmp-gateway/trap/{tenant} Integrations → SNMP gateway

Alle Adressen liegen unter https://exocortex-api.ai-exo-cortex.com.

Konnektoren für Monitoring-, DevOps- und Sicherheitswerkzeuge

Abschnitt betitelt „Konnektoren für Monitoring-, DevOps- und Sicherheitswerkzeuge“

Sie konfigurieren den Konnektor in exoCortex Core und richten dann den Webhook des Werkzeugs auf die Adresse des Konnektors. Das Werkzeug sendet sein natives Format: exoCortex normalisiert es und eröffnet bei Bedarf ein Ticket.

Unterstützte Werkzeuge:

  • Monitoring: Datadog, New Relic, Prometheus, Grafana, Nagios, Icinga, Centreon, Statuspage, NinjaOne.
  • DevOps und Bereitschaft: GitHub, GitLab, Jenkins, Bitbucket, PagerDuty, Opsgenie.
  • Sicherheit: Wazuh, Microsoft Sentinel, Tenable, Qualys, Splunk, Elastic, CrowdStrike, SentinelOne, QRadar, Cyber Protect, Fortigate, Check Point und Netzwerk-EDR-Sensoren.

In der Adresse ist {vendor} der Name des Werkzeugs in Kleinbuchstaben (zum Beispiel datadog) und {tenant} der Code des Tenants, für den Sie den Konnektor konfiguriert haben.

  • GitHub, GitLab, PagerDuty, Opsgenie und Statuspage signieren die Anfragen mit ihrem eigenen Mechanismus: exoCortex prüft ihn.
  • Für alle anderen Werkzeuge verwenden Sie die exoCortex-Signatur, berechnet mit dem Secret des Konnektors (siehe Anfragen signieren).

Schlägt ein Konnektor mehrmals hintereinander fehl, setzt exoCortex die Anfragen vorübergehend aus und antwortet mit 503 und resume_in_ms, den Millisekunden, nach denen Sie es erneut versuchen können.

Für ServiceNow, Jira, Zendesk, BMC oder eine generische REST-Quelle konfigurieren Sie die Integration im Integration Center von exoCortex Core, einschließlich der Feldzuordnung. Das andere System sendet die Ereignisse an die Adresse der Integration; exoCortex ordnet sie zu und legt das Ticket an oder aktualisiert es.

Die Signatur ist Pflicht, wenn die Integration ein Secret hat, und Integrationen im Webhook-Modus müssen eines haben. Verwenden Sie die exoCortex-Signatur; alternativ werden X-Bridge-Signature, X-Hub-Signature-256 oder X-Signature mit dem Wert sha256=<hex HMAC of the body> akzeptiert.

Die Antwort ist 200, wenn das Ereignis sofort verarbeitet wurde, und 202, wenn es für eine zuverlässige Verarbeitung in die Warteschlange gestellt wurde.

Um eine Anfrage an exoCortex zu signieren, senden Sie zwei Header:

  • X-Exo-Timestamp: die aktuelle Zeit in Unix-Sekunden;
  • X-Exo-Signature: v1= gefolgt vom hexadezimalen HMAC-SHA256 von timestamp + "." + body, berechnet mit dem Secret des Konnektors.

exoCortex lehnt Anfragen ab, deren Zeitstempel um mehr als 300 Sekunden von seiner eigenen Uhrzeit abweicht.

Finestra del terminale
ts=$(date +%s)
body='{"title":"CPU high on web-01","alert_type":"error"}'
sig=$(printf '%s.%s' "$ts" "$body" | openssl dgst -sha256 -hmac "$CONNECTOR_SECRET" -hex | sed 's/^.* //')
curl -X POST "https://exocortex-api.ai-exo-cortex.com/api/connectors/datadog/ACME" \
-H "Content-Type: application/json" \
-H "X-Exo-Timestamp: $ts" -H "X-Exo-Signature: v1=$sig" \
--data-binary "$body"

Der Header X-NH-Connector-Signature mit dem HMAC nur des Bodys ist veraltet und funktioniert bis zum 30. Juni 2027.

Wenn Sie Geräte haben, die SNMP-Traps senden, wandelt ein Gateway in Ihrem Netzwerk sie in JSON um und sendet sie an exoCortex. Das Secret legen Sie unter Integrations → SNMP gateway fest.

Das Gateway signiert jede Anfrage mit:

  • X-NH-SNMP-Timestamp: die aktuelle Zeit in Unix-Millisekunden;
  • X-NH-SNMP-Signature: sha256= gefolgt vom hexadezimalen HMAC-SHA256 von timestamp + "|" + body.

Die Zeittoleranz beträgt 5 Minuten. Ein Beispiel für einen Trap:

{
"source_ip": "192.0.2.10",
"source_sysname": "core-sw-01",
"trap_oid": "1.3.6.1.6.3.1.1.5.3",
"severity": "major",
"varbinds": {
"1.3.6.1.2.1.2.2.1.1": "12",
"1.3.6.1.2.1.2.2.1.2": "GigabitEthernet1/0/12"
}
}