Przejdź do głównej zawartości

Webhooki przychodzące

Webhooki przychodzące odbierają zdarzenia z innych narzędzi i przekształcają je w zgłoszenia lub aktualizacje. Istnieją trzy punkty wejścia:

Źródło Adres Konfiguracja w Core
Narzędzia monitorowania, DevOps i bezpieczeństwa /api/connectors/{vendor}/{tenant} Integrations, konektor dostawcy
Inne systemy ITSM i ogólne źródła REST /api/integration/webhook/{integration_id} Integration Center
Lokalne bramy SNMP (on-premise) /api/snmp-gateway/trap/{tenant} Integrations → SNMP gateway

Wszystkie adresy znajdują się w domenie https://exocortex-api.ai-exo-cortex.com.

Konektory dla narzędzi monitorowania, DevOps i bezpieczeństwa

Dział zatytułowany „Konektory dla narzędzi monitorowania, DevOps i bezpieczeństwa”

Konektor konfiguruje się w exoCortex Core, a następnie kieruje webhook narzędzia na adres konektora. Narzędzie wysyła dane we własnym formacie: exoCortex je normalizuje i w razie potrzeby otwiera zgłoszenie.

Obsługiwane narzędzia:

  • Monitorowanie: Datadog, New Relic, Prometheus, Grafana, Nagios, Icinga, Centreon, Statuspage, NinjaOne.
  • DevOps i dyżury (on-call): GitHub, GitLab, Jenkins, Bitbucket, PagerDuty, Opsgenie.
  • Bezpieczeństwo: Wazuh, Microsoft Sentinel, Tenable, Qualys, Splunk, Elastic, CrowdStrike, SentinelOne, QRadar, Cyber Protect, Fortigate, Check Point oraz sieciowe sondy EDR.

W adresie {vendor} to nazwa narzędzia zapisana małymi literami (na przykład datadog), a {tenant} to kod tenanta, dla którego skonfigurowano konektor.

  • GitHub, GitLab, PagerDuty, Opsgenie i Statuspage podpisują żądania własnym mechanizmem: exoCortex go weryfikuje.
  • W przypadku wszystkich pozostałych narzędzi należy użyć podpisu exoCortex, obliczanego za pomocą sekretu konektora (zob. Podpisywanie żądań).

Jeśli konektor kilkakrotnie z rzędu zakończy się niepowodzeniem, exoCortex tymczasowo wstrzymuje przyjmowanie żądań i odpowiada kodem 503 z polem resume_in_ms, czyli liczbą milisekund, po których należy ponowić próbę.

W przypadku ServiceNow, Jira, Zendesk, BMC lub ogólnego źródła REST integrację konfiguruje się w Integration Center w exoCortex Core wraz z mapowaniem pól. Drugi system wysyła zdarzenia na adres integracji; exoCortex je mapuje i tworzy lub aktualizuje zgłoszenie.

Podpis jest obowiązkowy, gdy integracja ma sekret, a integracje w trybie webhook muszą go mieć. Należy używać podpisu exoCortex; alternatywnie akceptowane są nagłówki X-Bridge-Signature, X-Hub-Signature-256 lub X-Signature z wartością sha256=<hex HMAC of the body>.

Odpowiedź ma kod 200, gdy zdarzenie zostało przetworzone od razu, oraz 202, gdy zostało umieszczone w kolejce w celu niezawodnego przetworzenia.

Aby podpisać żądanie do exoCortex, należy wysłać dwa nagłówki:

  • X-Exo-Timestamp: bieżący czas w sekundach Unix;
  • X-Exo-Signature: v1=, a po nim szesnastkowy HMAC-SHA256 z timestamp + "." + body, obliczony za pomocą sekretu konektora.

exoCortex odrzuca żądania ze znacznikiem czasu różniącym się o ponad 300 sekund od jego własnego czasu.

Okno terminala
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"

Nagłówek X-NH-Connector-Signature z HMAC obliczonym wyłącznie z treści jest wycofywany i działa do 30 czerwca 2027.

Jeśli posiadają Państwo urządzenia wysyłające pułapki (trap) SNMP, brama w Państwa sieci konwertuje je na JSON i wysyła do exoCortex. Sekret ustawia się w Integrations → SNMP gateway.

Brama podpisuje każde żądanie nagłówkami:

  • X-NH-SNMP-Timestamp: bieżący czas w milisekundach Unix;
  • X-NH-SNMP-Signature: sha256=, a po nim szesnastkowy HMAC-SHA256 z timestamp + "|" + body.

Tolerancja czasu wynosi 5 minut. Przykład pułapki:

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