189 lines
5.2 KiB
Markdown
189 lines
5.2 KiB
Markdown
# SIEM Integration Templates
|
|
|
|
DMARQ publishes a versioned SIEM event envelope for security analytics
|
|
pipelines. Use it when forwarding webhook events or API-derived posture data to
|
|
Splunk, Elastic, Microsoft Sentinel, or another JSON-capable SIEM.
|
|
|
|
## Template Endpoint
|
|
|
|
Administrators can fetch the current template bundle from:
|
|
|
|
```http
|
|
GET /api/v1/integrations/siem/templates
|
|
```
|
|
|
|
The response contains:
|
|
|
|
- `template_version`: release date for the template bundle.
|
|
- `schema_version`: stable event envelope identifier, currently `dmarq.siem.event.v1`.
|
|
- `event_schema`: JSON Schema for normalized SIEM events.
|
|
- `event_examples`: source, compliance-drop, and alert examples.
|
|
- `ingestion_examples`: Splunk HEC, Elastic ECS, and Microsoft Sentinel shapes.
|
|
- `config_templates`: endpoint and mapping hints for common SIEM ingestion paths.
|
|
- `redaction_guidance`: sensitive-field handling rules.
|
|
|
|
## Stable Event Envelope
|
|
|
|
Every normalized SIEM event uses the same envelope:
|
|
|
|
```json
|
|
{
|
|
"schema_version": "dmarq.siem.event.v1",
|
|
"event_type": "dmarq.compliance.drop",
|
|
"event_id": "dmarq-compliance-drop-20260523-example-com",
|
|
"event_time": "2026-05-23T16:35:00Z",
|
|
"severity": "high",
|
|
"source": {
|
|
"application": "dmarq",
|
|
"instance": "dmarq-preprod",
|
|
"environment": "preprod"
|
|
},
|
|
"entity": {
|
|
"domain": "example.com",
|
|
"sender_ip": null,
|
|
"sender_org": null,
|
|
"reporter": null,
|
|
"alert_rule": "compliance_drop"
|
|
},
|
|
"metrics": {
|
|
"message_count": 1280,
|
|
"aligned_count": 914,
|
|
"failed_count": 366,
|
|
"compliance_rate": 71.41,
|
|
"previous_compliance_rate": 94.8,
|
|
"drop_points": 23.39,
|
|
"missing_days": null
|
|
},
|
|
"alert": {
|
|
"title": "DMARC compliance dropped for example.com",
|
|
"detail": "Compliance fell by 23.39 percentage points in the current window.",
|
|
"status": "active"
|
|
},
|
|
"redaction": {
|
|
"pii_redacted": true,
|
|
"secret_fields_removed": true,
|
|
"raw_report_included": false,
|
|
"notes": "Contains aggregate counts and posture metadata only."
|
|
},
|
|
"links": {
|
|
"domain_url": "https://dmarq.example/domains/example.com",
|
|
"report_url": "https://dmarq.example/domains/example.com/reports"
|
|
},
|
|
"tags": ["email-security", "dmarc", "compliance-drop"],
|
|
"extensions": {}
|
|
}
|
|
```
|
|
|
|
Supported normalized event types are:
|
|
|
|
- `dmarq.report.imported`
|
|
- `dmarq.sender.new`
|
|
- `dmarq.compliance.drop`
|
|
- `dmarq.reports.missing`
|
|
- `dmarq.alert.created`
|
|
|
|
## Splunk HEC
|
|
|
|
Use the webhook URL for a relay or directly for Splunk HEC when your network
|
|
allows it:
|
|
|
|
```text
|
|
https://splunk.example:8088/services/collector/event
|
|
```
|
|
|
|
Send the normalized event as the `event` field:
|
|
|
|
```json
|
|
{
|
|
"time": 1779554100,
|
|
"host": "dmarq-preprod",
|
|
"source": "dmarq:webhook",
|
|
"sourcetype": "_json",
|
|
"index": "email_security",
|
|
"event": {
|
|
"schema_version": "dmarq.siem.event.v1",
|
|
"event_type": "dmarq.compliance.drop",
|
|
"event_id": "dmarq-compliance-drop-20260523-example-com"
|
|
}
|
|
}
|
|
```
|
|
|
|
Keep the HEC token in Splunk, a receiving proxy, or a secret manager. Do not
|
|
store Splunk credentials in the DMARQ webhook URL.
|
|
|
|
## Elastic ECS
|
|
|
|
For Elastic or Logstash, keep the full DMARQ event under `dmarq` and map common
|
|
fields to ECS:
|
|
|
|
```json
|
|
{
|
|
"@timestamp": "2026-05-23T16:35:00Z",
|
|
"ecs.version": "8.11.0",
|
|
"event.kind": "alert",
|
|
"event.category": ["email"],
|
|
"event.type": ["info"],
|
|
"event.dataset": "dmarq.siem",
|
|
"observer.vendor": "DMARQ",
|
|
"observer.product": "DMARQ",
|
|
"rule.name": "compliance_drop",
|
|
"host.name": "dmarq-preprod",
|
|
"dmarq": {
|
|
"schema_version": "dmarq.siem.event.v1",
|
|
"event_type": "dmarq.compliance.drop",
|
|
"event_id": "dmarq-compliance-drop-20260523-example-com"
|
|
}
|
|
}
|
|
```
|
|
|
|
Index into a dedicated dataset such as
|
|
`logs-dmarq.email_security-default` so retention, dashboards, and alerts can be
|
|
managed independently from application logs.
|
|
|
|
## Microsoft Sentinel
|
|
|
|
For Sentinel custom logs, use a protected relay such as Azure Function or Logic
|
|
App to add Azure credentials and forward the JSON body to a Data Collection
|
|
Rule stream:
|
|
|
|
```json
|
|
[
|
|
{
|
|
"TimeGenerated": "2026-05-23T16:35:00Z",
|
|
"EventType": "dmarq.compliance.drop",
|
|
"Domain": "example.com",
|
|
"Severity": "high",
|
|
"ComplianceRate": 71.41,
|
|
"PreviousComplianceRate": 94.8,
|
|
"DropPoints": 23.39,
|
|
"DmarqEvent": {
|
|
"schema_version": "dmarq.siem.event.v1",
|
|
"event_type": "dmarq.compliance.drop",
|
|
"event_id": "dmarq-compliance-drop-20260523-example-com"
|
|
}
|
|
}
|
|
]
|
|
```
|
|
|
|
Map `TimeGenerated` from `event_time` so KQL queries and scheduled analytics
|
|
rules use DMARQ's event time instead of relay receipt time.
|
|
|
|
## Redaction Guidance
|
|
|
|
Forward:
|
|
|
|
- Aggregate counts and compliance rates.
|
|
- Monitored domains, sender IPs, reporter names, alert rule names, and event IDs.
|
|
- Links back to DMARQ pages when the receiving SIEM user is authorized to open them.
|
|
|
|
Do not forward:
|
|
|
|
- Raw aggregate report XML.
|
|
- Raw RFC 822 mail content or forensic message bodies.
|
|
- Mailbox credentials, API tokens, webhook signing secrets, authorization headers, or SIEM ingest tokens.
|
|
- Recipient local-parts, authentication headers, and forensic identifiers unless a separate privacy review approves them.
|
|
|
|
Use `event_id` or `X-DMARQ-Idempotency-Key` for deduplication. Avoid deriving
|
|
deduplication hashes from raw payloads that may accidentally include sensitive
|
|
fields.
|