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.

Authority does not currently implement a break-glass session or break-glass audit event stream. The unregistered design that defined those contracts was removed in Sprint 20260731_003.

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].