Audit Log

Audit logs are records of what happens inside your GoodData environment. These logs help you track who did what, when they did it, how they did it, and what they changed.

The audit log can support you in several critical areas:

  • Security and fraud prevention – Monitor unauthorized or suspicious activity.
  • Compliance and legal requirements – Meet GDPR, HIPAA, or SOC2 standards.
  • Troubleshooting and support – Quickly trace issues and understand changes that impact your setup.

Note

The Audit Log feature is available only as part of the Enterprise tier.

Audit Log Scope and AI-Initiated Actions

The audit log records events that GoodData considers relevant for security investigations, data access, and changes to the solution. It is not intended to contain every individual interaction with the platform.

For example, searching for a dashboard or visualization through the user interface, API, or AI Assistant does not create an audit log entry unless the action also triggers one of the events listed in the Audit Events section.

AI Assistant does not grant users additional permissions. If the AI Assistant performs an action on behalf of a user and the same action is covered by the audit log when performed directly through the UI or API, GoodData records the same audit event. Depending on the action, additional metadata may distinguish whether the action was initiated through the AI Assistant, for example by including an agent identifier.

Diagnostic identifiers such as traceId or X-GDC-TRACE-ID are used for internal troubleshooting. They are not intended as stable end-to-end audit correlation identifiers.

Setting up Audit Logging

To deliver audit logs to you, GoodData uses AWS Cloud services as the supported storage platform. GoodData generates the audit log data and sends it through the Audit Log Event Forwarder component to an Amazon S3 bucket that you provide and control. This setup ensures that you have full ownership of your audit data and can integrate it with your internal systems (such as SIEM tools).

Diagram illustrating how GoodData delivers audit logs to your environment. GoodData generates the audit log data and sends it through the Audit Log Event Forwarder. The logs are then delivered to an AWS S3 bucket owned by your organization. From there, you can connect the bucket to your SIEM tool to integrate the logs with your internal monitoring systems.

Follow the steps below to get started:

  1. Using the following definition, create or update your S3 bucket policy to allow GoodData to deliver audit log files.
{
  "Version": "2012-10-17",
  "Statement": [
      {
          "Sid": "GD-Cloud-auditlog-access",
          "Effect": "Allow",
          "Principal": {
              "AWS": "arn:aws:iam::772547432422:root"
          },
          "Action": [
              "s3:PutObject",
              "s3:GetBucketLocation",
              "s3:AbortMultipartUpload",
              "s3:ListBucket"
          ],
          "Resource": [
              "arn:aws:s3:::<bucket-name>",
              "arn:aws:s3:::<bucket-name>/*"
          ]
      }
  ]
}
  1. Once your bucket is ready, provide our Support team with the bucket-name (as defined in the previous step). We will take care of the remaining setup and configure the system to write audit logs directly to your specified S3 bucket.

  2. After the setup, the logs will begin appearing in your S3 bucket under the auditlog/default/<orgId> path. From there, you can integrate them into your Security Information and Event Management (SIEM) system for ongoing monitoring, alerting, and incident response.

Example:

$ aws s3 ls s3://<your-bucket-name>/auditlog/default/<your-org-id>/ --profile <your-profile>
YYYY-MM-DD HH:MM:SS      24850 12345678901234.json
YYYY-MM-DD HH:MM:SS      24850 12345678901285.json

Audit Log Entries

Each audit log entry is saved in JSON format and includes a set of mandatory fields, which are standardized and present in every log entry, regardless of the event type:

FieldDescription
eventNameStandard name of the event
categoryUidCategory based on OCSF (Open Cybersecurity Schema Framework)
classUidClass based on OCSF
descriptionA short, human-readable summary of the event
tsTime the event happened (timestamp), e.g. 2023-01-20T18:55:32.466Z
orgIdID of the organization
workspaceIdID of the workspace (if applicable)
userIdWho triggered the event (user ID, service, or token)
targetWhat was affected (e.g. dashboard, user, group)
sourceIP address where the event came from (127.0.0.1 is used for events initiated by internal components)
errorCodeIf something went wrong (e.g. Access Denied)
sessionContextTypeType of session: JWT, API Token, OIDC, or automation
sessionContextIdentifierToken or automation identifier
typeType of message. The default value is audit.

Note

Depending on the eventName, audit entries may include additional JSON fields specific to that event type. These extra fields provide more context for that particular action and are not standardized across all events.

Example Audit Log Entry:

{
  "eventName": "user_login",
  "categoryUid": "3",
  "classUid": "3002",
  "description": "User XY logged in",
  "ts": "2023-01-20T18:55:32.466Z",
  "orgId": "org_abc123",
  "workspaceId": "workspace_xyz456",
  "userId": "user_XY",
  "target": "organization_setting_XY",
  "source": "1.2.3.4",
  "sessionContextType": "OIDC",
  "sessionContextIdentifier": "token_1234",
  "success": true,
  "type": "audit"
}

Audit Events

Below is a complete list of all audit log events, including their meanings, categories, and classes. The categories and classes follow the Open Cybersecurity Schema Framework (OCSF) where applicable.

EventMeaningCategoryClassAdditional Details
DATA_ACCESSUser accessed workspace data66005target = dashboard/visualization IDs
DATA_EXPORT_INITIATEUser started a data export66005exportFormat, exportId
DATA_EXPORT_RETRIEVEUser downloaded exported data66005exportId
EXECUTION_INITIATEAn AFM execution was initiated.66005
EXECUTION_RETRIEVEThe results of an AFM execution were retrieved.66005
CSV_DATA_UPLOADData uploaded via CSV66005target = datasourceId
USER_LOGINUser tried to log in33002Logs only failed logins for JWT/API; success only for OIDC
USER_LOGOUTUser logged out33002
USER_CREATEA user was created33001Includes ID, email, userGroups
USER_UPDATEUser account updated33001List of changed attributes
USER_DELETEUser account deleted33001
API_TOKEN_CREATEAn API token was created33002
API_TOKEN_DELETEAn API token was deleted33002
USER_DATA_FILTER_CREATEA user data filter was created33005MAQL expression + user/userGroup
USER_DATA_FILTER_UPDATEA user data filter was updated33005
USER_DATA_FILTER_DELETEA user data filter was deleted33005
USERGROUP_CREATEA user group was created33006
USERGROUP_UPDATEA user group was updated33006
USERGROUP_DELETEA user group was deleted33006
USER_USERGROUP_ADDUser added to a group33006Includes user and group info
USER_USERGROUP_DELETEUser removed from a group33006
PERMISSION_USER_ADDPermission added to user33005Includes permissionLevel and object
PERMISSION_USER_DELETEPermission removed from user33005
PERMISSION_USERGROUP_ADDPermission added to group33006Includes permissionLevel and object
PERMISSION_USERGROUP_DELETEPermission removed from group33006
PERMISSION_RULE_ADDPermission rule added33005Example: ALL_WORKSPACE_USERS
PERMISSION_RULE_DELETEPermission rule removed33005
INVITATION_SENDInvitation to join organization sent33005Only used in trial setups of GoodData Cloud. Not applicable to GoodData.CN.
SCHEDULED_MAIL_SENDA scheduled email was sent44009from_email, sessionContext info
AUTH_PROVIDER_CREATEAuth provider created9999001Parameters (secrets masked)
AUTH_PROVIDER_DELETEAuth provider deleted9999001
AUTH_PROVIDER_UPDATEAuth provider updated9999001
AUTH_FIM_ENABLEFederated identity enabled9999001
DATASOURCE_CREATENew data source created9999002Parameters (credentials masked)
DATASOURCE_DELETEData source deleted9999002
DATASOURCE_UPDATEData source updated9999002
CACHE_INVALIDATECache invalidated9999002target = dataSource ID / workspace ID / set of datasource IDs
ORG_SETTINGS_CREATEOrg settings created9999003Includes settingType
ORG_SETTINGS_UPDATEOrg settings updated9999003
ORG_SETTINGS_DELETEOrg settings deleted9999003
NOTIFICATION_CHANNEL_CREATEA new notification channel was created.9999003-
NOTIFICATION_CHANNEL_UPDATEA notification channel was updated.9999003-
NOTIFICATION_CHANNEL_DELETEA notification channel was deleted.9999003
IP_ALLOWLIST_CREATEAn IP allowlist policy was created.9999003
IP_ALLOWLIST_UPDATEAn IP allowlist policy was updated.9999003
IP_ALLOWLIST_DELETEAn IP allowlist policy was deleted.9999003
WORKSPACE_DATA_FILTER_CREATEWorkspace data filter created9999006Includes column name and title
WORKSPACE_DATA_FILTER_UPDATEWorkspace data filter updated9999006
WORKSPACE_DATA_FILTER_DELETEWorkspace data filter deleted9999006
WORKSPACE_DATA_FILTER_SETTING_CREATEWorkspace data filter setting created9999006Includes filterValues
WORKSPACE_DATA_FILTER_SETTING_UPDATEWorkspace data filter setting updated9999006
WORKSPACE_DATA_FILTER_SETTING_DELETEWorkspace data filter setting deleted9999006
WORKSPACE_CREATEWorkspace created9999005
WORKSPACE_UPDATEWorkspace updated9999005
WORKSPACE_DELETEWorkspace deleted9999005Deletes all resources inside
WORKSPACE_SETTINGS_CREATEWorkspace setting created9999005settingType = name of setting
WORKSPACE_SETTINGS_UPDATEWorkspace setting updated9999005
WORKSPACE_SETTINGS_DELETEWorkspace setting deleted9999005
ANALYTICS_MODEL_CREATEAnalytics model created9999007Includes type and sourceColumn
ANALYTICS_MODEL_UPDATEAnalytics model updated9999007
ANALYTICS_MODEL_DELETEAnalytics model deleted9999007
METRIC_CREATEMetric created9999007Includes MAQL and format
METRIC_UPDATEMetric updated9999007
METRIC_DELETEMetric deleted9999007
DATASET_CREATEDataset created9999007Includes ID and source table
DATASET_UPDATEDataset updated9999007
DATASET_DELETEDataset deleted9999007
LOCALIZATION_UPDATELocalizations updated9999004
LOCALIZATION_DOWNLOADLocalizations downloaded9999004
DASHBOARD_UPDATEDashboard updated9999007
DASHBOARD_CREATEDashboard created9999007
DASHBOARD_DELETEDashboard deleted9999007
VISUALISATION_CREATEVisualization created9999007
VISUALISATION_UPDATEVisualization updated9999007
VISUALISATION_DELETEVisualization deleted9999007
AUTOMATION_CREATEA new automation was created.9999007
AUTOMATION_UPDATEAn automation was updated.9999007
AUTOMATION_DELETEAn automation was deleted.9999007
AGENT_CREATEAn AI agent was created9999008id, title, description, enabled, personality, skillsMode, customSkills, aiKnowledge, availableToAll, userGroups. The audit entry contains only the fields that were changed by the request. The skillsMode field is an enum value, customSkills is a list of enum values, and userGroups is a list of user group IDs.
AGENT_UPDATEAn AI agent was updated9999008Delta of changed fields only. The id is always included.
AGENT_DELETEAn AI agent was deleted9999008The id is always included. Other fields are included if present at deletion time.
MEMORY_ITEM_CREATEAn AI memory item was created9999007strategy, instruction, keywords, isDisabled, title, description
MEMORY_ITEM_UPDATEAn AI memory item was updated9999007Delta of changed fields only. The id is always included.
MEMORY_ITEM_DELETEAn AI memory item was deleted9999007The id is always included. Other fields are included if present at deletion time.
DOCUMENT_CREATEA knowledge document was uploaded9999007content_size, num_chunks, title if set, scopes if set. The target field contains the document filename. If present, scopes are comma-joined in the audit entry.
DOCUMENT_UPDATEA knowledge document was updated9999007the same event covers both full content replacement and metadata-only patches. Full upsert: content_size, num_chunks, title if set, scopes if set. Partial patch: only changed fields among is_disabled, title, scopes.
DOCUMENT_DELETEA knowledge document was deleted9999007No additional attributes beyond mandatory fields

AI Memory Events

The same MEMORY_ITEM_* event set covers both workspace-level and organization-level AI memory items. Workspace-level memory items log with workspaceId populated. Organization-level memory items log with workspaceId set to <NONE>. Use the workspaceId field to distinguish the scope.

For MEMORY_ITEM_UPDATE, the audit entry contains only the fields that were changed by the request. The strategy field is an enum value, keywords is a list of strings, isDisabled is a boolean, and instruction contains the system-prompt text.

When a memory item is created or updated by the AI Assistant on behalf of a user, agentId and conversationId are attached automatically.

Reads of memory items, such as GET, list, or search operations, are not audited.

Audit Logging for Layout APIs

When using the layout APIs, deletion of old resources is recorded through a single audit log message per action, rather than individual entries for each sub-resource. However, creation events are logged individually for each entity.

Here is how deletion events are logged:

  • eventName = workspace_delete, target = <org_id> (Triggered by the organization layout API) This also deletes: workspace settings, dashboards, visualizations, and permissions.

  • eventName = workspace_delete, target = <workspace_id> (Triggered by the workspace layout API) This also deletes: workspace settings, dashboards, visualizations, and permissions.

  • eventName = analytics_model_delete, target = <workspace_id> (Triggered by the analytics model layout API) This also deletes related permissions.

  • eventName = datasource_delete, target = <organization_id> Deletes the data source and all related permissions.

Limitations

  • The audit log does not provide a complete record of every API request, UI interaction, or AI Assistant conversation.
  • Authorization failures, 403 responses, failed AI actions, prompt-injection attempts, and policy-blocked actions are not generally recorded as audit events unless they correspond to one of the events listed in the Audit Events section.
  • Diagnostic logs may contain additional troubleshooting information, but diagnostic log fields and formats are not part of the public audit log.
  • Data Residency: We do not provide storage for audit log data. The audit logs are stored in an AWS Cloud environment that you create and manage.
  • Batch Processing: Logs are processed and delivered in batches approximately every 10 minutes.
  • Retention Period: If our Audit Log Event Forwarder component cannot deliver audit logs to the specified destination (S3 bucket), we cache the audit log events and retry delivery for up to 7 days. Once the logs are successfully delivered, we do not manage their deletion. Therefore, it is up to you to decide how long to keep the logs. If you wish to control log retention, we recommend setting up lifecycle policies or similar rules in your S3 configuration.
  • S3 encryption: We do not support AWS KMS encryption (SSE-KMS) for S3 buckets that receive audit logs.