Developer cookbook

SIEM cookbook - CodeB logs into your Splunk / Elastic / Datadog / Loki / Sentinel / QRadar.

CodeB does not push to your SIEM natively; your SIEM agent tails our per-tenant log files and webhook receiver output. Every path in the recipes below points at the real files CodeB writes today. European Digital Identity Wallet audit events land in the OIDC log file (codeb-oidc-*.log) and the wallet audit log (tmp/wallet-*.log).

Where CodeB writes logs today

Every SIEM recipe below points at these paths on the IIS host:

StreamFile patternNotes
codeb-connApp_Data/<tenant>/logs/codeb-conn-<slug>-YYYY-MM-DD.logSIP-WS + WebRTC join events.
codeb-oidcApp_Data/<tenant>/logs/codeb-oidc-YYYY-MM-DD.logOIDC + European Digital Identity Wallet vp-* audit events.
codeb-dialApp_Data/<tenant>/logs/codeb-dial-YYYY-MM-DD.logSIP INVITEs, transfers, hangups.
codeb-cdrApp_Data/<tenant>/logs/cdr/cdr-*.csvDurable call detail records (per-tenant CSV).
codeb-bridgetmp/codeb-bridge-YYYY-MM-DD.logWebRTC-to-SIP trunk bridge log.
codeb-wallettmp/wallet-*.YYYY-MM-DD.logWallet-backup + wallet-session-token audit.
iisApp_Data/weblogs/W3SVC*/*.logIIS W3C-format access log.

LOUD-diag tag format

Every branch in signal.ashx and the bridge emits INF lines with a square-bracket tag. Recommended parser regex: \[([A-Z][A-Z0-9\-]+)\]. Recipes below extract this into a searchable loud_tag field.

2026-07-23T09:14:22Z INF [SIGNAL-JOIN] corr=8b1e room=sales-demo peer=alice ip=46.11.x.x 2026-07-23T09:14:23Z INF [RASP-ANOMALY] corr=8b1e reason="rapid-fire join x3 in 2s" ip=46.11.x.x 2026-07-23T09:14:24Z INF [TENANT-ISOLATION] corr=8b1e tenant=acme.example allowed=true 2026-07-23T09:14:30Z INF [MDOC-VERIFY] corr=8b1e result=ok trust-anchor=eu-lotl 2026-07-23T09:14:31Z INF [LOTL-CHAIN] corr=8b1e chain=x5c depth=3 result=trusted

Recipes - 6 SIEM back-ends

SIEMAgentRecipeSnippet
SplunkUniversal Forwarderinputs.conf tailing per-tenant logs.splunk-inputs.conf
ElasticFilebeat + LogstashFilestream inputs + optional Logstash grok.filebeat-codeb.yml
DatadogDatadog Agentlogs.d/codeb.d/conf.yaml with grok pipelines.datadog-conf.yaml
Grafana LokiPromtailscrape_configs + Loki alert rules.promtail-scrape-config.yml
Azure SentinelAMA + custom log tablesDCRs per stream + KQL analytics rules.azure-sentinel-custom-log.md
IBM QRadarWinCollect + Universal DSMLog Sources + Custom Event Properties + AQL.qradar-log-source-setup.md

Recommended alert families

FamilyMatchSeverity
RASP anomalyloud_tag matches RASP-*High
Tenant isolation breachcontains "TENANT-ISOLATION-BREACH"Critical
mDoc verify failurestream=oidc AND "MDOC-VERIFY" AND ("fail" OR "denied")High
LOTL chain break"LOTL-CHAIN" AND ("broken" OR "untrusted")High
WA-POP passkey reject"WA-POP-DIAG" AND ("reject" OR "denied")Medium
ACL auto-blackliststream=conn AND "auto-blacklist"Medium

Authentication model

None on the SIEM side - the SIEM agent runs on the IIS host and reads the log files directly. If you feed webhooks into your SIEM as HTTP events instead of tailing files, verify the X-CodeB-Signature HMAC per the webhooks cookbook.

RASP posture

The SIEM cookbook is read-side. Server-side controls at signal.ashx, oidc.ashx, chat.ashx and the bridge (IpAllowGate, per-tenant rate limits, algorithm allow-lists, loud diags) all remain in place; SIEM ingest is a strict superset of what the operator sees on-disk.

NIS2 / DORA / CRA

NIS2 Article 21 requires near-real-time signals to authorities; ingest into your SIEM and route the RASP + tenant-breach families to your incident-response channel. DORA operational-resilience monitoring uses the same feed. CRA product-side auditability is met by per-tenant filesystem+JSON storage - your SIEM inherits the same tenant boundary as the on-disk logs.

FAQ

Structured answers embedded in the schema block above.