Skip to main content

Google SecOps SOAR Integration Guide

Overview

The Google SecOps SOAR integration allows your NINA workflows to connect with Google Security Operations (Google SecOps) to manage SOAR automation infrastructure — the building blocks that drive playbooks, automation actions, and analyst workspaces. This integration targets the Google SecOps SOAR Automation API and the Legacy SOAR API, providing programmatic control over environments, dynamic parameters, email and request templates, SOAR domains, SOAR networks, identity provider mapping groups, permission groups, users, and personal workdesk items.

This connector is complementary to the chronicle-cases and chronicle-instances connectors. Where chronicle-cases manages the SOC case lifecycle (cases, alerts, tasks, SLAs) and chronicle-instances manages platform-level configuration (rules, feeds, ingestion), chronicle-soar manages the automation layer: the environments where playbooks run, the parameters they consume, the templates they send, and the network/domain topology they operate within.

Capabilities

This integration provides access to 16 resources with 74 unique operations covering:

CategoryResources
Automation ParametersDynamic Parameters, Form Dynamic Parameters
Automation EnvironmentsSOAR Environments, Environment Groups
Messaging TemplatesEmail Templates, Request Templates
Network & Domain TopologySOAR Domains, SOAR Networks
Identity & Access (Legacy SOAR)IDP Mapping Groups, Permission Groups
User Management (Legacy SOAR)Legacy SOAR Users
Personal Workspace (Legacy SOAR)User Attachments, User Notifications, Workdesk Contacts, Workdesk Links, Workdesk Notes

API Versions

The connector targets the most stable version available per resource:

API VersionUsage
v1All SOAR Automation resources (dynamicParameters, emailTemplates, environmentGroups, environments, formDynamicParameters, requestTemplates, soarDomains, soarNetworks) and legacy user settings that are promoted to v1 (legacySoarUsers locale/notification settings, legacySoarUsers/attachments, legacySoarUsers/userNotifications, legacySoarUsers/workdesk*)
v1alphaLegacy SOAR resources that remain in preview (legacySoarIdpMappingGroups, legacySoarPermissionGroups, legacySoarUsers CRUD)

Note: The Google SecOps API exposes the same logical operations across v1, v1alpha, and v1beta. This connector always uses a single stable version per operation. The same service account credentials work across all versions.


Credential Configuration

Authentication Method

Google SecOps SOAR uses Google Service Account (OAuth2 service-account flow). The integration authenticates by exchanging a service account JSON key for a short-lived Google access token, which is refreshed automatically — no user interaction or browser redirect is required.

FieldDescriptionRequired
serviceAccountJsonFull content of the Google service account JSON key file — paste the entire JSON objectYes
regionGoogle SecOps API region prefix that matches your instance deployment (e.g. us, eu)Yes
projectGCP project ID that owns the Google SecOps instance (e.g. my-project-123)Yes
locationGCP location string inserted into the resource path (e.g. us, eu, europe-west2)Yes
instanceGoogle SecOps instance UUID (e.g. fca7f167-b9d1-43b1-9d03-0257d31dcb63)Yes

How Authentication Works

  1. You paste the service account JSON key when creating a credential in NINA.
  2. On each API call the connector uses the golang.org/x/oauth2/google library to exchange the service account private key for a short-lived Google access token with the scope https://www.googleapis.com/auth/cloud-platform.
  3. The token is sent as a Bearer header on every Google SecOps SOAR API request.
  4. Google access tokens expire after 1 hour. The OAuth2 library renews tokens automatically in the background.
  5. No redirect URLs, browser flows, or user-level OAuth consent screens are involved.

Google SecOps API Regions

Select the region value that matches where your Google SecOps instance is deployed. This value determines the Google SecOps API base URL https://{region}-chronicle.googleapis.com.

region valueLabelGoogle SecOps API base URL
usUnited Stateshttps://us-chronicle.googleapis.com
euEuropehttps://eu-chronicle.googleapis.com
asia-southeast1Asia Pacific — Singaporehttps://asia-southeast1-chronicle.googleapis.com
asia-south1Asia Pacific — Indiahttps://asia-south1-chronicle.googleapis.com
northamerica-northeast2Canada — Montrealhttps://northamerica-northeast2-chronicle.googleapis.com
me-west1Middle Easthttps://me-west1-chronicle.googleapis.com

region vs location: region controls which API hostname is used. location is inserted into every resource path: /v1/projects/{project}/locations/{location}/instances/{instance}. For most deployments both have the same value (e.g. both eu). For some multi-region GCP deployments the location may be a full GCP region name such as europe-west2. Confirm the exact location with your Google SecOps administrator or by inspecting the instance resource name in Google SecOps UI → Settings → Instance.

Required IAM Permissions

Google SecOps SOAR uses Google Cloud IAM roles to control access. Grant the role at the GCP project level on the project that owns the Google SecOps instance.

Use caseRequired IAM role
Read-only (list/get environments, templates, domains, networks, users, IDP groups)roles/chronicle.viewer
Read + write (create/update/delete environments, templates, domains, networks, IDP groups)roles/chronicle.editor
Full access including destructive operations (deleteAll networks, batch-delete templates, delete users)roles/chronicle.editor

Important: roles/chronicle.editor gives the service account write access to all Google SecOps resources in the project, including Cases and Instances connectors. Apply the principle of least privilege: use roles/chronicle.viewer for read-only automation workflows (monitoring, reporting, syncing environments) and roles/chronicle.editor only when write access is required.

Google SecOps-specific IAM roles and their fine-grained permissions are documented at: https://cloud.google.com/iam/docs/understanding-roles#chronicle-roles

Shared Credential with Other Google SecOps Connectors

The chronicle-soar, chronicle-cases, and chronicle-instances connectors all use identical credential fields (serviceAccountJson, region, project, location, instance) and the same IAM role model. A single service account with the appropriate Google SecOps IAM role can be used as the credential for all three connectors simultaneously — you do not need separate service accounts.

How to Obtain a Service Account Key

Step 1 — Identify or create the service account

  1. Go to Google Cloud Console and select the GCP project that owns the Google SecOps instance.
  2. Navigate to IAM & Admin > Service Accounts.
  3. Either select an existing service account dedicated to NINA automation, or click Create Service Account:
    • Name: A descriptive name, e.g. nina-chronicle-soar.
    • Description: e.g. "Service account for NINA Google SecOps SOAR connector".
  4. Click Create and Continue.

Step 2 — Grant the required IAM role

  1. In IAM & Admin > IAM, click Grant Access.
  2. Enter the service account email (e.g. [email protected]).
  3. In the Role picker, search for and select one of:
    • Google SecOps Viewer (roles/chronicle.viewer) — for read-only access.
    • Google SecOps Editor (roles/chronicle.editor) — for full read/write access.
  4. Click Save.

Step 3 — Create a JSON key

  1. In IAM & Admin > Service Accounts, click the service account you configured.
  2. Open the Keys tab.
  3. Click Add Key > Create new key.
  4. Select JSON and click Create.
  5. The key file downloads automatically to your computer.
  6. Store the key file securely. Anyone who possesses this file can authenticate as the service account. Do not commit it to source control, print it, or log its contents.

The JSON key file has the following structure:

{
"type": "service_account",
"project_id": "your-gcp-project-id",
"private_key_id": "abc123...",
"private_key": "-----BEGIN RSA PRIVATE KEY-----\n...\n-----END RSA PRIVATE KEY-----\n",
"client_email": "[email protected]",
"client_id": "123456789",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/..."
}

Step 4 — Locate your Google SecOps instance values

You need four values from your Google SecOps deployment: project, location, instance, and region.

ValueWhere to find it
projectThe GCP project ID shown in the Google Cloud Console project selector
locationVisible in the Google SecOps instance resource name: projects/{project}/locations/{location}/instances/{instance} — check Google SecOps UI → Settings → Instance
instanceThe UUID portion of the instance resource name (same path as above)
regionThe Google SecOps API region — matches the prefix of the Google SecOps UI URL (e.g. if the UI is at eu-chronicle.security.google.com, then region=eu)

Creating a Google SecOps SOAR Credential in NINA

  1. Navigate to the Credentials section in NINA.
  2. Click Add New Credential.
  3. Select Google SecOps SOAR as the Integration Service.
  4. Fill in the credential fields:
    • Service Account JSON: Paste the entire contents of the downloaded .json key file.
    • Region: Select your Google SecOps API region from the dropdown (e.g. eu).
    • Project: Enter your GCP project ID (e.g. my-project-123).
    • Location: Enter the GCP location string (e.g. eu or europe-west2).
    • Instance: Enter the Google SecOps instance UUID.
  5. Click Test Connection to verify the credentials.
  6. Click Save to store the credential securely.

Rate Limits and Quotas

BehaviourDetail
Rate-limit responseHTTP 429 — connector retries automatically
Retry policyUp to 3 retries with exponential back-off: 1 s, 2 s, 4 s
Retry-After headerHonoured when present in the 429 response
Request timeout90 seconds per request
Quota typeGoogle SecOps API quotas are per-project and per-method; contact Google Cloud support to increase limits

Supported Operations

Resources overview

ResourceOperationsDescription
dynamicParameters7SOAR dynamic parameters used in playbooks and automation actions
emailTemplates8Email templates sent by automation actions
environmentGroups5Groups that organise SOAR environments
environments6SOAR execution environments for automation
formDynamicParameters3Dynamic parameters associated with SOAR forms
requestTemplates5Request templates used in automation actions
soarDomains7SOAR domain definitions
soarNetworks8SOAR network definitions
legacySoarIdpMappingGroups8Identity provider mapping groups for Legacy SOAR
legacySoarPermissionGroups1Legacy SOAR permission groups (read-only)
legacySoarUsers7Legacy SOAR user accounts and their settings
legacySoarUserAttachments5File attachments for Legacy SOAR users
legacySoarUserNotifications4In-app notifications for Legacy SOAR users
legacySoarWorkdeskContacts5Workdesk contacts for Legacy SOAR users
legacySoarWorkdeskLinks5Quick-access links on the SOAR workdesk
legacySoarWorkdeskNotes5Personal notes on the SOAR workdesk

Operation Details

dynamicParameters

Manage SOAR dynamic parameters — named key/value pairs injected into playbooks and automation actions at runtime. Dynamic parameters allow you to centralise configuration values (API endpoints, thresholds, environment-specific identifiers) so they can be changed in one place without editing each playbook individually.

Operations summary

OperationHTTPDescription
createPOSTCreate a new dynamic parameter
deleteDELETEDelete a dynamic parameter by name
getGETRetrieve a single dynamic parameter
listGETList all dynamic parameters
updatePATCHUpdate an existing dynamic parameter
exportPOSTExport dynamic parameters to a portable format
importPOSTImport dynamic parameters from a portable format

create

Creates a new dynamic parameter.

Parameters:

NameTypeRequiredDescription
namestringYesParameter name (used as the key in playbooks).
valuestringNoParameter value.
descriptionstringNoHuman-readable description of the parameter's purpose.

Example:

{
"name": "siem_api_endpoint",
"value": "https://siem.example.com/api/v2",
"description": "Base URL for the external SIEM API used in enrichment playbooks"
}

delete

Deletes a dynamic parameter. This operation is destructive and cannot be undone. Any playbook or action that references the deleted parameter by name will fail at runtime.

Parameters:

NameTypeRequiredDescription
namestringYesFully-qualified resource name of the parameter to delete.

Example:

{
"name": "projects/my-project/locations/eu/instances/fca7f167.../dynamicParameters/siem_api_endpoint"
}

get

Retrieves a single dynamic parameter by its resource name.

Parameters:

NameTypeRequiredDescription
namestringYesFully-qualified resource name of the parameter.

Example:

{
"name": "projects/my-project/locations/eu/instances/fca7f167.../dynamicParameters/siem_api_endpoint"
}

list

Lists all dynamic parameters in the instance. Supports pagination.

Parameters:

NameTypeRequiredDescription
pageSizenumberNoMaximum number of results to return.
pageTokenstringNoPagination token from a previous response to retrieve the next page.
filterstringNoFilter expression to narrow results.

Example:

{
"pageSize": 50
}

update

Updates an existing dynamic parameter. Use updateMask to update only specific fields.

Parameters:

NameTypeRequiredDescription
namestringYesFully-qualified resource name of the parameter to update.
valuestringNoNew parameter value.
descriptionstringNoNew description.
updateMaskstringNoComma-separated list of field paths to update (e.g. value,description). If omitted, all provided fields are updated.

Example:

{
"name": "projects/my-project/locations/eu/instances/fca7f167.../dynamicParameters/siem_api_endpoint",
"value": "https://siem.example.com/api/v3",
"updateMask": "value"
}

export

Exports all dynamic parameters to a portable format for backup or migration.

Parameters: None.

Example:

{}

import

Imports dynamic parameters from a previously exported portable format.

Parameters:

NameTypeRequiredDescription
contentstringNoSerialised parameters content to import (the format returned by export).

Example:

{
"content": "<exported content string>"
}

emailTemplates

Manage email templates used by Google SecOps SOAR automation actions. Templates support placeholders that are substituted at runtime with case or alert data.

Operations summary

OperationHTTPDescription
createPOSTCreate a new email template
deleteDELETEDelete an email template
batchDeleteDELETEDelete multiple email templates in one request
getGETRetrieve a single email template
listGETList all email templates
updatePATCHUpdate an email template
exportPOSTExport email templates
importPOSTImport email templates

create

Parameters:

NameTypeRequiredDescription
displayNamestringYesHuman-readable template name displayed in the SOAR UI.
subjectstringNoEmail subject line. May contain {{placeholder}} variables.
bodystringNoEmail body. May contain {{placeholder}} variables. HTML is supported.

Example:

{
"displayName": "Incident Notification — High Severity",
"subject": "SOAR Incident: {{case.name}} — {{alert.severity}}",
"body": "<p>Case <strong>{{case.id}}</strong> requires immediate attention.</p>"
}

delete

Parameters:

NameTypeRequiredDescription
namestringYesFully-qualified resource name of the email template to delete.

batchDelete

Deletes multiple email templates in a single API call. More efficient than calling delete repeatedly.

Parameters:

NameTypeRequiredDescription
namesarrayYesArray of fully-qualified resource names to delete.

Example:

{
"names": [
"projects/my-project/locations/eu/instances/fca7f167.../emailTemplates/template-1",
"projects/my-project/locations/eu/instances/fca7f167.../emailTemplates/template-2"
]
}

get

Parameters:

NameTypeRequiredDescription
namestringYesFully-qualified resource name of the email template.

list

Parameters:

NameTypeRequiredDescription
pageSizenumberNoMaximum number of results to return.
pageTokenstringNoPagination token.

update

Parameters:

NameTypeRequiredDescription
namestringYesFully-qualified resource name of the template to update.
displayNamestringNoNew display name.
subjectstringNoNew subject line.
bodystringNoNew body.
updateMaskstringNoComma-separated field paths to update.

export

Exports all email templates for backup or migration.

Parameters: None.

import

Parameters:

NameTypeRequiredDescription
contentstringNoSerialised templates content returned by export.

environmentGroups

Manage environment groups — logical containers that group one or more SOAR environments. Environment groups are used in playbook routing to target actions at a specific group of environments rather than a single one.

Operations summary

OperationHTTPDescription
createPOSTCreate a new environment group
deleteDELETEDelete an environment group
getGETRetrieve a single environment group
listGETList all environment groups
updatePATCHUpdate an environment group

create

Parameters:

NameTypeRequiredDescription
displayNamestringYesEnvironment group display name.
descriptionstringNoDescription of the group's purpose.

Example:

{
"displayName": "Production Environments",
"description": "All production SOAR environments — actions here affect live cases"
}

delete

Parameters:

NameTypeRequiredDescription
namestringYesFully-qualified resource name of the environment group.

get

Parameters:

NameTypeRequiredDescription
namestringYesFully-qualified resource name of the environment group.

list

Parameters:

NameTypeRequiredDescription
pageSizenumberNoMaximum number of results.
pageTokenstringNoPagination token.

update

Parameters:

NameTypeRequiredDescription
namestringYesFully-qualified resource name.
displayNamestringNoNew display name.
descriptionstringNoNew description.
updateMaskstringNoComma-separated field paths to update.

environments

Manage SOAR environments — isolated execution contexts where Google SecOps SOAR automation agents run. Each environment has its own set of integration configurations, credentials, and agent connections. Environments are the primary unit of isolation between production, staging, and development automation.

Operations summary

OperationHTTPDescription
createPOSTCreate a new SOAR environment
deleteDELETEDelete a SOAR environment
getGETRetrieve a single SOAR environment
listGETList all SOAR environments
updatePATCHUpdate a SOAR environment
resetWeightsPOSTReset load-balancing weights for all environments

create

Parameters:

NameTypeRequiredDescription
displayNamestringYesEnvironment display name.
descriptionstringNoDescription of the environment's purpose (e.g. "Production — EU region").

Example:

{
"displayName": "Production — EU",
"description": "Production SOAR environment for EU Google SecOps instance"
}

delete

Caution: Deleting an environment removes all its configuration, agent bindings, and integration credentials. This operation is irreversible. Ensure no active playbooks reference this environment before deleting.

Parameters:

NameTypeRequiredDescription
namestringYesFully-qualified resource name of the environment.

get

Parameters:

NameTypeRequiredDescription
namestringYesFully-qualified resource name of the environment.

list

Parameters:

NameTypeRequiredDescription
pageSizenumberNoMaximum number of results.
pageTokenstringNoPagination token.

Example response fields of interest:

FieldDescription
nameFully-qualified resource name
displayNameHuman-readable name
descriptionEnvironment description
weightLoad-balancing weight for multi-environment deployments
retentionDurationData retention period in days

update

Parameters:

NameTypeRequiredDescription
namestringYesFully-qualified resource name.
displayNamestringNoNew display name.
descriptionstringNoNew description.
updateMaskstringNoComma-separated field paths to update.

resetWeights

Resets the load-balancing weights for all SOAR environments to their default values. Use after adding or removing environments from a multi-environment deployment to restore balanced agent distribution.

Parameters: None.

Example:

{}

formDynamicParameters

Manage dynamic parameters associated with SOAR manual action forms. Form dynamic parameters populate dropdown lists and other interactive fields when an analyst responds to a manual action. The saveForm operation persists a form's current parameter values so they are available in subsequent form renders.

Operations summary

OperationHTTPDescription
getGETRetrieve a single form dynamic parameter
listGETList all form dynamic parameters
saveFormPOSTSave a form with its current dynamic parameter values

get

Parameters:

NameTypeRequiredDescription
namestringYesFully-qualified resource name of the form dynamic parameter.

list

Parameters:

NameTypeRequiredDescription
pageSizenumberNoMaximum number of results.
pageTokenstringNoPagination token.

saveForm

Persists a form together with its current dynamic parameter values. This is typically called by automation to pre-populate form fields before presenting them to an analyst.

Parameters:

NameTypeRequiredDescription
formNamestringYesName of the form to save.
valuesobjectNoMap of parameter name → value to persist.

Example:

{
"formName": "BlockIPAddressForm",
"values": {
"target_firewall": "fw-prod-01",
"block_duration_hours": "24"
}
}

requestTemplates

Manage request templates used by automation actions that make HTTP requests to external services. A request template encapsulates the HTTP method, URL pattern, headers, and body structure so playbooks can reference a template by name rather than duplicating configuration.

Operations summary

OperationHTTPDescription
createPOSTCreate a new request template
deleteDELETEDelete a request template
getGETRetrieve a single request template
listGETList all request templates
updatePATCHUpdate a request template

create

Parameters:

NameTypeRequiredDescription
displayNamestringYesTemplate display name.
contentstringNoTemplate content (URL pattern, headers, body structure).

Example:

{
"displayName": "JIRA Create Issue",
"content": "POST https://jira.example.com/rest/api/2/issue\nContent-Type: application/json\n\n{\"fields\":{\"summary\":\"{{case.name}}\"}}"
}

delete

Parameters:

NameTypeRequiredDescription
namestringYesFully-qualified resource name.

get

Parameters:

NameTypeRequiredDescription
namestringYesFully-qualified resource name.

list

Parameters:

NameTypeRequiredDescription
pageSizenumberNoMaximum number of results.
pageTokenstringNoPagination token.

update

Parameters:

NameTypeRequiredDescription
namestringYesFully-qualified resource name.
displayNamestringNoNew display name.
contentstringNoNew content.
updateMaskstringNoComma-separated field paths to update.

soarDomains

Manage SOAR domain definitions. Domains are used to organise automation resources and segment automation by functional area or business unit. Domains can also be exported/imported for backup and cross-instance migration.

Operations summary

OperationHTTPDescription
createPOSTCreate a new SOAR domain
deleteDELETEDelete a SOAR domain
getGETRetrieve a single SOAR domain
listGETList all SOAR domains
updatePATCHUpdate a SOAR domain
exportPOSTExport SOAR domains
importPOSTImport SOAR domains

create

Parameters:

NameTypeRequiredDescription
displayNamestringYesDomain display name.
descriptionstringNoDomain description.

Example:

{
"displayName": "Network Security",
"description": "Automation domain for network security playbooks and actions"
}

delete

Parameters:

NameTypeRequiredDescription
namestringYesFully-qualified resource name.

get

Parameters:

NameTypeRequiredDescription
namestringYesFully-qualified resource name.

list

Parameters:

NameTypeRequiredDescription
pageSizenumberNoMaximum number of results.
pageTokenstringNoPagination token.

update

Parameters:

NameTypeRequiredDescription
namestringYesFully-qualified resource name.
displayNamestringNoNew display name.
descriptionstringNoNew description.
updateMaskstringNoComma-separated field paths to update.

export

Exports all SOAR domain definitions to a portable format. Use for backup or to seed a new Google SecOps instance.

Parameters: None.

import

Parameters:

NameTypeRequiredDescription
contentstringNoSerialised domain content returned by export.

soarNetworks

Manage SOAR network definitions. SOAR networks represent IP network segments relevant to your automation. They are used in entity enrichment, alert correlation, and decision logic within playbooks (e.g. "is this IP address in a trusted internal network?").

Operations summary

OperationHTTPDescription
createPOSTCreate a new SOAR network
deleteDELETEDelete a single SOAR network
deleteAllDELETEDelete all SOAR networks
getGETRetrieve a single SOAR network
listGETList all SOAR networks
updatePATCHUpdate a SOAR network
exportPOSTExport SOAR networks
importPOSTImport SOAR networks

create

Parameters:

NameTypeRequiredDescription
displayNamestringYesNetwork display name.
cidrstringNoNetwork CIDR range (e.g. 10.0.0.0/8).

Example:

{
"displayName": "Corporate Internal Network",
"cidr": "10.0.0.0/8"
}

delete

Parameters:

NameTypeRequiredDescription
namestringYesFully-qualified resource name.

deleteAll

Caution: Deletes every SOAR network definition in the instance. This operation is irreversible. Export networks before calling this operation if you need to restore them.

Parameters: None.

Example:

{}

get

Parameters:

NameTypeRequiredDescription
namestringYesFully-qualified resource name.

list

Parameters:

NameTypeRequiredDescription
pageSizenumberNoMaximum number of results.
pageTokenstringNoPagination token.

update

Parameters:

NameTypeRequiredDescription
namestringYesFully-qualified resource name.
displayNamestringNoNew display name.
cidrstringNoNew CIDR range.
updateMaskstringNoComma-separated field paths to update.

export

Parameters: None.

import

Parameters:

NameTypeRequiredDescription
contentstringNoSerialised network content returned by export.

legacySoarIdpMappingGroups

Manage Legacy SOAR identity provider (IDP) mapping groups. IDP mapping groups map external identity provider groups (from SAML or SSO providers) to Legacy SOAR permission groups and environments. This controls what level of access users who belong to an external directory group receive when they log into Google SecOps SOAR.

API Version: These operations use v1alpha — they are in preview and may change in future Google SecOps API releases.

Operations summary

OperationHTTPDescription
createPOSTCreate a new IDP mapping group
deleteDELETEDelete an IDP mapping group
getGETRetrieve a single IDP mapping group
listGETList all IDP mapping groups
updatePATCHUpdate an IDP mapping group
batchUpdatePOSTBatch update multiple IDP mapping groups
getExternalProvidersGETList available external identity providers
updateDefaultAccessSettingsPATCHUpdate the default access settings for IDP mapping

create

Parameters:

NameTypeRequiredDescription
displayNamestringYesMapping group display name (typically the external IdP group name or ID).

Example:

{
"displayName": "SG-security-analysts"
}

delete

Parameters:

NameTypeRequiredDescription
namestringYesFully-qualified resource name.

get

Parameters:

NameTypeRequiredDescription
namestringYesFully-qualified resource name.

list

Parameters:

NameTypeRequiredDescription
pageSizenumberNoMaximum number of results.
pageTokenstringNoPagination token.

Example response fields of interest:

FieldDescription
nameFully-qualified resource name
displayNameIDP group name
externalProviderNameName of the external identity provider (e.g. SecOps)
permissionGroupIdsArray of Legacy SOAR permission group IDs granted to this mapping
socRoleIdsArray of SOC role IDs granted
environmentsArray of environment IDs accessible (use ["*"] for all environments)
groupMembersArray of individual member mappings with groupMemberId and idpGroupId

update

Parameters:

NameTypeRequiredDescription
namestringYesFully-qualified resource name.
displayNamestringNoNew display name.
updateMaskstringNoComma-separated field paths to update.

batchUpdate

Updates multiple IDP mapping groups in a single API call.

Parameters:

NameTypeRequiredDescription
requestsarrayYesArray of individual update request objects, each containing a name and the fields to update.

Example:

{
"requests": [
{
"name": "projects/.../legacySoarIdpMappingGroups/group-id-1",
"displayName": "SG-security-analysts-updated"
}
]
}

getExternalProviders

Returns a list of all configured external identity providers available for IDP mapping. Use this to discover the valid externalProviderName values before creating mapping groups.

Parameters: None.

Example:

{}

Example response fields of interest:

FieldDescription
providerNameThe provider name to use in externalProviderName when creating mapping groups
identityProviderTypeProvider type (e.g. SAML, OIDC, NONE)
autoAddUserWhether users are automatically created on first login
defaultPermissionGroupDefault permission group assigned to new users from this provider
defaultSocRoleIdDefault SOC role assigned to new users

updateDefaultAccessSettings

Updates the default access settings applied to users from an IDP who do not match any specific mapping group.

Parameters:

NameTypeRequiredDescription
defaultRolestringNoDefault role to assign to unmapped IDP users.

legacySoarPermissionGroups

Read Legacy SOAR permission groups. Permission groups define the set of UI permissions (which SOAR screens and actions a user can access) granted to analysts and administrators. This resource is read-only — permission groups are managed in the Google SecOps SOAR UI.

API Version: Uses v1alpha.

Operations summary

OperationHTTPDescription
listGETList all Legacy SOAR permission groups

list

Parameters:

NameTypeRequiredDescription
pageSizenumberNoMaximum number of results.
pageTokenstringNoPagination token.

Example:

{
"pageSize": 20
}

Example response fields of interest:

FieldDescription
idPermission group ID (used in IDP mapping group permissionGroupIds)
permissionsArray of permission objects with permissionIdentifier and isEnabled

legacySoarUsers

Manage Legacy SOAR user accounts and their personal settings (locale, notifications). Legacy SOAR users are distinct from Google IAM/SecOps users — they are the user records maintained within the SOAR layer itself, inherited from the legacy Siemplify platform.

API Version: User CRUD operations (delete, get, list) use v1alpha. Locale and notification setting operations use v1.

Operations summary

OperationHTTPDescription
deleteDELETEDelete a Legacy SOAR user
getGETRetrieve a single Legacy SOAR user
listGETList all Legacy SOAR users
getLocalizationGETGet the localization settings for the authenticated user
getNotificationSettingsGETGet the notification settings for the authenticated user
updateLocalizationPATCHUpdate the localization settings for the authenticated user
updateNotificationSettingsPATCHUpdate the notification settings for the authenticated user

delete

Caution: Deleting a SOAR user is irreversible. Their history (case assignments, comments, wall records) remains in the system but the user account can no longer log in.

Parameters:

NameTypeRequiredDescription
namestringYesFully-qualified resource name (e.g. projects/.../legacySoarUsers/21).

get

Parameters:

NameTypeRequiredDescription
namestringYesFully-qualified resource name.

list

Parameters:

NameTypeRequiredDescription
pageSizenumberNoMaximum number of results.
pageTokenstringNoPagination token.

Example response fields of interest:

FieldDescription
nameFully-qualified resource name (contains numeric user ID)
emailUser email address
firstName / lastNameDisplay name components
loginIdentifierThe login identity string (typically matches email)
accountStateACTIVE, INACTIVE, or BLOCKED
userTypeEXTERNAL (SSO/IDP) or LOCAL
providerNameName of the identity provider that manages this user
permissionGroupsArray of { id, name } objects for assigned permission groups
socRolesArray of SOC role IDs
environmentsJsonJSON string listing accessible environments (["*"] = all)

getLocalization

Returns the locale and timezone settings for the currently authenticated service account user. Note that on some Google SecOps instances this endpoint is not available (returns HTTP 404) — this is an environment constraint, not a connector defect.

Parameters: None.

getNotificationSettings

Returns the in-app notification preferences for the currently authenticated user. As with getLocalization, this may return HTTP 404 on some instances.

Parameters: None.

updateLocalization

Parameters:

NameTypeRequiredDescription
localestringNoLocale code (e.g. en-US, es-ES).
timezonestringNoIANA timezone name (e.g. Europe/Madrid, America/New_York).

Example:

{
"locale": "en-US",
"timezone": "Europe/Madrid"
}

updateNotificationSettings

Parameters:

NameTypeRequiredDescription
emailNotificationsbooleanNoEnable (true) or disable (false) email notifications.

legacySoarUserAttachments

Manage file attachments uploaded by Legacy SOAR users to their personal workdesk area. Attachments can be documents, images, or any file a user wants to keep accessible from the SOAR workspace.

Note: This resource returns HTTP 404 on Google SecOps instances where the Legacy SOAR workdesk feature is not configured. This is an environment constraint.

Operations summary

OperationHTTPDescription
deleteDELETEDelete a user attachment
getGETRetrieve attachment metadata
listGETList all attachments for the user
downloadPOSTDownload the attachment content
uploadPOSTUpload a new attachment

delete

Parameters:

NameTypeRequiredDescription
namestringYesFully-qualified resource name of the attachment.

get

Parameters:

NameTypeRequiredDescription
namestringYesFully-qualified resource name.

list

Parameters:

NameTypeRequiredDescription
pageSizenumberNoMaximum number of results.
pageTokenstringNoPagination token.

download

Downloads the binary content of a user attachment.

Parameters:

NameTypeRequiredDescription
namestringYesFully-qualified resource name of the attachment to download.

upload

Uploads a new attachment file.

Parameters:

NameTypeRequiredDescription
filenamestringYesFile name to store the attachment under.
contentstringYesBase64-encoded file content.

Example:

{
"filename": "runbook-v3.pdf",
"content": "JVBERi0xLjQKJcOkw7..."
}

legacySoarUserNotifications

Manage in-app notifications for Legacy SOAR users. Notifications inform users of events such as case assignments, playbook completions, and manual action requests.

Note: This resource returns HTTP 404 on Google SecOps instances where the Legacy SOAR notification feature is not configured.

Operations summary

OperationHTTPDescription
getGETRetrieve a single notification
listGETList all notifications for the user
countPOSTCount unread notifications
markAsReadPOSTMark one or more notifications as read

get

Parameters:

NameTypeRequiredDescription
namestringYesFully-qualified resource name of the notification.

list

Parameters:

NameTypeRequiredDescription
pageSizenumberNoMaximum number of results.
pageTokenstringNoPagination token.

count

Returns the count of unread notifications for the authenticated user.

Parameters: None.

markAsRead

Marks one or more notifications as read so they no longer appear in the unread count.

Parameters:

NameTypeRequiredDescription
namesarrayYesArray of fully-qualified notification resource names to mark as read.

Example:

{
"names": [
"projects/.../legacySoarUsers/userNotifications/notif-001",
"projects/.../legacySoarUsers/userNotifications/notif-002"
]
}

legacySoarWorkdeskContacts

Manage workdesk contacts — a personal address book available on the Legacy SOAR analyst workdesk. Analysts can use workdesk contacts to quickly find and contact colleagues, vendors, or stakeholders during an incident.

Note: Returns HTTP 404 on Google SecOps instances where the Legacy SOAR workdesk is not configured.

Operations summary

OperationHTTPDescription
createPOSTCreate a new workdesk contact
deleteDELETEDelete a workdesk contact
getGETRetrieve a single workdesk contact
listGETList all workdesk contacts
updatePATCHUpdate a workdesk contact

create

Parameters:

NameTypeRequiredDescription
displayNamestringYesContact display name.
emailstringNoContact email address.

Example:

{
"displayName": "Network Operations Center",
"email": "[email protected]"
}

delete

Parameters:

NameTypeRequiredDescription
namestringYesFully-qualified resource name.

get

Parameters:

NameTypeRequiredDescription
namestringYesFully-qualified resource name.

list

Parameters:

NameTypeRequiredDescription
pageSizenumberNoMaximum number of results.
pageTokenstringNoPagination token.

update

Parameters:

NameTypeRequiredDescription
namestringYesFully-qualified resource name.
displayNamestringNoNew display name.
emailstringNoNew email.
updateMaskstringNoComma-separated field paths to update.

Manage quick-access links on the Legacy SOAR analyst workdesk. Workdesk links allow analysts to bookmark frequently used URLs (e.g. runbooks, ticketing systems, documentation portals) and access them without leaving the SOAR UI.

Note: Returns HTTP 404 on Google SecOps instances where the Legacy SOAR workdesk is not configured.

Operations summary

OperationHTTPDescription
createPOSTCreate a new workdesk link
deleteDELETEDelete a workdesk link
getGETRetrieve a single workdesk link
listGETList all workdesk links
updatePATCHUpdate a workdesk link

create

Parameters:

NameTypeRequiredDescription
displayNamestringYesLink display name.
urlstringYesThe URL the link points to.

Example:

{
"displayName": "Incident Response Runbook",
"url": "https://wiki.example.com/security/runbooks/incident-response"
}

delete

Parameters:

NameTypeRequiredDescription
namestringYesFully-qualified resource name.

get

Parameters:

NameTypeRequiredDescription
namestringYesFully-qualified resource name.

list

Parameters:

NameTypeRequiredDescription
pageSizenumberNoMaximum number of results.
pageTokenstringNoPagination token.

update

Parameters:

NameTypeRequiredDescription
namestringYesFully-qualified resource name.
displayNamestringNoNew display name.
urlstringNoNew URL.
updateMaskstringNoComma-separated field paths to update.

legacySoarWorkdeskNotes

Manage personal notes on the Legacy SOAR analyst workdesk. Workdesk notes allow analysts to maintain a private scratchpad for ongoing investigations, checklists, or reminders.

Note: Returns HTTP 404 on Google SecOps instances where the Legacy SOAR workdesk is not configured.

Operations summary

OperationHTTPDescription
createPOSTCreate a new workdesk note
deleteDELETEDelete a workdesk note
getGETRetrieve a single workdesk note
listGETList all workdesk notes
updatePATCHUpdate a workdesk note

create

Parameters:

NameTypeRequiredDescription
titlestringYesNote title.
contentstringNoNote content (plain text or markdown).

Example:

{
"title": "Ongoing Investigation — Lateral Movement Campaign",
"content": "## Key IOCs\n- 10.0.1.55\n- evil-domain.example.com\n\n## Next steps\n- Block on firewall\n- Notify IR team"
}

delete

Parameters:

NameTypeRequiredDescription
namestringYesFully-qualified resource name.

get

Parameters:

NameTypeRequiredDescription
namestringYesFully-qualified resource name.

list

Parameters:

NameTypeRequiredDescription
pageSizenumberNoMaximum number of results.
pageTokenstringNoPagination token.

update

Parameters:

NameTypeRequiredDescription
namestringYesFully-qualified resource name.
titlestringNoNew title.
contentstringNoNew content.
updateMaskstringNoComma-separated field paths to update.

Common Workflows

Sync SOAR environments to a CMDB

Many SOC teams maintain a CMDB (Configuration Management Database) or asset inventory. Use environments.list to pull the current SOAR environment list and push it to your CMDB.

1. environments.list { "pageSize": 100 }
2. For each environment in result.environments:
a. Extract name, displayName, description, weight, retentionDuration
b. Upsert record into CMDB using environment name as key
3. If result.nextPageToken is set, repeat with pageToken

Propagate dynamic parameters across instances

When you manage multiple Google SecOps instances (e.g. production and staging), use export/import to keep dynamic parameters in sync.

1. dynamicParameters.export {}  → obtain serialised content
2. (Switch credential to target instance)
3. dynamicParameters.import { "content": "<exported content>" }

Audit IDP group memberships

To produce a weekly access audit report:

1. legacySoarIdpMappingGroups.getExternalProviders {}
→ discover all configured identity providers
2. legacySoarIdpMappingGroups.list { "pageSize": 100 }
→ list all mapping groups with their permissionGroupIds and socRoleIds
3. legacySoarPermissionGroups.list { "pageSize": 50 }
→ resolve permission group IDs to human-readable names
4. legacySoarUsers.list { "pageSize": 200 }
→ cross-reference user accounts against mapping groups
5. Produce a CSV/report correlating user → IDP group → permission groups → environments

Provision a new SOAR deployment

When onboarding a new Google SecOps SOAR environment from scratch:

1. soarNetworks.import { "content": "<network baseline>" }
→ seed the standard corporate network list
2. soarDomains.import { "content": "<domain baseline>" }
→ seed the standard SOAR domain taxonomy
3. dynamicParameters.import { "content": "<param baseline>" }
→ seed standard automation parameters
4. emailTemplates.import { "content": "<template baseline>" }
→ seed standard notification templates
5. environments.create { "displayName": "Production", ... }
→ create the production environment
6. environmentGroups.create { "displayName": "All Environments", ... }
→ create environment groups for playbook routing

Best Practices

  1. Use updateMask on PATCH operations. Always supply updateMask with the exact field names you intend to change. Without it, the API may reset unset fields to empty values. Example: "updateMask": "value" when only changing a dynamic parameter's value.

  2. Paginate list calls. Never assume a single page covers all results. Always check for nextPageToken in the response and loop until it is absent or empty.

  3. Export before destructive operations. Before calling delete, deleteAll, or batchDelete, always call the corresponding export operation and store the output. This gives you a recovery path in the absence of native backup tooling.

  4. Apply least-privilege IAM. Use roles/chronicle.viewer for read-only workflows (auditing, monitoring, syncing to external systems). Only escalate to roles/chronicle.editor for workflows that must write, create, or delete resources.

  5. One service account per environment tier. Use separate service accounts for production and non-production Google SecOps instances. This prevents a compromised staging credential from affecting production.

  6. Do not hardcode instance values in playbooks. Store region, project, location, and instance values as NINA credential fields or as dynamic parameters — never hardcode them inside playbook logic.

  7. Treat Legacy SOAR resources as best-effort. The legacySoarUsers, legacySoarUserAttachments, legacySoarUserNotifications, and legacySoarWorkdesk* resources use v1alpha or are not available on all Google SecOps deployments. Always design workflows that handle HTTP 404 gracefully by checking whether the feature is available on your specific instance before depending on it.

  8. Rotate service account keys periodically. Google recommends rotating service account keys at least every 90 days. Create a new key, update the NINA credential, verify it works, then delete the old key. Keys can be rotated without any downtime.

  9. Monitor for 429 rate-limit responses. The connector retries automatically up to 3 times with exponential back-off, but if your automation issues many parallel requests, consider adding deliberate pacing between bulk operations.

  10. Name resources consistently. Use a naming convention for dynamic parameters, email templates, request templates, and domains that includes an environment prefix (e.g. prod_siem_endpoint, staging_siem_endpoint). This makes it easy to identify which resources belong to which environment tier when listing across multiple instances.


Troubleshooting

ErrorCauseResolution
serviceAccountJson is requiredThe JSON key field was left empty or whitespace-onlyPaste the entire contents of the downloaded .json key file into the serviceAccountJson field
failed to parse service account JSONThe JSON key is malformed or truncatedRe-download the key from GCP Console and paste it again; avoid line-ending conversion issues
token acquisition failedThe service account does not exist, the key has been revoked, or the token_uri is unreachableVerify the service account is active in GCP Console; check that the key has not been deleted from the Keys tab
HTTP 403 PERMISSION_DENIEDThe service account lacks the required Google SecOps IAM roleGrant roles/chronicle.viewer (read) or roles/chronicle.editor (write) at the project level
HTTP 404 on Legacy SOAR resourcesThe Legacy SOAR workdesk or user settings feature is not enabled on this Google SecOps instanceThese endpoints are optional; design your workflow to skip gracefully when a 404 is returned
HTTP 404 on SOAR Automation resourcesIncorrect project, location, or instance valuesVerify all four credential fields match the exact values shown in Google SecOps UI → Settings → Instance
HTTP 429 RESOURCE_EXHAUSTEDGoogle SecOps API rate limit reachedThe connector retries automatically; if sustained, reduce parallelism in your workflow
region is requiredThe region field was left blankSelect a valid region from the dropdown (e.g. eu, us)
instance is requiredThe instance field was left blankEnter the Google SecOps instance UUID from Google SecOps UI → Settings → Instance
location is requiredThe location field was left blankEnter the GCP location string; for most EU deployments this is eu
Empty {} response body on listThe resource collection is empty (no items created yet)This is normal for newly provisioned instances; create items before listing them

Verifying credentials manually

Use the following curl snippet to verify that your service account JSON key can obtain a valid Google access token and reach the Google SecOps SOAR API:

# 1. Obtain an access token using the service account key
ACCESS_TOKEN=$(python3 -c "
import google.oauth2.service_account as sa
import google.auth.transport.requests as tr
creds = sa.Credentials.from_service_account_file(
'sa-key.json',
scopes=['https://www.googleapis.com/auth/cloud-platform']
)
req = tr.Request()
creds.refresh(req)
print(creds.token)
")

# 2. List SOAR environments (lightweight read-only call)
curl -s -H "Authorization: Bearer $ACCESS_TOKEN" \
"https://${REGION}-chronicle.googleapis.com/v1/projects/${PROJECT}/locations/${LOCATION}/instances/${INSTANCE}/environments?pageSize=1"

Replace REGION, PROJECT, LOCATION, and INSTANCE with your actual values. A successful response returns either an environments array or an empty {} object. A 403 response means the IAM role is not yet applied.

Running the integration tests

CHRONICLE_SERVICE_ACCOUNT_JSON="$(cat sa-key.json)" \
CHRONICLE_REGION=eu \
CHRONICLE_PROJECT=my-gcp-project \
CHRONICLE_LOCATION=eu \
CHRONICLE_INSTANCE=fca7f167-b9d1-43b1-9d03-0257d31dcb63 \
go test -v -count=1 -timeout 120s ./internal/integrations/chronicle-soar/...

Generating an evidence report

CHRONICLE_SERVICE_ACCOUNT_JSON="$(cat sa-key.json)" \
CHRONICLE_REGION=eu \
CHRONICLE_PROJECT=my-gcp-project \
CHRONICLE_LOCATION=eu \
CHRONICLE_INSTANCE=fca7f167-b9d1-43b1-9d03-0257d31dcb63 \
./scripts/generate-evidence.sh chronicle-soar

The report is written to evidence/chronicle-soar/<date>-chronicle-soar-report.md.


Support

For issues with this integration, contact support with the following information:

  • The resource and operation you were calling (e.g. environments.list)
  • The Google SecOps API region and GCP project (never share the private key or token)
  • The full error message returned
  • Whether the issue reproduces consistently or intermittently
  • The Google SecOps instance ID (UUID only — do not share the full service account JSON)

Google SecOps SOAR API reference:

  • SOAR Automation API: https://cloud.google.com/chronicle/docs/reference/rest/v1/projects.locations.instances.environments
  • Legacy SOAR API: https://cloud.google.com/chronicle/docs/reference/rest/v1alpha/projects.locations.instances.legacySoarUsers
  • Google SecOps IAM roles: https://cloud.google.com/iam/docs/understanding-roles#chronicle-roles
  • Service account key management: https://cloud.google.com/iam/docs/creating-managing-service-account-keys

Updated: 2026-07-07