Integrate BigQuery with Google SecOps
This document explains how to integrate BigQuery with Google Security Operations.
Use cases
The BigQuery integration uses Google SecOps capabilities to support the following use cases:
Threat intelligence enrichment: Automatically enrich security alerts with threat intelligence data stored in BigQuery to assess the severity and credibility of potential threats.
User behavior analysis: Identify anomalous user activity by analyzing historical logs stored in BigQuery to detect insider threats and compromised accounts.
Security data lake analysis: Use BigQuery querying capabilities to analyze large volumes of security data aggregated from various sources to improve threat hunting.
Advanced ML/AI analytics: Build custom models for predictive defense and automated risk scoring using historical security data and BigQuery ML.
Long-term data retention: Archive resolved incident data into BigQuery for cost-effective long-term storage, supporting compliance and forensic audits.
Before you begin
Before you configure the BigQuery integration in Google SecOps, complete the following prerequisite steps:
Grant the necessary Identity and Access Management roles to your service account.
Choose and configure one of the following authentication methods:
Option 1: Workload Identity (recommended): This method uses short-lived, temporary access tokens using service account impersonation.
Option 2: Service account JSON key: This method relies on a static, long-lived secret key file.
Grant IAM roles
Granting the necessary permissions to your service account lets the integration run jobs and access your data. The following standard roles are managed by Google Cloud and automatically update if API requirements change. To assign these roles to your service account, complete the following steps:
In the Google Cloud console, go to IAM.
Locate your service account in the list of principals and click Edit principal (edit).
Click Add another role and select the following:
BigQuery User (
roles/bigquery.user): Lets the integration run jobs, including queries, within the project.BigQuery Data Viewer (
roles/bigquery.dataViewer): Lets the integration read data and metadata from datasets and tables.Service Usage Consumer (
roles/serviceusage.serviceUsageConsumer): This is mandatory if you configureQuota Project IDin the integration settings.
Click Save.
Create a service account
In the Google Cloud console, go to IAM & Admin > Service Accounts.
Click addCreate service account.
Provide a name and description and click Create and continue.
In the Grant this service account access to project step, add the roles identified in the previous step.
Click Done. Take a note of the service account's Email address.
Configure Workload Identity credentials
Workload Identity is the recommended approach as it uses short-lived access tokens using service account impersonation.
Identify the unique instance identity
Establishing a connection requires granting your Google SecOps instance permission to impersonate your service account.
In Google SecOps, go to Content Hub > Response Integrations.
Select the BigQuery integration and enter your service account email in the
Workload Identity Emailfield.Click Save > Test. The test is expected to fail.
Click the close_small button next to Test and locate the identity email beginning with
gke-init-python@...orsoar-python@....Copy this unique email address.
Authorize the instance identity in Google Cloud
In the Google Cloud console, go to IAM & Admin > Service Accounts.
Select the target service account and go to Permissions > Grant Access.
Paste the unique email address into the New principals field and assign the Service Account Token Creator role (
roles/iam.serviceAccountTokenCreator).
Configure a JSON key
Static, long-lived secret key files require manual rotation. Use this method only if Workload Identity authentication isn't available.
In the Google Cloud console, go to IAM & Admin > Service Accounts and select your service account.
Go to the Keys tab and click Add key > Create new key.
Select JSON and click Create. The file automatically downloads to your computer.
Configure manual individual parameters
If you choose to enter credentials manually, keep the downloaded JSON key file open in a text editor to copy the individual values required in the integration settings.
Integration parameters
To establish a connection between Google SecOps and BigQuery, you must configure the following parameters. The integration supports three distinct authentication paths. Choose one of the following methods to provide credentials.
Workload Identity: Uses
Workload Identity EmailandQuota Project ID.Service account JSON file: Uses
Service Account Json File Contentto provide the entire key at once.Manual individual parameters: Uses separate fields manually copied from a JSON key.
| Parameter | Description |
|---|---|
API Root |
Optional. The API root of the BigQuery instance (for example,
|
Workload Identity Email |
Optional. The client email address of your service account. Use this for Workload Identity authentication. |
Service Account Json File Content |
Optional. The full content of the service account key JSON file. If you configure this parameter, the integration ignores individual credential parameters. |
Quota Project ID |
Optional. The project ID used for API usage and billing. This parameter is required when using Workload Identity authentication. |
Project ID |
Optional. The project ID to target in BigQuery. |
Verify SSL |
Required. Validates the SSL certificate for the connection. Enabled by default. |
Individual credential parameters
Only use the following parameters if you're manually entering credentials rather than using the full JSON file content or a Workload Identity.
| Parameter | Description |
|---|---|
Account Type |
Optional. The value found in the |
Private Key ID |
Optional. The value found in the |
Private Key |
Optional. The value found in the |
Client Email |
Optional. The value found in the |
Client ID |
Optional. The value found in the |
Auth URI |
Optional. The value found in the The default value is
|
Token URI |
Optional. The value found in the The default value is |
Auth Provider X509 URL |
Optional. The value found in the
|
Client X509 URL |
Optional. The value found in the |
For instructions about how to configure an integration in Google SecOps, see Configure integrations.
You can make changes at a later stage, if needed. After you configure an integration instance, you can use it in playbooks. For more information about how to configure and support multiple instances, see Supporting multiple instances.
Actions
For more information about actions, see Respond to pending actions from Your Workdesk and Perform a manual action.
Ping
Use the Ping action to test connectivity to the BigQuery.
This action doesn't run on Google SecOps entities.
Action inputs
None.
Action outputs
The Ping action provides the following outputs:
| Action output type | Availability |
|---|---|
| Case wall attachment | Not available |
| Case wall link | Not available |
| Case wall table | Not available |
| Enrichment table | Not available |
| JSON result | Not available |
| Output messages | Available |
| Script result | Available |
Output messages
The Ping action can return the following output messages:
| Output message | Message description |
|---|---|
Successfully connected to the Google BigQuery server with
the provided connection parameters! |
Action succeeded. |
Failed to connect to the Google BigQuery server! Error is
ERROR_REASON |
Action failed. Check the connection to the server, input parameters, or credentials. |
Script result
The following table lists the value for the script result output when using the Ping action:
| Script result name | Value |
|---|---|
is_success |
True or False |
Run Custom Query
Use the Run Custom Query action to execute custom queries in BigQuery.
This action doesn't run on Google SecOps entities.
Action inputs
The Run Custom Query action requires the following parameters:
| Parameters | Description |
|---|---|
Query |
Required. The SQL query to execute. |
Max Results To Return |
Optional. The number of results to return for every response. The default value is |
Action outputs
The Run Custom Query action provides the following outputs:
| Action output type | Availability |
|---|---|
| Case wall attachment | Not available |
| Case wall link | Not available |
| Case wall table | Not available |
| Enrichment table | Not available |
| JSON result | Available |
| Output messages | Available |
| Script result | Available |
JSON result
The following example shows the JSON result output received when using the Run Custom Query action:
{
"Airport_Code": "CODE",
"Airport_Name": "NAME",
"Time_Label": "2015/05",
"Time_Month": 5,
"Time_Month_Name": "May",
"Time_Year": 2015,
"Statistics___of_Delays_Carrier": 351,
"Statistics___of_Delays_Late_Aircraft": 546,
"Statistics___of_Delays_National_Aviation_System": 292,
"Statistics___of_Delays_Security": 2,
"Statistics___of_Delays_Weather": 100,
"Statistics_Carriers_Names": "Example Air Lines Inc., Example Airlines Co.",
"Statistics_Carriers_Total": 3,
"Statistics_Flights_Cancelled": 88,
"Statistics_Flights_Delayed": 1289,
"Statistics_Flights_Diverted": 32,
"Statistics_Flights_On_Time": 6182,
"Statistics_Flights_Total": 7591,
"Statistics_Minutes_Delayed_Carrier": 19332,
"Statistics_Minutes_Delayed_Late_Aircraft": 34376,
"Statistics_Minutes_Delayed_National_Aviation_System": 12346,
"Statistics_Minutes_Delayed_Security": 48,
"Statistics_Minutes_Delayed_Total": 76163,
"Statistics_Minutes_Delayed_Weather": 100061
}
Output messages
The Run Custom Query action can return the following output messages:
| Output message | Message description |
|---|---|
Successfully executed query in Google BigQuery! |
Action succeeded. |
Error executing action "Run Custom Query". Reason:
ERROR_REASON |
Action failed. Check the connection to the server, input parameters, or credentials. |
Script result
The following table lists the value for the script result output when using the Run Custom Query action:
| Script result name | Value |
|---|---|
is_success |
True or False |
Run SQL Query
Use the Run SQL Query action to execute queries in BigQuery.
This action doesn't run on Google SecOps entities.
Action inputs
The Run SQL Query action requires the following parameters:
| Parameters | Description |
|---|---|
Dataset Name |
Required. The name of the dataset to use when executing queries. |
Query |
Required. The SQL query to execute. |
Max Results To Return |
Optional. The number of results to return for every response. The default value is |
Action outputs
The Run SQL Query action provides the following outputs:
| Action output type | Availability |
|---|---|
| Case wall attachment | Not available |
| Case wall link | Not available |
| Case wall table | Not available |
| Enrichment table | Not available |
| JSON result | Not available |
| Output messages | Available |
| Script result | Available |
JSON result
The following example describes the JSON result output received when using the Run SQL Query action:
{
"Airport_Code": "CODE",
"Airport_Name": "NAME",
"Time_Label": "2015/05",
"Time_Month": 5,
"Time_Month_Name": "May",
"Time_Year": 2015,
"Statistics___of_Delays_Carrier": 351,
"Statistics___of_Delays_Late_Aircraft": 546,
"Statistics___of_Delays_National_Aviation_System": 292,
"Statistics___of_Delays_Security": 2,
"Statistics___of_Delays_Weather": 100,
"Statistics_Carriers_Names": "Example Airlines Inc.,Example Airlines Co.",
"Statistics_Carriers_Total": 3,
"Statistics_Flights_Cancelled": 88,
"Statistics_Flights_Delayed": 1289,
"Statistics_Flights_Diverted": 32,
"Statistics_Flights_On_Time": 6182,
"Statistics_Flights_Total": 7591,
"Statistics_Minutes_Delayed_Carrier": 19332,
"Statistics_Minutes_Delayed_Late_Aircraft": 34376,
"Statistics_Minutes_Delayed_National_Aviation_System": 12346,
"Statistics_Minutes_Delayed_Security": 48,
"Statistics_Minutes_Delayed_Total": 76163,
"Statistics_Minutes_Delayed_Weather": 100061
}
Output messages
The Run SQL Query action can return the following output messages:
| Output message | Message description |
|---|---|
Successfully executed query in the BigQuery dataset
DATASET_NAME. |
Action succeeded. |
Error executing action "Run SQL Query". Reason:
ERROR_REASON |
Action failed. Check the connection to the server, input parameters, or credentials. |
Script result
The following table lists the value for the script result output when using the Run SQL Query action:
| Script result name | Value |
|---|---|
is_success |
True or False |
Need more help? Get answers from Community members and Google SecOps professionals.