Skip to main content

Overview

Audit Logs in Bifrost Enterprise record administrative activity so operators can review who changed what, when it happened, and which resource was affected. Audit log entries can be signed with an HMAC key, retained for a configurable number of days, viewed in the dashboard, and exported for downstream review.
Audit logs screen

Key Features


Configuration

Configuration Fields

Viewing Audit Logs

Open Governance > Audit Logs in the Bifrost dashboard. The table shows: You can search by initiator, target, IP, or path, and filter by action, outcome, start date, and end date.

Exporting Audit Logs

Users with AuditLogs:Download permission can export the currently filtered audit log results from the dashboard. Supported export formats:

Archiving to Object Storage

By default, audit events live only in the database, which is the source of truth for everything you see in the dashboard (viewing, filtering, HMAC verification, and export). Databases, however, are not ideal for multi-year compliance retention or off-box durability. When you configure object_storage, Bifrost additionally writes every audit event to an S3-compatible bucket (S3, GCS, MinIO, R2) as it is recorded. This is a dual-write, not an offload: the full event goes to both the database and object storage, so each store holds a complete, independent copy.
This differs from Log Exports, where object storage offloads the heavy request/response payload out of the database. For audit logs, object storage is a complete mirror — the database is never trimmed of data by enabling it.

Database vs. Object Storage

Because the two are decoupled, the archive can outlive the database: once retention_days deletes an old row, its object in the bucket is left untouched. Use S3 Object Lock / WORM and bucket lifecycle rules to govern how long the archive is kept.

How Archival Works

Audit events are written in small batches (buffered and flushed together). Each flushed batch becomes one gzipped JSON Lines object, written after the database write succeeds. The object key is time-partitioned:
For example, with "prefix": "acme-prod" and "compress": true:
Archival is best-effort, not guaranteed. The upload happens synchronously within the flush and audit batches are never dropped under back-pressure. If an upload fails, the error is logged but the flush still succeeds — the database already holds the record and remains the source of truth, but that batch will be missing from the bucket, and nothing blocks request handling. Treat object storage as a complete compliance mirror only if you monitor upload failures and replay any missed batches; the database, not the archive, is authoritative.

Configuration

Object Storage Fields

You can point audit archival at its own dedicated (ideally write-once/locked) bucket, or reuse the same bucket as request logs_store with a distinct prefix. The audit-logs/ path segment keeps the two from overlapping.
If the object store cannot be reached at startup, Bifrost logs the error and continues without archival — audit logging to the database is never blocked by object-storage problems.

API Reference

For the exact request and response contract, see the API Reference.