ServiceNow
fremforge kan oprette en ServiceNow-incident for hver sikkerhedshændelse: et nyt kritisk eller højt fund, et malwarematch, et blokeret pull, en politikovertrædelse eller en udløbet risikoaccept. Destinationen sender direkte til Table API’et (POST /api/now/table/incident), så ServiceNow skal kun bruge en integrationsbruger – hverken et scripted REST API eller en MID-server.
1. ServiceNow-siden: en integrationsbruger
- Opret en bruger til fremforge, f.eks.
fremforge.integration. Sæt flueben i Web service access only. - Giv brugeren en rolle, der må oprette incidents via Table API’et, typisk
itil, eller en snævrere brugerdefineret rolle medcreatepåincident. - Vælg, hvordan fremforge skal autentificere sig:
- Basic: brugerens navn og adgangskode, sendt som
Authorization: Basic <base64 of user:password>. - OAuth bearer: et OAuth-token til brugeren, sendt som
Authorization: Bearer <token>. Et OAuth-adgangstoken fra ServiceNow udløber, så et udløbende token skal udskiftes på destinationen, før det løber ud. Basic er det enkleste valg til en maskinbruger.
- Basic: brugerens navn og adgangskode, sendt som
- Valgfrit: notér
sys_idfor den assignment group, der skal modtage incidents, og for den caller, der skal registreres.
ServiceNow skal acceptere forespørgsler fra fremforges udgående adresse. Hvis din instans begrænser kilde-IP’er, så spørg supporten om den aktuelle adresse.
2. fremforge-siden: en destination i ServiceNow-format
Med API’et (scope webhooks:write):
AUTH="Basic $(printf '%s' 'fremforge.integration:<password>' | base64)"
curl -sS -X POST "https://frem.sh/_app/api/v1/orgs/acme/webhooks/destinations" \
-H "Authorization: Bearer $FREMFORGE_TOKEN" -H "Content-Type: application/json" \
-d @- <<EOF
{
"name": "ServiceNow incidents",
"target_url": "https://acme.service-now.com/api/now/table/incident",
"events": ["security.finding.created", "security.malware.matched",
"security.pull.blocked", "security.policy.violation",
"security.exception.expired"],
"payload_format": "servicenow",
"security_min_severity": "critical",
"security_hourly_cap": 50,
"servicenow": { "assignment_group": "<sys_id>", "category": "security" },
"auth_header": { "name": "Authorization", "value": "$AUTH" }
}
EOFVærdien i auth_header gemmes krypteret og vises aldrig igen. Svaret indeholder "auth_header_set": true. Skift adgangskoden ved at sende en PATCH med en ny auth_header.
Send derefter en testincident, og læs resultatet:
curl -sS -X POST "https://frem.sh/_app/api/v1/orgs/acme/webhooks/destinations/$ID/test" \
-H "Authorization: Bearer $FREMFORGE_TOKEN"
curl -sS "https://frem.sh/_app/api/v1/orgs/acme/webhooks/deliveries?destination_id=$ID&limit=1" \
-H "Authorization: Bearer $FREMFORGE_TOKEN"201 i response_status betyder, at ServiceNow har oprettet incidenten. 401 betyder, at legitimationsoplysningerne er forkerte. 403 betyder, at brugeren mangler rollen til at oprette incidents.
Hvad incidenten indeholder
| Felt på incidenten | Værdi |
|---|---|
short_description | [fremforge] efterfulgt af hændelsens titel, f.eks. [fremforge] CVE-2026-12345 in lodash 4.17.20 (højst 160 tegn) |
description | Hændelsens navn, organisation, repository, alvorlighed, tidspunkt, korrelationsnøgle, et link til fremforge-konsollen og hændelsens detaljer som JSON |
urgency, impact | 1 ved kritisk, 2 ved høj, ellers 3 |
correlation_id | fremforge: efterfulgt af fundets korrelationsnøgle. En nøgle, der er for lang til feltet, erstattes af en stabil SHA-256 af den |
correlation_display | fremforge |
assignment_group, caller_id, category, subcategory | Kun når de er sat på destinationen (objektet servicenow) |
ServiceNow beregner incidentens prioritet ud fra urgency og impact som normalt.
Hver hændelse opretter en ny incident. Table API’et opdaterer ikke en eksisterende post. Hændelser om det samme fund har samme correlation_id. Et eksempel er et fund, der senere efterfølges af, at en risikoaccept på det udløber. Brug den værdi i en business rule eller et listefilter i ServiceNow til at gruppere dem. Timeloftet begrænser, hvor mange incidents én destination kan oprette i timen. Når loftet er nået, kommer der én opsummerende incident efter timen.
Forespørgslen er også signeret (X-Fremforge-Signature). Table API’et ignorerer signaturen; det er auth-headeren, der autentificerer forespørgslen.
Alternativ: din egen logik i et Scripted REST API
Hvis du vil opdatere en eksisterende incident i stedet for at oprette en ny, eller mappe felterne anderledes, så behold destinationens format som Generic, og peg den mod en Scripted REST API-ressource. Scriptet modtager den generiske body. Slå en åben incident op på correlation_id, og opdatér den, eller indsæt en ny. Hvis scriptet skal verificere signaturen, så beregn HMAC-SHA256 over <X-Fremforge-Timestamp>.<raw body> med destinationens signeringssecret, og sammenlign med v1-delen af X-Fremforge-Signature. Beskyt ressourcen med den samme integrationsbruger og auth_header.
Relateret
- Webhooks til sikkerhedsalarmer: hændelser, body, signatur, genforsøg og loftet.
- Videresendelse til SIEM: hele auditloggen til en SIEM.