Organization activity log data reference

Learn about access actions that can only be taken by Organization Admins in Workbench

Prior reading: Billing actions

Purpose: This document explains the various access-related actions Org Admins can take in Workbench.

Note: This document is specific to Org Admins only. Organization activity logs are Google Cloud Platform-specific.



Introduction

BigQuery contains per-organization isolated tables allowing Organization Admins to query org-specific data. Note that Org Admins have IAM access only to their own organization's tables.

Dataset What it contains Update frequency
workbench_cloud_audit_logs_prod Data plane access events (file reads, queries) Daily (8 AM UTC)
workbench_monitoring_org_logs_prod Workspace activity, user/role mappings, policy grants Twice daily (7 AM / 7 PM UTC)
workbench_gce_instance_logs_prod Google Compute Engine (GCE) virtual machine instance logs (startup, Docker, resource metrics) Continuous (via log sink)

Cloud audit logs dataset (workbench_cloud_audit_logs_prod)

Tables: cloud_audit_logs (unified) and per-org isolated tables cloud_audit_logs_<org_ufid>

Purpose: Tracks every data plane access event (e.g., when users read files from Google Cloud Storage (GCS), run BigQuery queries, or access BigQuery Storage API).

Scope: Includes events from both workspaces and data collections (i.e., any Google Cloud Platform (GCP) project linked to a workspace in the org).

cloud_audit_logs and cloud_audit_logs<org_ufid> tables

Schema

Column Type Description
insert_id STRING Unique event identifier
timestamp TIMESTAMP When the access occurred
org_id STRING Organization UUID
org_user_facing_id STRING Organization user-facing ID
workspace_id STRING Workspace UUID where access occurred
workspace_user_facing_id STRING Workspace user-facing ID
gcp_project_id STRING GCP project hosting the resource
gcp_project_number STRING GCP project number
user_email STRING User who performed the access (resolved from pet service account)
audit_log STRING Full JSON audit log payload (see below)
audit_log details (JSON)

The audit_log field contains the complete GCP Data Access audit log entry. Some key fields are listed below:

JSON path Description Example
serviceName GCP service accessed storage.googleapis.com, bigquery.googleapis.com
methodName Operation performed storage.objects.get, jobservice.jobcompleted
resourceName Full resource path including file/object name projects/_/buckets/vwb-aou-datasets-controlled/objects/v8/wgs/short_read/snpindel/vds/hail.vds/variant_data/rows/rows/parts/part-001663
resourceLocation.currentLocations Region where the resource is stored ["us-central1"]
status.code Response status (0=success, 5=not found) 5
status.message Error message if failed "No such object: ..."
requestMetadata.callerSuppliedUserAgent Tool/client used to access the data htslib/1.23.1, gcsfuse/3.11.1, GHFS/3.0.7-dataproc
requestMetadata.callerIp IP address of the caller 10.128.15.239
authorizationInfo[].permission Permission checked storage.objects.get
authorizationInfo[].granted Whether access was granted true / false
metadataJson Additional metadata (e.g., bytes requested) {"requested_bytes":39267665052}

Event types captured

Service Method What it represents
storage.googleapis.com storage.objects.get User downloaded/read a specific file from a GCS bucket
storage.googleapis.com storage.objects.list User listed files in a GCS bucket
bigquery.googleapis.com jobservice.jobcompleted User executed a BigQuery query
bigquerystorage.googleapis.com CreateReadSession User read data via BigQuery Storage API

Can Org Admins see which files are being used?

Yes. The resourceName field in audit_log contains the complete object path, including the bucket name and full file path. For example:

  • projects/_/buckets/vwb-aou-datasets-controlled/objects/v8/wgs/short_read/snpindel/vds/hail.vds/variant_data/rows/rows/parts/part-001663
  • projects/_/buckets/vwb-aou-allxall/objects/v8/ht/ACAF_deprecated/EUR/phenotype_NS_324.311_ACAF_results.ht/index/part-1078-...

Example queries

Files accessed in a workspace
SELECT
  timestamp,
  user_email,
  workspace_user_facing_id,
  JSON_VALUE(audit_log, '$.methodName') AS method,
  JSON_VALUE(audit_log, '$.resourceName') AS resource_path,
  JSON_VALUE(audit_log, '$.requestMetadata.callerSuppliedUserAgent') AS client_tool
FROM `workbench-bq-log-sink.workbench_cloud_audit_logs_prod.cloud_audit_logs_<org_ufid>`
WHERE timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
  AND JSON_VALUE(audit_log, '$.serviceName') = 'storage.googleapis.com'
ORDER BY timestamp DESC
LIMIT 100
BigQuery queries run by users
SELECT
  timestamp,
  user_email,
  workspace_user_facing_id,
  JSON_VALUE(audit_log, '$.resourceName') AS query_resource
FROM `workbench-bq-log-sink.workbench_cloud_audit_logs_prod.cloud_audit_logs_<org_ufid>`
WHERE timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
  AND JSON_VALUE(audit_log, '$.serviceName') = 'bigquery.googleapis.com'
ORDER BY timestamp DESC

Workspace activity logs dataset (workbench_monitoring_org_logs_prod)

wsm_workspace_activity_logs table

Per-org isolated tables: wsm_workspace_activity_logs_<org_ufid>

Purpose: Tracks workspace-level mutations (e.g., resource creation, deletion, cloning, role grants, and configuration changes).

Scope: Includes both workspaces and data collections. Use is_data_collection = TRUE to filter to data collections only.

Schema

Column Type Description
workspace_id STRING Workspace UUID
workspace_user_facing_id STRING Workspace user-facing ID
change_date TIMESTAMP When the change occurred
actor_email STRING Who performed the action
user_id STRING Actor's internal user ID
change_subject_id STRING What was changed (user email, resource ID, etc.)
change_subject_type STRING Type of subject (e.g., USER, resource type, WORKSPACE)
change_type STRING Type of change (see below)
source_workspace_id STRING Source workspace for clone operations
org_id STRING Organization UUID
org_user_facing_id STRING Organization user-facing ID
pod_id STRING Pod UUID
pod_user_facing_id STRING Pod user-facing ID
is_data_collection BOOLEAN Whether this workspace is a data collection

Change types

change_type change_subject_type Description
ADMIN_UPDATE WORKSPACE Administrative workspace updates
SYSTEM_CLEANUP WORKSPACE Automated cleanup operations
CLONE CONTROLLED_GCP_BIG_QUERY_DATASET User cloned a BigQuery dataset from a data collection
CREATE REFERENCED_GCP_BIG_QUERY_DATASET User created a referenced BigQuery dataset
GRANT_WORKSPACE_ROLE USER User was granted a role on a workspace
CREATE CONTROLLED_GCP_GCE_INSTANCE User created a GCE virtual machine (VM)
UPDATE_PROPERTIES WORKSPACE Workspace properties modified
CREATE CONTROLLED_GCP_GCS_BUCKET User created a GCS bucket
CLONE REFERENCED_GCP_BIG_QUERY_DATASET User cloned a referenced BigQuery dataset
DELETE CONTROLLED_GCP_GCE_INSTANCE User deleted a GCE VM
CREATE WORKSPACE New workspace created
APPLICATION_ENABLED APPLICATION User enabled an app
REMOVE_WORKSPACE_ROLE USER User's workspace role was removed

Example queries

Who created workspaces
SELECT
  change_date,
  actor_email,
  workspace_user_facing_id,
  change_subject_type
FROM `workbench-bq-log-sink.workbench_monitoring_org_logs_prod.wsm_workspace_activity_logs_<org_ufid>`
WHERE change_type = 'CREATE' AND change_subject_type = 'WORKSPACE'
ORDER BY change_date DESC
Role grants on workspaces
SELECT
  change_date,
  actor_email,
  change_subject_id AS granted_to,
  workspace_user_facing_id
FROM `workbench-bq-log-sink.workbench_monitoring_org_logs_prod.wsm_workspace_activity_logs_<org_ufid>`
WHERE change_type = 'GRANT_WORKSPACE_ROLE'
ORDER BY change_date DESC

Notes on Role Grants

  • Role is in properties JSON: GRANT_WORKSPACE_ROLE events store the granted role in the properties column as JSON (e.g., {"role": "reader"}). Extract with JSON_VALUE(properties, '$.role').
  • Both user and group grants are logged: When a group is granted a workspace role, change_subject_type = 'GROUP' and change_subject_id is the group email.

workspace_policy_grants table

Per-org isolated tables: workspace_policy_grants_<org_ufid>

Purpose: Current point-in-time snapshot of who has what role on each workspace, including how they got it (direct grant or group membership).

Scope: Includes both workspaces and data collections. To filter to data collections only, JOIN to wsm_workspaces and check is_data_collection = TRUE. For a data collection-specific view with friendlier columns, use data_collection_access_grants (per-org) or data_collection_policy_grants (per-data collection) instead.

Schema

Column Type Description
workspace_id STRING Workspace UUID
workspace_user_facing_id STRING Workspace user-facing ID
workspace_name STRING Workspace display name
user_email STRING User with access
role STRING Role on the workspace (DISCOVERER, READER, WRITER, OWNER)
grant_type STRING How access was obtained: DIRECT or GROUP
group_email STRING If grant_type=GROUP, the group's email
group_name STRING If grant_type=GROUP, the group's name
org_id STRING Organization UUID

Example query

All users with WRITER+ access
SELECT
  user_email,
  workspace_user_facing_id,
  role,
  grant_type,
  group_name
FROM `workbench-bq-log-sink.workbench_monitoring_org_logs_prod.workspace_policy_grants_<org_ufid>`
WHERE role IN ('WRITER', 'OWNER')
ORDER BY workspace_user_facing_id, role

sam_workspace_users table

Per-org isolated tables: sam_workspace_users_<org_ufid>

Purpose: Lists all users with READER, WRITER, or OWNER access to workspaces in the org.

Scope: Includes both workspaces and data collections (treats both as the workspace resource type).

Schema

Column Type Description
user_email STRING User with access
org_id STRING Organization UUID
workspace_id STRING Workspace UUID
role STRING Role (READER, WRITER, OWNER)

um_user_activity_in_org_log table

Per-org isolated tables: um_user_activity_in_org_log_<org_ufid>

Purpose: Timestamped log of organization, pod, and group membership changes, including when users are added or removed from groups.

Scope: Events are scoped by group, pod, or org, not by individual workspaces or data collections. To connect a group membership event to a specific data collection, JOIN to data_collection_access_grants or data_collection_policy_grants.

Schema

Column Type Description
change_timestamp TIMESTAMP When the change occurred
change_type STRING Type of change (see below)
subject_type STRING What was changed: ORGANIZATION, POD, or GROUP
subject_id STRING ID of the subject (group internal_name, pod UUID, or org UUID)
actor_email STRING Who performed the action
properties STRING JSON with additional details (e.g., role granted)
related_resources STRING JSON array of related resources (e.g., the principal added)
org_id STRING Organization UUID
org_user_facing_id STRING Organization user-facing ID

Key change types

change_type subject_type Description
GRANT_ROLE_GROUP GROUP User/group was added to a Workbench group
REVOKE_ROLE_GROUP GROUP User/group was removed from a Workbench group
CREATE_GROUP GROUP A new group was created
DELETE_GROUP GROUP A group was deleted
GRANT_ROLE_ORG ORGANIZATION User was granted an org role
REVOKE_ROLE_ORG ORGANIZATION User's org role was revoked
GRANT_ROLE_POD POD User was granted a pod role
REVOKE_ROLE_POD POD User's pod role was revoked

Example queries

When was a user added to a group?
SELECT
  change_timestamp,
  actor_email,
  subject_id AS group_internal_name,
  JSON_VALUE(properties, '$.role') AS role_on_group,
  related_resources
FROM `workbench-bq-log-sink.workbench_monitoring_org_logs_prod.um_user_activity_in_org_log_<org_ufid>`
WHERE change_type = 'GRANT_ROLE_GROUP'
ORDER BY change_timestamp DESC
When did a DISCOVERER gain READER access?

To find when a user gained READER access to a data collection via group membership, JOIN this table with um_workbench_groups (to map subject_id to group_internal_name) and data_collection_policy_grants (to confirm which data collection the group grants READER on):

WITH group_grants AS (
  SELECT
    change_timestamp,
    actor_email,
    subject_id AS group_internal_name,
    related_resources
  FROM `workbench-bq-log-sink.workbench_monitoring_org_logs_prod.um_user_activity_in_org_log_<org_ufid>`
  WHERE change_type = 'GRANT_ROLE_GROUP'
)
SELECT
  gg.change_timestamp AS granted_at,
  gg.actor_email AS granted_by,
  g.group_name,
  gg.related_resources
FROM group_grants gg
INNER JOIN `workbench-bq-log-sink.workbench_monitoring_org_logs_prod.um_workbench_groups_<org_ufid>` g
  ON gg.group_internal_name = g.internal_name

um_workbench_groups table

Per-org isolated tables: um_workbench_groups_<org_ufid>

Purpose: Lists all Workbench groups in the organization, mapping internal names to user-facing names.

Schema

Column Type Description
internal_name STRING Group internal name (used as subject_id in activity logs)
group_name STRING User-facing group name
org_id STRING Organization UUID
org_user_facing_id STRING Organization user-facing ID
org_display_name STRING Organization display name
created_date TIMESTAMP When the group was created
created_by STRING Who created the group
last_updated_date TIMESTAMP Last update
last_updated_by STRING Who last updated it

um_users table

Per-org isolated tables: um_users_<org_ufid>

Purpose: User roster for the org (e.g., email, active state, Terms of Service status, creation date).

Schema

Column Type Description
user_id STRING User UUID
email STRING User email
org_id STRING Organization UUID
org_user_facing_id STRING Organization user-facing ID
active_state STRING User's status (ENABLED, DISABLED, ARCHIVED, or INVITED)
tos_state STRING Terms of Service status (TOS_REQUIRED or TOS_OK)
created_date TIMESTAMP Account creation date
created_by_email STRING Who created the account
last_updated_date TIMESTAMP Last update
last_updated_by_email STRING Who last updated it

um_pods table

Per-org isolated tables: um_pods_<org_ufid>

Purpose: Pod metadata — name, org, billing account, environment type.

Schema

Column Type Description
pod_id STRING Pod UUID
pod_user_facing_id STRING Pod user-facing ID
description STRING Description of the pod
org_id STRING Org UUID
org_user_facing_id STRING Org user-facing ID
org_display_name STRING Organization display name
environment_type STRING Cloud platform (AWS or GCP)
billing_account_id STRING Google Billing account ID
billing_export_project_id STRING Google project ID for exported Cloud Billing data
billing_export_dataset_id STRING BigQuery dataset ID for exported Cloud Billing data
billing_export_table_id STRING BigQuery table ID for exported Cloud Billing data
created_date TIMESTAMP Date created
created_by_email STRING Who created it
last_updated_date TIMESTAMP Date last updated
last_updated_by_email STRING Who last updated it

um_user_pod_roles table

Per-org isolated tables: um_user_pod_roles_<org_ufid>

Purpose: Which users have roles on which pods.

Schema

Column Type Description
user_email STRING User email
policy_group STRING UUID of policy group
role STRING User role (admin, manager, user)
pod_id STRING Pod UUID
pod_user_facing_id STRING Pod user-facing ID
description STRING Pod description
org_id STRING Org UUID
environment_type STRING Cloud platform (AWS or GCP)
created_date TIMESTAMP Date created
created_by_email STRING Who created it
last_updated_date TIMESTAMP Date last updated
last_updated_by_email STRING Who last updated it

wsm_workspaces table

Per-org isolated tables: wsm_workspaces_<org_ufid>

Purpose: All workspaces in the org — ID, name, creator, cloud platform, GCP project, properties.

Scope: Includes both workspaces and data collections. Has is_data_collection column to distinguish.

Schema

Column Type Description
workspace_id STRING Workspace UUID
workspace_user_facing_id STRING Workspace user-facing ID
workspace_display_name STRING Workspace display name
description STRING Workspace description
created_date TIMESTAMP Date created
created_by_email STRING Who created it
org_id STRING Organization UUID
org_user_facing_id STRING Organization user-facing ID
pod_id STRING Pod UUID
pod_user_facing_id STRING Pod user-facing ID
cloud_platform STRING Cloud platform (GCP or AWS)
cloud_context STRING Includes SAM policy, GCP project ID, and GCP project number info
region STRING Workspace region
state STRING State of workspace (CREATING, READY, DELETED)
properties STRING JSON string list of workspace properties (default location, data use metadata)
workspace_metadata_policy STRING JSON string list of completed metadata policies
is_data_collection BOOLEAN Whether this workspace is a data collection
gcp_project_id STRING GCP project hosting the resource
gcp_project_number STRING GCP project number

wsm_resources table

Per-org isolated tables: wsm_resources_<org_ufid>

Purpose: All resources (buckets, datasets, VMs, apps) across all workspaces in the org.

Scope: Includes resources in both workspaces and data collections. Has is_data_collection column to distinguish.

Schema

Column Type Description
workspace_id STRING Workspace UUID
workspace_user_facing_id STRING Workspace user-facing ID
resource_id STRING Resource UUID
resource_name STRING Resource name
resource_display_name STRING Resource display name
description STRING Resource description
created_date TIMESTAMP Date created
created_by_email STRING Who created it
resource_type STRING Resource type
exact_resource_type STRING Exact resource type (specifies CONTROLLED or REFERENCED)
resource_lineage STRING Resource lineage
access_scope STRING Access scope (ACCESS_SHARED, ACCESS_PRIVATE)
cloning_instructions STRING Resource cloning instructions (COPY_NOTHING, COPY_DEFINITION, COPY_RESOURCE, COPY_REFERENCE, COPY_LINK_REFERENCE)
region STRING Resource region
state STRING State of resource (CREATING, READY, DELETED)
attributes STRING Resource attributes
properties STRING Resource properties
folder_id STRING Folder UUID
folder_display_name STRING Folder display name
org_id STRING Org UUID
org_user_facing_id STRING Organization user-facing ID
pod_id STRING Pod UUID
pod_user_facing_id STRING Pod user-facing ID
is_data_collection BOOLEAN Whether this workspace is a data collection

data_collection_access_grants table

Per-org isolated tables: data_collection_access_grants_<org_ufid>

Purpose: Per-org flat listing of every user's effective roles on each data collection, resolving both direct user grants and group-based grants (including nested groups). Maps SAM policy groups to user-facing Workbench group names.

Scope: Data collections only (filters to is_data_collection = TRUE).

Schema

Column Type Description
data_collection_id STRING Data collection UUID
data_collection_name STRING Data collection display name
data_collection_user_facing_id STRING Data collection user-facing ID
user_email STRING User with access
role STRING Role (DISCOVERER, READER, WRITER, OWNER)
grant_type STRING Grant type (DIRECT or GROUP)
group_email STRING SAM policy group email (internal)
group_name STRING SAM policy group name (internal)
member_group_name STRING Workbench group internal_name (for GROUP grants)
user_facing_group_name STRING User-facing Workbench group name (resolved from member_group_name)
org_id STRING Organization UUID

Example query

Data collection access grants with group names
SELECT
  user_email,
  data_collection_name,
  role,
  grant_type,
  user_facing_group_name
FROM `workbench-bq-log-sink.workbench_monitoring_org_logs_prod.data_collection_access_grants_<org_ufid>`
WHERE role = 'READER'
ORDER BY data_collection_name, user_email

sam_admin_groups / sam_admin_groups_all tables

Purpose: Maps organizations to their SAM admin groups (used for IAM isolation).

Schema

Column Type Description
sam_group_name STRING SAM group name
sam_group_email STRING SAM group email
sam_policy_name STRING SAM policy name
org_id STRING Org UUID
org_user_facing_id STRING Org user-facing ID
user_count INTEGER User count

Last Modified: 1 September 2026