ServiceNow
fremforge kan öppna en incident i ServiceNow för varje säkerhetshändelse: ett nytt kritiskt eller allvarligt fynd, en träff på skadlig kod, en blockerad pull, en policyöverträdelse eller ett riskaccepterande som har löpt ut. Mottagaren postar direkt till Table API (POST /api/now/table/incident), så ServiceNow behöver bara en integrationsanvändare – inget Scripted REST API och ingen MID-server.
1. ServiceNow-sidan: en integrationsanvändare
- Skapa en användare för fremforge, till exempel
fremforge.integration. Kryssa i Web service access only. - Ge den en roll som får skapa incidenter via Table API, vanligtvis
itil, eller en snävare egen roll medcreatepåincident. - Välj hur fremforge ska autentisera sig:
- Basic: användarens namn och lösenord, skickade som
Authorization: Basic <base64 of user:password>. - OAuth bearer: en OAuth-token för användaren, skickad som
Authorization: Bearer <token>. En åtkomsttoken för OAuth i ServiceNow går ut, så en token som håller på att gå ut måste ersättas på mottagaren innan den slutar gälla. Basic är det enklare valet för en maskinanvändare.
- Basic: användarens namn och lösenord, skickade som
- Valfritt: anteckna
sys_idför den tilldelningsgrupp som ska ta emot incidenterna, och för den anmälare som ska registreras.
ServiceNow måste ta emot anrop från fremforges utgående adress. Om din instans begränsar källadresser, be supporten om den aktuella adressen.
2. fremforge-sidan: en mottagare 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ärdet i auth_header lagras krypterat och visas aldrig igen. Svaret innehåller "auth_header_set": true. För att byta lösenordet skickar du en PATCH med en ny auth_header.
Skicka sedan en testincident och 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 att ServiceNow skapade incidenten. 401 betyder att inloggningsuppgifterna är fel. 403 betyder att användaren saknar rollen för att skapa incidenter.
Vad incidenten innehåller
| Fält i incidenten | Värde |
|---|---|
short_description | [fremforge] följt av händelsens titel, till exempel [fremforge] CVE-2026-12345 in lodash 4.17.20 (högst 160 tecken) |
description | Händelsens namn, organisation, repo, allvarlighetsgrad, tidpunkt, korrelationsnyckel, en länk till fremforge-konsolen och händelsens detaljer som JSON |
urgency, impact | 1 för kritisk, 2 för allvarlig, annars 3 |
correlation_id | fremforge: följt av fyndets korrelationsnyckel. En nyckel som är för lång för fältet ersätts med en stabil SHA-256 av den |
correlation_display | fremforge |
assignment_group, caller_id, category, subcategory | Bara när de är angivna på mottagaren (objektet servicenow) |
ServiceNow beräknar incidentens prioritet utifrån urgency och impact som vanligt.
Varje händelse skapar en ny incident. Table API uppdaterar inte en befintlig post. Händelser om samma fynd har samma correlation_id. Ett exempel är ett fynd som senare följs av att ett riskaccepterande för det löper ut. Använd värdet i en business rule eller ett listfilter i ServiceNow för att gruppera dem. Timtaket begränsar hur många incidenter en mottagare kan öppna per timme. När taket har nåtts följer en sammanfattande incident efter timmen.
Anropet är också signerat (X-Fremforge-Signature). Table API ignorerar signaturen; det är auth-headern som autentiserar anropet.
Alternativ: egen logik i ett Scripted REST API
Vill du uppdatera en befintlig incident i stället för att skapa en ny, eller mappa fälten på ett annat sätt, behåller du mottagarens format Generic och pekar den mot en Scripted REST API-resurs. Skriptet tar emot den generiska payloaden. Slå upp en öppen incident via correlation_id och uppdatera den, eller skapa en ny. För att verifiera signaturen i skriptet beräknar du HMAC-SHA256 över <X-Fremforge-Timestamp>.<raw body> med mottagarens signeringshemlighet och jämför med v1-delen av X-Fremforge-Signature. Skydda resursen med samma integrationsanvändare och auth_header.
Relaterat
- Webhooks för säkerhetslarm: händelser, payload, signatur, nya försök och taket.
- Vidarebefordran till SIEM: hela granskningsloggen till ett SIEM.