Skip to content
Audit logs

Audit logs

Thalassa Cloud records an audit trail of API activity and security-sensitive operations in your organisation. Audit logs help you investigate changes, trace who did what, monitor authentication failures, and meet compliance requirements.

Audit logging is enabled by default for every organisation. Entries are read-only — they cannot be modified or deleted through the API. Logs are retained for a configurable period, then removed automatically.

Availability

Audit logs are a core platform feature and available for all services and platform API’s.

View logs in the console or via the tenant API at /v1/audit. Listing and reading audit logs requires the audit_log IAM permission (list / read).

What is logged

Platform API activity

Organisation-scoped API calls produce an audit entry. Each entry typically includes:

FieldDescription
eventIDUnique identifier for the event
createdAtTimestamp (UTC)
actionHTTP method (GET, POST, PUT, DELETE, …) or a service-specific action name
resourceTypeAPI resource type (for example cloud_vpc, kubernetes_cluster, dns_zone)
resourceIdentityIdentity of the affected resource, when applicable
descriptionHuman-readable summary when provided by the service
user / serviceAccount / clientThe principal that performed the action
impersonatorIdentitySupport or admin impersonation, when applicable
projectIdActive project context, when set on service-specific entries
contextRequest metadata (see below)

Request context (context object) for API activity:

Context keyDescription
client_ipSource IP address
country_codeISO country derived from client IP (when available)
user_agentClient user agent
method, path, urlHTTP request details
statusHTTP response status code
durationRequest processing time
credentials_id, credentials_typeAccess credential used for the request, when applicable
headersSafe request headers only (User-Agent, Referer, X-Forwarded-For, Content-Type, Accept, X-Request-Id, …)

Enhanced audit for sensitive services

Some services write additional dedicated entries with richer, security-focused context (alongside the generic HTTP audit entry):

KMS crypto operations

ActionOperation
kms.encryptEncrypt data
kms.decryptDecrypt data
kms.sign / kms.verifySign or verify data
kms.hmac / kms.verify_hmacHMAC operations
kms.rotate / kms.rotate.scheduledManual or scheduled key rotation
kms.exportExport key material

resourceType: kms_key. Context includes region, key slug, key type, outcome, and sizes — never plaintext or ciphertext.

Filter with action=kms.encrypt,kms.decrypt,… or resourceType=kms_key.

See KMS audit logging for monitoring guidance and field details.

Secrets Manager

ActionOperation
secrets.createCreate a secret
secrets.get_valueRead secret payload
secrets.put_valueWrite a new secret version
secrets.update_policyUpdate access policy
secrets.destroy_versionDestroy a version
secrets.deleteDelete a secret

resourceType: secret. The resource identity is the canonical secret path (for example /app/production/db/password).

Metadata-only operations (list, browse, get secret metadata without revealing the value) produce only the generic HTTP audit entry.

Get-value and put-value operations also emit underlying kms.decrypt / kms.encrypt entries for the bound KMS key.

See Secrets Manager audit logging for field details and dual KMS correlation.

Authentication events

OAuth and token flows log dedicated entries for successful and failed client credential grants (oidc/client_credentials, oidc/client_credentials_failed), token exchanges, and related security events. These feed the failed-auth and security report endpoints.

Retention

SettingDefaultDescription
auditLogRetentionDays14 daysHow long audit entries are kept per organisation

Expired entries are permanently deleted by a daily cleanup job (02:00 UTC). Retention is configured on organisation settings — contact your account team if you need a longer retention window.

Viewing audit logs

List and search

GET /v1/audit returns a paginated list, newest first.

Query parameterDescription
pagePage number (default 0)
limitResults per page (default 100)
searchTextSearch in description (case-insensitive)
userIdentityFilter by user
impersonatorIdentityFilter by impersonating user
serviceAccountFilter by service account identity
actionComma-separated actions (for example POST,DELETE or kms.decrypt)
resourceTypeComma-separated resource types (for example cloud_vpc,dns_zone)
resourceIdentityFilter by specific resource identity
includeSystemServicesInclude OIDC client / internal service entries (true / false)

Get by event ID

GET /v1/audit/{eventId} returns the full entry for a single event.

Example audit entry

{
  "eventID": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "createdAt": "2026-06-08T14:32:01Z",
  "action": "POST",
  "resourceType": "cloud_vpc",
  "resourceIdentity": "vpc-abc123",
  "userIdentity": "user-xyz",
  "organizationIdentity": "acme-corp",
  "context": {
    "client_ip": "203.0.113.42",
    "country_code": "NL",
    "method": "POST",
    "path": "/v1/vpcs",
    "status": "201",
    "duration": "45ms",
    "user_agent": "Thalassa-CLI/1.2.0"
  }
}

For bulk export from the CLI, see Exporting audit logs.

Security analytics

Beyond raw log search, the audit API provides aggregated security views. All endpoints require audit_loglist permission.

EndpointPurpose
GET /v1/audit/security-summaryHigh-level metrics: unique users, unique IPs, failed auth count, total events, last activity
GET /v1/audit/failed-authRecent failed authentication attempts (HTTP 401/403), with client IP and user agent
GET /v1/audit/user-activityPer-user analytics: last seen, total actions, unique IPs, resource types touched
GET /v1/audit/client-ipsDistinct client IP addresses seen in audit logs (with optional filters)

Pre-generated security reports

The platform generates security reports in the background every six hours (rolling 30-day window). Fetch the latest report by type:

GET /v1/audit/reports/{reportType}

List available reports: GET /v1/audit/reports

Report typeContents
summaryAggregated security overview
user_activityUser activity breakdown
failed_authFailed authentication analysis
client_ipsClient IP usage patterns
api_trendsDaily and hourly API usage trends
peak_timesPeak usage hours and days
suspicious_activityMultiple failed logins, unusual IPs, rapid request patterns
resource_activityTop resources, actions, and access patterns
access_credentialsCredential inventory, expiry, and unused credentials
token_exchangesFederated token exchange success and failure rates
federated_identitiesFederated identity usage and expiry
rbac_permissionsRole bindings, wildcard permissions, and permission usage

Reports are point-in-time snapshots. Use live audit log queries for real-time investigation.

Access control

IAM resource: audit_log

Policy nameSlugPermissionsTypical use
(included in org admin)org-adminFull org access including audit logsOrganisation administrators
(included in org auditor)org-auditorread, list on audit logsRead-only compliance and security review
(included in IAM read)iam-read-accessread, list on audit logsIAM team visibility
admin:alladminAll permissions on all resourcesOrganisation owner
ActionPermission
List audit logs, security summaries, reportsaudit_loglist
Get single audit log entryaudit_logread

Bind via organisation roles or project IAM policies. See Default IAM policies for the full built-in catalogue.

Audit logs are organisation-scoped — project IAM policies do not isolate audit visibility per project today, though individual entries may include a projectId when the underlying operation was project-scoped.

Kubernetes cluster audit logs

Kubernetes clusters support a separate control plane audit log profile (none, basic, or advanced) configured on the cluster itself. This controls Kubernetes API server audit logging inside the cluster — it is independent of platform audit logs described on this page.

Configure auditLogProfile when creating or updating a cluster. Platform audit logs still record Thalassa API calls that manage clusters (create, update, delete, kubeconfig download, etc.).

Billing

Audit log storage and API access are included with the platform at no extra charge. You are not billed per audit event or per query.

Longer retention storage for audit logs than the default may be charged.

Limits and behaviour

TopicDetail
ImmutabilityAudit entries cannot be updated or deleted via the API
RetentionDefault 14 days; older entries are permanently purged
PaginationDefault 100 entries per page
Actor typesUsers, service accounts, OIDC clients, and impersonated sessions
Geo enrichmentCountry code added from client IP when geolocation lookup succeeds
Write pathAsynchronous batched writes — API responses are not blocked by audit persistence
API base path/v1/audit

Common investigation workflows

Who deleted a resource? Filter by resourceIdentity and action=DELETE, or search resourceType for the resource kind.

Failed logins or credential abuse Use GET /v1/audit/failed-auth or the failed_auth security report.

KMS or secrets access Filter action prefix kms. or secrets., or resourceType kms_key / secret.

User activity review Use GET /v1/audit/user-activity?userIdentity=… or the user_activity report.

Compliance export Paginate GET /v1/audit with filters and export results from the console or your own integration. Plan exports within your retention window. See Exporting audit logs for CLI-based export.

Related documentation