Beveiligingsgebeurtenissen in je SIEM
Sobolt houdt per organisatie bij wat er rond inloggen en toegang gebeurt: wie inlogt, wie het niet lukt, SSO, het wisselen van organisatie en wie welke rechten krijgt of verliest. Je organisatie leest alleen haar eigen gebeurtenissen, nooit die van een andere organisatie.
Je haalt ze op drie manieren op:
- Opvragen (polling): je SIEM vraagt elke minuut wat er nieuw is.
- Stream (Server-Sent Events): een open verbinding die elke gebeurtenis binnen enkele seconden doorgeeft.
- Webhook: Sobolt stuurt nieuwe gebeurtenissen zelf naar een HTTPS-adres van jou, ondertekend, binnen een minuut.
Gebeurtenissen blijven 365 dagen bewaard.
Instellen
In het Sobolt Portal: Organisaties → je organisatie → Beveiliging. Daarvoor heb je het recht org.security_events.manage nodig; beheerders van de organisatie hebben het. Lezen in het portal vraagt org.security_events.read.
API-token
Maak onder SIEM-koppeling een API-token aan, met een naam (bijvoorbeeld "Sentinel") en een geldigheid van 30 tot 365 dagen.
- Het token begint met
sbt_en wordt één keer getoond. Bewaar het direct in de kluis van je SIEM. - Het token leest alleen de beveiligingsgebeurtenissen van je eigen organisatie. Het opent niets anders in Sobolt.
- Je trekt het in met één klik; het werkt dan meteen niet meer. In de lijst zie je wanneer het voor het laatst is gebruikt.
Gebruik het als bearer token: Authorization: Bearer sbt_….
Webhook
Vul onder Webhook een HTTPS-adres in en sla op. Je krijgt dan één keer het geheim te zien waarmee Sobolt elke levering ondertekent (begint met whsec_).
- Het adres moet met
https://beginnen en op het internet bereikbaar zijn. Interne adressen worden geweigerd. - Test versturen stuurt een ondertekende levering zonder gebeurtenissen, met
"test": true. - Een webhook stuurt de gebeurtenissen vanaf het moment dat je hem aanmaakt, niet de geschiedenis. Die haal je met de API op.
- Onder Leveringen zie je de laatste 50 pogingen met het antwoord van je adres.
Opvragen
curl -H "Authorization: Bearer sbt_…" \
"https://auth.sobolt.com/organisations/<organisatie-id>/security-events?after=0&limit=1000"
Het antwoord:
{
"events": [
{
"id": 18234,
"occurred_at": "2026-11-02T09:31:07.512Z",
"event": "sso.login",
"outcome": "success",
"user_id": "5f0c…",
"user_email": "j.jansen@voorbeeld.nl",
"actor_id": null,
"actor_email": null,
"client_id": "sobolt-portal",
"target": "voorbeeld",
"reason": null,
"ip": "203.0.113.7",
"user_agent": "Mozilla/5.0 …"
}
],
"next_cursor": 18234,
"has_more": true
}
- Nieuw ophalen: geef
after=<hoogste id dat je al hebt>. Je krijgt de gebeurtenissen erna, oudste eerst, totlimit(standaard 100, hoogstens 1000). Bewaar het hoogsteiden vraag de volgende keer daarna. Zo mis je niets en krijg je niets dubbel. - Gebeurtenissen van de laatste 5 seconden komen pas bij de volgende vraag mee. Zo slaat een SIEM nooit een gebeurtenis over die op hetzelfde moment op een andere server werd geschreven.
- Bladeren: zonder
afterkrijg je de nieuwste eerst;before=<id>geeft de pagina daarvoor (next_cursor).has_morezegt of er nog een pagina is. - Op tijd ophalen:
since=<tijd>&order=ascgeeft de gebeurtenissen vanaf die tijd, oudste eerst, ook met 5 seconden marge. - Filters:
sinceenuntil,event,outcome(success,failure,refused) enuser_id. Een tijd mag ISO 8601 zijn (met of zonder tijdzone; zonder is UTC) of Unix-tijd in seconden of milliseconden. - Tijden in het antwoord zijn UTC met precies drie decimalen.
- Inloggen:
Authorization: Bearer sbt_…, of Basic met het token als wachtwoord (de gebruikersnaam wordt niet gelezen) voor een SIEM die alleen Basic kent.
Stream
curl -N -H "Authorization: Bearer sbt_…" \
"https://auth.sobolt.com/organisations/<organisatie-id>/security-events/stream"
Elke gebeurtenis komt als event: security_event, met het id van de gebeurtenis en dezelfde velden als hierboven in data. Zonder after begint de stream bij nu. De verbinding sluit na een paar minuten; maak opnieuw verbinding met de header Last-Event-ID: <laatste id> (een EventSource-client doet dat zelf), dan gaat hij verder waar hij was.
Webhook-leveringen
Sobolt stuurt een POST met JSON:
{
"webhook_id": "…",
"delivery_id": "…",
"organisation_id": "…",
"events": [ … ]
}
- Hoogstens 100 gebeurtenissen per levering, oudste eerst, met dezelfde velden als de API.
- Antwoord met een 2xx binnen 10 seconden. Elk ander antwoord, of geen antwoord, telt als mislukt: Sobolt stuurt dezelfde gebeurtenissen opnieuw, eerst na 30 seconden, daarna steeds later tot eens per uur. Lukt het 72 uur niet, dan zet Sobolt de webhook uit; je zet hem in het portal weer aan en hij gaat verder waar hij was.
- Een levering kan dus twee keer aankomen. Gebruik het
idvan de gebeurtenissen (ofdelivery_id) om dubbele te herkennen. - Sobolt volgt geen doorverwijzingen (3xx).
De handtekening controleren
Elke levering heeft de header:
Sobolt-Signature: t=1762075867,v1=5b1e…
v1 is de HMAC-SHA256, in hexadecimaal, van <t>.<de ruwe body> met het webhookgeheim als sleutel. Controleer hem op de ruwe body, voordat je de JSON leest, en weiger een levering met een t van meer dan 5 minuten geleden.
import hashlib, hmac, time
def is_from_sobolt(secret: str, header: str, body: bytes) -> bool:
parts = dict(p.split("=", 1) for p in header.split(","))
signed = f"{parts['t']}.".encode() + body
expected = hmac.new(secret.encode(), signed, hashlib.sha256).hexdigest()
fresh = abs(time.time() - int(parts["t"])) < 300
return fresh and hmac.compare_digest(expected, parts["v1"])
Na Geheim vernieuwen tekent Sobolt meteen met het nieuwe geheim.
Microsoft Sentinel en ArcSight
Voor beide is er een kant-en-klare koppeling die de gebeurtenissen met een API-token ophaalt. Je hoeft niets in je firewall open te zetten. Vraag de bestanden aan Sobolt.
- Microsoft Sentinel: een data connector op het Codeless Connector Framework. Na het installeren open je de connector "Sobolt security events", vul je je organisatie-id en een API-token in en klik je op Connect. De gebeurtenissen komen in de tabel
SoboltSecurityEvents_CL. - ArcSight (FlexConnector for REST): een parserbestand (
sobolt.jsonparser.properties) en deze instellingen: Events URLhttps://auth.sobolt.com/organisations/<organisatie-id>/security-events?since=$START_AT_TIME&order=asc&limit=1000, authenticatie Basic met je organisatie-id als gebruikersnaam en het API-token als wachtwoord. Zetmaintaineventcache=trueinagent.properties.
Welke gebeurtenissen
| Gebeurtenis | Wanneer | reason |
|---|---|---|
login.requested | Iemand vraagt een inloglink of wordt naar SSO gestuurd | magic_link, signup_link, sso, unknown_address (onbekend adres op een domein met jullie SSO) |
magic_link.used | Een inloglink wordt gebruikt | login, signup, already_used, invalid_or_expired |
sso.login | Inloggen via jullie identity provider | leeg bij succes; anders bijvoorbeeld not_a_member, no_account, domain_not_connection, provider_error |
org.switch | Iemand wisselt naar jullie organisatie | not_a_member, sso_required |
grant.created / grant.revoked | Een recht wordt gegeven of ingetrokken (actor_email is wie het deed) | het id van het recht |
masquerade.started / masquerade.handoff | Een Sobolt-medewerker kijkt mee als een van jullie gebruikers (actor_email is de medewerker) | |
oauth.refresh_reused | Een ingetrokken token van een gekoppelde app wordt opnieuw gebruikt; de hele reeks wordt ingetrokken | family_revoked |
sso.domains_removed | Een domein is van jullie SSO-koppeling gehaald | |
security_events.read / security_events.streamed | Iemand leest deze gebeurtenissen in het portal (actor_email is wie) | |
security_token.created / security_token.revoked | Een API-token is gemaakt of ingetrokken | |
security_token.used | Een API-token wordt gebruikt: één keer per dag, bij het eerste gebruik (target is het begin van het token). Elke afzonderlijke vraag van je SIEM komt niet in deze gebeurtenissen, anders zou je SIEM bij elke vraag zijn eigen vorige vraag terugkrijgen. | |
security_webhook.saved / .secret_rotated / .deleted / .disabled | De webhook is gewijzigd, of na 72 uur mislukken uitgezet |
outcome is success, failure (iets ging mis) of refused (Sobolt weigerde). Nieuwe gebeurtenissen kunnen erbij komen; laat je SIEM onbekende namen doorlaten.
Privacy
Een gebeurtenis bevat het IP-adres en de browser (user agent) van wie handelde, en het e-mailadres van de gebruiker. Dat zijn persoonsgegevens: Sobolt bewaart ze 365 dagen om beveiligingsincidenten te kunnen onderzoeken, en jullie lezen alleen die van je eigen organisatie. Een gebeurtenis bevat nooit een wachtwoord, token, inloglink of geheim.