Documentation

Audit event catalogue

Every audit action emitted by the codebase. Sourced from the literals in internal/api/*.go and the proxy server. Each row in the audit table carries:

  • at — UTC timestamp.
  • action — string from the table below.
  • user_id — empty for anonymous proxy events.
  • backend, bucket, key — when applicable.
  • statusok, error, or a vendor-specific status string.
  • detail — JSON blob with action-specific fields.

#Authentication

ActionEmitted byNotes
auth.loginPOST /auth/login/local, OIDC callbackStatus ok on success, error for any failure.
auth.logoutPOST /auth/logoutAlways ok.

#Backends (UI-managed endpoints)

ActionEmitted byNotes
backend.createPOST /api/admin/backendsNew endpoint saved.
backend.updatePATCH /api/admin/backends/{bid}Endpoint edited.
backend.deleteDELETE /api/admin/backends/{bid}Endpoint removed.
backend.testPOST /api/admin/backends/testTest button clicked.

#Bucket settings

ActionEmitted byNotes
bucket.versioning.setPUT .../versioning
bucket.cors.setPUT .../cors
bucket.policy.setPUT .../policy
bucket.policy.deleteDELETE .../policy
bucket.lifecycle.setPUT .../lifecycle
bucket.size_tracking.setPUT .../size-tracking

#Quotas

ActionEmitted byNotes
quota.setPUT .../quota
quota.deleteDELETE .../quota

#Object operations

ActionEmitted byNotes
object.uploadPOST .../object
object.deleteDELETE .../object
object.bulk_deletePOST .../objects/deleteOne row per request, with the keys in detail.
object.delete_prefixPOST .../objects/delete-prefixRecursive.
object.copyPOST .../object/copy (same backend)
object.transferPOST .../object/copy (cross-backend)
object.copy_prefixPOST .../objects/copy-prefix (same backend)
object.transfer_prefixPOST .../objects/copy-prefix (cross-backend)

Note: tag and metadata writes are intentionally not audited per-call; they're surfaced in the dashboard's request logs.

#Shares

ActionEmitted byNotes
share.createPOST /api/shares
share.revokeDELETE /api/shares/{id}
share.accessGET /s/{code}/info, POST /s/{code}/unlock, GET /s/{code}/rawOne row per request. Detail carries the result code.

#Embedded S3 proxy

Action patternSource
s3.proxy.<operation>Every proxy request. <operation> is lower-cased: s3.proxy.getobject, s3.proxy.putobject, s3.proxy.headbucket, s3.proxy.listbuckets, s3.proxy.listobjects, s3.proxy.deleteobject, s3.proxy.deleteobjects, s3.proxy.copyobject, s3.proxy.createmultipartupload, s3.proxy.uploadpart, s3.proxy.completemultipartupload, s3.proxy.abortmultipart, s3.proxy.listmultipartuploads, s3.proxy.listparts, s3.proxy.headobject, s3.proxy.unknown.

The detail JSON includes access_key_id, auth_mode (signed / anonymous), result (ok, auth_failure, scope_violation, quota_exceeded, etc.).

#Sampling

Successful read-shaped proxy events (GET / HEAD with 2xx / 3xx) are recorded only at rate audit.sampling.proxy_success_read_rate (default 0.0). Writes, deletes, and any non-2xx response are always recorded.

#Source

  • API handlers: internal/api/*.go (every audit.Event{Action: ...}).
  • Proxy: internal/s3proxy/server.go::255 and logging.go.
  • Recorder: internal/audit/.