MazeVault SIEM Integration Guide¶
Overview¶
MazeVault supports real-time streaming of audit events to external SIEM platforms and ELK stacks. This guide covers setup for all supported platforms:
- Elasticsearch / ELK Stack — Bulk API with ECS field mapping
- Splunk Enterprise Security — HEC (HTTP Event Collector)
- Microsoft Sentinel — via Syslog/CEF connector
- IBM QRadar — via Syslog/LEEF connector
- Generic Syslog — RFC 5424 for any syslog-compatible receiver
1. Elasticsearch / ELK Stack¶
1.1 Prerequisites¶
- Elasticsearch 7.x or 8.x cluster
- Kibana access for importing detection rules and dashboards
- API Key or basic auth credentials
1.2 Configure in MazeVault¶
- Navigate to Organization Settings → Audit Streams
- Click Add Streaming Destination
- Select Elasticsearch / ELK
- Configure:
- Endpoints: Comma-separated Elasticsearch URLs (e.g.,
https://es1:9200, https://es2:9200) - Authentication: API Key (recommended) or Basic Auth
- Index Pattern:
mazevault-audit(date suffix auto-appended) - Ingest Pipeline: Optional — specify if you have a custom pipeline
- Click Save Destination
1.3 Import Index Template & ILM Policy¶
# Import ILM policy (hot→warm→cold→delete lifecycle)
curl -X PUT "https://ES_HOST:9200/_ilm/policy/mazevault-audit-policy" \
-H "Content-Type: application/json" \
-d @mazevault-ilm-policy.json
# Import index template
curl -X PUT "https://ES_HOST:9200/_index_template/mazevault-audit" \
-H "Content-Type: application/json" \
-d @mazevault-index-template.json
Note: MazeVault auto-creates the ILM policy and index template on first connection. Manual import is only needed if you want to customize settings before first event.
1.4 Import Detection Rules¶
- Open Kibana → Security → Detection Rules
- Click Import rules
- Upload
mazevault-detection-rules.ndjson - Enable the imported rules
1.5 Detection Rules Included¶
| Rule ID | Name | Severity |
|---|---|---|
| MV-AUTH-001 | Brute Force Detection | HIGH |
| MV-AUTH-002 | Impossible Travel Login | CRITICAL |
| MV-AUTH-003 | After-Hours Access | MEDIUM |
| MV-AUTH-004 | Privilege Escalation | CRITICAL |
| MV-AUTH-005 | MFA Bypass Attempt | HIGH |
| MV-EXFIL-001 | Bulk Secret Export | CRITICAL |
| MV-EXFIL-002 | Mass Secret Read | HIGH |
| MV-EXFIL-003 | Certificate Mass Export | HIGH |
| MV-CERT-001 | Unauthorized Cert Issuance | CRITICAL |
| MV-CERT-002 | CA Account Tampering | HIGH |
| MV-CERT-003 | Mass Certificate Revocation | CRITICAL |
| MV-ACL-001 | Mass Permission Change | HIGH |
| MV-ACL-002 | Admin Role Granted | MEDIUM |
| MV-ACL-003 | Suspicious Project Deletion | CRITICAL |
| MV-SYS-001 | Audit Stream Disabled | CRITICAL |
| MV-SYS-002 | Chain Hash Integrity Anomaly | CRITICAL |
| MV-SYS-003 | Integration Config Change | MEDIUM |
1.6 Verify¶
- Trigger a test event (e.g., login to MazeVault)
- In Kibana → Discover, search index
mazevault-audit-* - Verify ECS fields:
event.action,user.id,source.ip,mazevault.*
2. Splunk Enterprise Security¶
2.1 Prerequisites¶
- Splunk Enterprise or Cloud with HEC enabled
- HEC token generated
2.2 Configure in MazeVault¶
- Navigate to Organization Settings → Audit Streams
- Click Add Streaming Destination
- Select Splunk HEC
- Configure:
- HEC Endpoint:
https://splunk:8088/services/collector - HEC Token: Your generated token
- Index: Target index (e.g.,
mainormazevault) - Source Type:
mazevault:audit - Click Save Destination
2.3 Install Detection Rules¶
- Copy
savedsearches.confto$SPLUNK_HOME/etc/apps/mazevault/local/ - Copy
props.confandtransforms.confto the same directory - Restart Splunk:
$SPLUNK_HOME/bin/splunk restart
Alternatively, import via Splunk UI: 1. Settings → Searches, reports, and alerts 2. Import each saved search manually
2.4 Verify¶
- Search:
index=* sourcetype="mazevault:audit" | head 10 - Verify JSON fields are extracted correctly
3. Microsoft Sentinel¶
3.1 Prerequisites¶
- Azure Sentinel workspace configured
- CEF via AMA (Azure Monitor Agent) data connector enabled
- Syslog listener on a designated VM (port 514 or custom)
3.2 Configure in MazeVault¶
- Navigate to Organization Settings → Audit Streams
- Click Add Streaming Destination
- Select Syslog / SIEM (CEF, LEEF, RFC 5424)
- Configure:
- Host: Your syslog forwarder IP/hostname
- Port: 514 (or custom)
- Protocol: TCP or TLS (recommended)
- Message Format: CEF (ArcSight / Sentinel)
- Application Name:
MazeVault - Click Save Destination
3.3 Import Analytic Rules¶
Using Azure CLI:
az deployment group create \
--resource-group YOUR_RG \
--template-file mazevault-sentinel-rules.json
Or via Azure Portal:
1. Sentinel → Analytics → Import
2. Upload mazevault-sentinel-rules.json
3.4 Import Hunting Queries¶
- Sentinel → Hunting → New Query
- Copy KQL queries from
mazevault-hunting-queries.yaml
3.5 Verify¶
- In Sentinel, go to Logs
- Query:
CommonSecurityLog | where DeviceVendor == "MazeVault" | take 10
4. IBM QRadar¶
4.1 Prerequisites¶
- QRadar Console access
- Syslog log source configured
4.2 Configure in MazeVault¶
- Navigate to Organization Settings → Audit Streams
- Click Add Streaming Destination
- Select Syslog / SIEM (CEF, LEEF, RFC 5424)
- Configure:
- Host: QRadar Event Collector IP
- Port: 514
- Protocol: TCP
- Message Format: LEEF (IBM QRadar)
- Application Name:
MazeVault - Click Save Destination
4.3 Import DSM Extension¶
- Admin → DSM Editor
- Click Import and upload
mazevault-log-source-extension.xml - Deploy changes
4.4 Import Custom Rules¶
- Admin → Rules
- Actions → Import Rules
- Upload
mazevault-qradar-rules.xml - Deploy changes
4.5 Verify¶
- Log Activity → Filter by Log Source Type "MazeVault"
- Verify events are parsed with correct custom properties
5. ECS Field Mapping Reference¶
MazeVault maps audit events to the Elastic Common Schema (ECS) for Elasticsearch destinations:
| MazeVault Field | ECS Field | Type |
|---|---|---|
| CreatedAt | @timestamp | date |
| Action | event.action | keyword |
| — | event.module | keyword (always "mazevault") |
| Severity | event.severity | integer |
| RiskScore | event.risk_score | integer |
| UserID | user.id | keyword |
| IPAddress | source.ip | ip |
| EntityType | mazevault.entity_type | keyword |
| EntityID | mazevault.entity_id | keyword |
| Details | mazevault.details | text |
| ChainHash | mazevault.chain_hash | keyword |
| PreviousHash | mazevault.previous_hash | keyword |
| ProjectID | mazevault.project_id | keyword |
| SessionID | mazevault.session_id | keyword |
| RequestID | mazevault.request_id | keyword |
6. CEF Field Mapping Reference¶
For Syslog/CEF destinations (Microsoft Sentinel, ArcSight):
| CEF Field | MazeVault Source |
|---|---|
| src | IPAddress |
| suser | UserID |
| cs1 (EntityType) | EntityType |
| cs2 (EntityID) | EntityID |
| cs3 (ChainHash) | ChainHash |
| rt | CreatedAt (epoch ms) |
| SignatureID | Action |
| Severity | RiskScore → 0-10 scale |
7. LEEF Field Mapping Reference¶
For Syslog/LEEF destinations (IBM QRadar):
| LEEF Key | MazeVault Source |
|---|---|
| src | IPAddress |
| usrName | UserID |
| action | Action |
| entityType | EntityType |
| entityId | EntityID |
| chainHash | ChainHash |
| riskScore | RiskScore |
| devTime | CreatedAt |
| msg | Details |
8. Monitoring & Observability¶
MazeVault exposes Prometheus metrics for streaming health:
| Metric | Description |
|---|---|
mazevault_log_stream_events_dropped_total |
Events dropped due to buffer full |
mazevault_log_stream_send_duration_seconds |
Send latency per destination |
mazevault_log_stream_send_errors_total |
Send errors per destination |
mazevault_log_stream_batch_size |
Batch sizes sent |
mazevault_log_stream_dlq_writes_total |
Events written to dead letter queue |
mazevault_archive_events_dropped_total |
Archive events dropped |
mazevault_archive_upload_errors_total |
Archive upload errors |
Dead Letter Queue¶
If a destination is unavailable after 3 retry attempts (1s, 2s, 4s exponential backoff), events are written to /var/log/mazevault/stream_dlq.jsonl for manual replay.
9. Troubleshooting¶
No events appearing in SIEM¶
- Check destination status in MazeVault UI (green = active)
- Check Prometheus metric
mazevault_log_stream_send_errors_total - Check DLQ file:
tail -f /var/log/mazevault/stream_dlq.jsonl - Verify network connectivity from MazeVault to SIEM endpoint
High latency¶
- Check
mazevault_log_stream_send_duration_secondshistogram - Consider reducing batch size or increasing flush interval
- For Elasticsearch: ensure bulk API is not rate-limited
Events dropped¶
- Monitor
mazevault_log_stream_events_dropped_total - If consistently dropping, increase channel buffer or add more destinations with lower latency
Files Reference¶
siem-rules/
├── elastic/
│ ├── mazevault-detection-rules.ndjson # Kibana import (17 rules)
│ ├── mazevault-ilm-policy.json # ILM lifecycle policy
│ └── mazevault-index-template.json # Index template with mappings
├── splunk/
│ ├── savedsearches.conf # Correlation searches (15 rules)
│ ├── props.conf # Source type definition
│ └── transforms.conf # Field extractions
├── sentinel/
│ ├── mazevault-sentinel-rules.json # ARM template (7 analytic rules)
│ └── mazevault-hunting-queries.yaml # KQL hunting queries (6 queries)
└── qradar/
├── mazevault-qradar-rules.xml # Custom rules (8 rules)
└── mazevault-log-source-extension.xml # DSM / log source type definition