Skip to content

Audit

DRP records user-initiated operations as structured audit entries. Audit entries capture who performed an action, what object was affected, when it occurred, and what changed (as a JSON patch diff). This enables administrators to meet compliance requirements, investigate incidents, and trace configuration changes to specific users.

Auditor Plugin

The auditor plugin subscribes to the DRP event stream and records user-principal events as audit_entries objects. Each audit entry captures six fields:

Field Description
audit_entry/type Object type affected (e.g., machines, profiles, params)
audit_entry/action Action performed (e.g., create, update, delete)
audit_entry/key Identifier of the affected object
audit_entry/principal Authenticated user who performed the action
audit_entry/time Timestamp of the event
audit_entry/patch JSON patch diff between the original and modified object

The auditor captures all events where the principal matches a user account, excluding internal service accounts (docker-context, racks) and system event types (websocket, connections, audit_entries, activities). Audit entry IDs are formatted as <type>.<action>.<key>.<nanosecond-timestamp>.

Warning

The auditor plugin is deprecated in favor of the event-router plugin, which provides more flexible event filtering and routing. New deployments should use event-router. Existing audit entries remain accessible in the object store.

Querying Audit Entries

Audit entries are stored as DRP audit_entries store objects and can be queried via drpcli:

Bash
# List all audit entries (may be large)
drpcli extended list audit_entries

# Show audit entries for a specific machine
drpcli extended list audit_entries | jq '[.[] | select(.Params["audit_entry/key"] == "<machine-uuid>")]'

# Show recent user actions (last 50 entries, sorted by time)
drpcli extended list audit_entries | jq 'sort_by(.Params["audit_entry/time"]) | reverse | .[0:50]'

# Show all delete actions
drpcli extended list audit_entries | jq '[.[] | select(.Params["audit_entry/action"] == "delete")]'

Event Router as Audit Replacement

The event-router plugin provides a superset of auditor functionality. Rather than storing audit entries as DRP objects, event-router can route events to external systems (syslog, webhooks, Slack, PagerDuty) for centralized audit storage. This is preferred for production deployments where audit data volume may be large or where integration with a SIEM is required.


For hardware-level auditing via Redfish, see Audit Framework.