StellaOps Authority Audit Events

Audience: SOC/SecOps, Authority Core, compliance and evidence engineers. Scope: The Authority audit-event contract, its data classifications and event catalogue, PostgreSQL persistence, and the EvidenceLocker EU regulatory audit catalogue.

Related: Authority threat model · Authority scopes · EU regulatory audit-event contract (../contracts/eu-regulatory-audit-events-v1.md).

StellaOps Authority emits structured audit records for every credential flow and bootstrap operation. The goal is to provide deterministic, privacy-aware telemetry that can be persisted offline and replayed for incident response without leaking credentials.

Contract

Audit events share the StellaOps.Cryptography.Audit.AuthEventRecord contract (defined in src/__Libraries/StellaOps.Cryptography/Audit/AuthEventRecord.cs). Key fields:

Records are written through the IAuthEventSink interface; the Authority host’s implementation is AuthorityAuditSink (src/Authority/StellaOps.Authority/StellaOps.Authority/Audit/AuthorityAuditSink.cs).

Data Classifications

Every string value uses ClassifiedString to assign a data classification:

Downstream log sinks and persistence layers can inspect classifications to redact or separate PII before export.

Event Naming

Event names follow authority.<surface>.<action> dotted notation. The set below is the catalog of EventType values actually emitted to AuthEventRecord as of this writing (grouped by surface); it is not necessarily exhaustive across future releases. Note: OpenTelemetry activity/span names such as authority.token.validate_access, authority.token.handle_password_grant, authority.token.persist, and authority.token.revoke are tracing names, not audit EventType values, and are not persisted as audit records.

Token grants and tampering (OpenIddict handlers):

DPoP sender-constraint validation (DpopHandlers):

Bootstrap and invites:

Delegation, AI, and deprecation:

Resource authorization (StellaOpsScopeAuthorizationHandler):

Standard plugin (StandardCredentialAuditLogger):

Console read endpoints (ConsoleEndpointExtensions):

Console Admin endpoints (ConsoleAdminEndpointExtensions, ConsoleBrandingEndpointExtensions):

Future additions should preserve the authority.<surface>.<action> pattern to keep filtering deterministic.

Note: break-glass session events use a separate BreakGlassAuditEvent contract (BreakGlassSessionManager), not AuthEventRecord, and are out of scope for the fields described above.

Persistence

The Authority host (AuthorityAuditSink) converts audit records into AuthorityLoginAttemptDocument rows for PostgreSQL persistence (schema authority). The mapped document:

Tenant compliance-profile enrichment

When a tenant compliance-profile provider is registered and the record carries a known tenant, AuthorityAuditSink enriches the record with tenant.compliance_profile.* properties before persistence (schema version, presence flag, canonical SHA-256 hash, LEI, jurisdiction, responsibility locus, regulated regimes, and NIS2/CRA flags). Enrichment is skipped when the record already carries compliance-profile properties or the tenant is not found.

Timeline dual-write

In addition to the PostgreSQL row, AuthorityAuditSink performs a best-effort dual-write to the Timeline unified audit sink via IAuditEventEmitter (AuditEventPayload, Module = "authority", Action = EventType). This write is fire-and-forget: any failure is logged and never affects the local write or the calling endpoint. Severity is derived from the outcome (Failure/LockedOutwarning, Errorerror, otherwise info).

When exporting to external SIEMs, honour the ClassifiedString.Classification tag (None / Personal / Sensitive) to avoid shipping PII into restricted environments.

EvidenceLocker EU Regulatory Audit Events

EvidenceLocker owns the EU regulatory audit event catalog used by CRA, NIS2, DORA, RoI, TLPT, and standards-mapping artifacts. The authoritative contract is docs/contracts/eu-regulatory-audit-events-v1.md.

Catalog names (from RegulatoryAuditEventNames in src/EvidenceLocker/StellaOps.EvidenceLocker/StellaOps.EvidenceLocker.Core/Regulatory/RegulatoryAuditEvent.cs):

Each event carries tenant id, actorKind (stella-manufacturer or customer-operator), regime, artifact type, artifact hash, schema/taxonomy pin ids, signer key/fingerprint where applicable, approver id where applicable, and prior/new value hashes for overrides. Classified properties are redacted before persistence: personal values become SHA-256 hashes and sensitive values become [redacted].