Skip to content

Compliance

Brutor can stamp every governed request with compliance framework tags and turn its audit trail into auditor-ready evidence. Tagging is opt-in per tenant: until you declare a compliance profile, no tags are written.

The supported framework keys are:

Key Framework What it evidences
soc2 SOC 2 Common Criteria Access control, authorization, monitoring, capacity controls
eu_ai_act EU AI Act Per-resource-group risk-tier classification of AI usage
hipaa HIPAA Access to PHI-handling resources, plus detected PHI in traffic
gdpr_art_30 GDPR Article 30 Records of Processing Activities (RoPA)
iso_42001 ISO/IEC 42001 AI management system activity

Two sources feed two trails. AI traffic writes the proxy log: who called, which model or tool answered, the decision, tokens and cost, the guardrail or policy that fired, plus compliance tags for declared frameworks. Admin and operator action writes the change trail: every resource carrying its author, editor and version, plus a dedicated operations log for destructive console actions. The proxy log is tamper-evident — each row hashes onto the previous and the writer Ed25519-signs each flushed batch head into a checkpoint. Both trails roll up into the AI Asset Registry, ISO/IEC 42001 coverage, EU AI Act risk classification and GDPR, SOC 2 and HIPAA views, and export as an evidence pack or to S3, Splunk HEC or a JSONL webhook.

The profile is a per-tenant list of frameworks. An empty list (the default) disables tagging entirely — the engine short-circuits and compliance_tags stays NULL on every log row.

Compliance frameworks on the tenant profile

Terminal window
curl -X PATCH http://localhost:5050/v1/admin/compliance/profile \
-H "Authorization: Bearer $ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{"frameworks": ["soc2", "eu_ai_act", "hipaa", "gdpr_art_30"]}'
{
"frameworks": ["soc2", "eu_ai_act", "hipaa", "gdpr_art_30"],
"known_frameworks": ["eu_ai_act", "gdpr_art_30", "hipaa", "iso_42001", "soc2"]
}

Read the current profile with GET /v1/admin/compliance/profile.

Two frameworks need per-resource-group classification, set on the group itself (regular resource-group PATCH):

  • eu_ai_act_risk_tier — one of minimal, limited, high, unacceptable (or null to clear)
  • phi_resourcetrue if the group handles Protected Health Information (only meaningful when the tenant profile includes hipaa)
Terminal window
curl -X PATCH http://localhost:5050/v1/admin/resource-groups/{group_id} \
-H "Authorization: Bearer $ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{"eu_ai_act_risk_tier": "high", "phi_resource": true}'

Omitting a field leaves it unchanged; sending null for eu_ai_act_risk_tier clears the tier.

When a request executes, the tagging engine derives the applicable tags from the tenant profile, the active resource group’s classification, and the governance outcome, then stamps them on the audit row (compliance_tags):

Tag Fires when
soc2.cc6.1 Logical access controls exercised
soc2.cc6.6 Authorization decision
soc2.cc6.7 Data movement control (e.g. residency block)
soc2.cc7.1 Capacity / rate-limit control
soc2.cc7.2 System monitoring event (e.g. guardrail block)
eu_ai_act.minimal / .limited / .high / .unacceptable Request ran in an RG with that risk tier
hipaa.phi PHI detected in the traffic itself
hipaa.rg_marked Request ran in an RG marked phi_resource: true
gdpr_art_30 Processing-activity record for RoPA
iso_42001 AI management system activity

The distinction between NULL and [] is preserved deliberately: NULL means the tagging engine never ran (no profile), [] means it ran and found no applicable regime — different audit states.

All report endpoints live under /v1/admin/compliance and accept an optional time window via from and to query params (ISO-8601, e.g. 2026-06-01T00:00:00Z):

Endpoint Returns
GET /dashboard Per-framework tag counts vs the declared profile — the at-a-glance posture view
GET /gdpr/article-30?format=json|csv Records of Processing Activities export
GET /eu-ai-act/risk-classification Per-RG declared tiers + request counts per tier
GET /soc2/control-coverage Per-control (CC6.1–CC7.2) event counts with samples
GET /hipaa/phi-access?format=json|csv Every call tagged hipaa.phi or hipaa.rg_marked
GET /iso-42001/activity AI management system activity summary

ISO/IEC 42001 control coverage and Statement of Applicability

Example — pull the SOC 2 control coverage for June:

Terminal window
curl "http://localhost:5050/v1/admin/compliance/soc2/control-coverage?from=2026-06-01T00:00:00Z&to=2026-07-01T00:00:00Z" \
-H "Authorization: Bearer $ADMIN_TOKEN"
{
"from": "2026-06-01T00:00:00+00:00",
"to": "2026-07-01T00:00:00+00:00",
"controls": {
"soc2.cc6.1": { "count": 18423 },
"soc2.cc6.6": { "count": 18423 },
"soc2.cc6.7": { "count": 12 },
"soc2.cc7.1": { "count": 87 },
"soc2.cc7.2": { "count": 34 }
}
}

CSV variants (?format=csv) stream a downloadable file — hand it straight to your auditor.

  1. Declare the tenant profile (PATCH /v1/admin/compliance/profile) with the frameworks you’re audited against.

  2. If eu_ai_act is in the profile, set eu_ai_act_risk_tier on every resource group that fronts an AI use case. If hipaa is in the profile, mark PHI-handling groups with phi_resource: true.

  3. Let traffic flow for a period, then check GET /v1/admin/compliance/dashboard — every declared framework should show non-zero tag counts.

  4. Wire the CSV exports into your evidence-collection cadence.

Compliance tags are queryable in the proxy log explorer too (filter by compliance_tags), so you can drill from a report number to the underlying requests.