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.

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::972873489489: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.

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
DATASOURCE_CACHE_INVALIDATECache invalidated9999002target = dataSource ID
ORG_SETTINGS_CREATEOrg settings created9999003Includes settingType
ORG_SETTINGS_UPDATEOrg settings updated9999003
ORG_SETTINGS_DELETEOrg settings deleted9999003
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

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

  • 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.