Integrating Google Cloud Platform (GCP) with Zscaler MDR provides enhanced threat detection and response capabilities for cloud environments. You can gain deeper visibility into cloud activities, identify potential threats faster, and mitigate risks more effectively. To integrate Google Cloud Platform (GCP) with Zscaler MDR, follow the procedure below from beginning to end. Once all steps are completed successfully, the data should be ingested into Zscaler MDR within ~20 minutes.
Note
You can integrate GCP with Zscaler MDR at an organization or project level. Steps are provided for both organizational and project-level integrations.
Account Limits
Zscaler MDR restricts all cloud integrations to 2,000 accounts or external services in a single subdomain. Please contact your Customer Success Manager if you anticipate hitting this limit.
Prerequisites
You must be subscribed to the Zscaler MDR Cloud Control Plane license
To set up the integration, you need one of the following administrative roles (the Editor and Owner roles usually include these permissions):
Organization Administrator or Organization Role Administrator
Role Administrator or IAM Admin
To create the organization-level Log Sink that sends logs to Zscaler MDR, you need one of the following roles (the Owner role usually includes these permissions):
Logging Admin
Logs Configuration Writer
If you use a Domain Restricted Sharing Policy or your Organization was created after May 3, 2024:
You’ll need to update your GCP Organization policies to give Zscaler MDR the necessary access. Please follow the Console steps under the Setting the organization policy section in Google’s Restricting identities by domain documentation, noting the following values and caveats:
Step 9: Use these values:
Display Name:
redcanary.comDIRECTORY_CUSTOMER_ID:
C02jg03apStep 10: This should be skipped unless you’re adding multiple Organizations to your Domain Restricted Sharing policy.
Step 12: This should be skipped because setting tag constraints could interfere with the Zscaler MDR GCP integration.
If you have any issues or concerns, please reach out to the Zscaler MDR Support team.Integration Resources
Integration Resources
Throughout this integration, you will create resources within your GCP environment. These resources enable Zscaler MDR to acquire your logs and monitor your systems.
Pub/Sub topic. This topic, named red-canary-log-export, receives all published messages.
Pub/Sub topic subscription. A red-canary-log-ingest subscription is attached to the ‘red-canary-log-export’ topic and is consumed by Zscaler MDR.
A Google Logging Sink named red-canary-log-sink receives all messages from the GCP Logging Service and publishes them on the red-canary-log-export topic. This Sink will receive messages from all the children’s projects at an organizational level.
A new custom role named red_canary_ingestor provides the necessary permissions for the Zscaler MDR Integration.
A new policy binding assigns the red_canary_ingestor role to the region-appropriate Zscaler MDR service account for your organization or project:
EU01: serviceAccount:red-canary-gcp-log-ingest@rc-nest-emea-prod-1.iam.gserviceaccount.com
IND01: serviceAccount:red-canary-gcp-log-ingest@rc-nest-apj-prod-1.iam.gserviceaccount.com
NEST0: red-canary-gcp-log-ingest@red-canary-platform-production.iam.gserviceaccount.com
A second binding policy assigns the built-in roles/pubsub.subscriber role to the Zscaler MDR service account, enabling Zscaler MDR to subscribe to the subscription.
Step 1: Collect information required for integration
To integrate your Organization with Zscaler MDR, you’ll need to collect a few pieces of information:
Organization ID
Provisioning Project ID
Provisioning Project Number
In the Zscaler MDR portal, click Integrations.
.png?sv=2026-02-06&spr=https&st=2026-09-11T16%3A31%3A18Z&se=2026-09-11T16%3A50%3A18Z&sr=c&sp=r&sig=OkGz2JyJGrnqLKxHEFJoSvjNvAmYJn%2Bd1GJX3ElwlHk%3D)
From the Integrations section, locate and then click Google Cloud Platform.
.png?sv=2026-02-06&spr=https&st=2026-09-11T16%3A31%3A18Z&se=2026-09-11T16%3A50%3A18Z&sr=c&sp=r&sig=OkGz2JyJGrnqLKxHEFJoSvjNvAmYJn%2Bd1GJX3ElwlHk%3D)
Enter a name for your new GCP integration.
Choose the scope of your integration by selecting Organization or Project.
.png?sv=2026-02-06&spr=https&st=2026-09-11T16%3A31%3A18Z&se=2026-09-11T16%3A50%3A18Z&sr=c&sp=r&sig=OkGz2JyJGrnqLKxHEFJoSvjNvAmYJn%2Bd1GJX3ElwlHk%3D)
Organization
If you selected Organization, enter your Organization ID.
To locate your Organization ID, navigate to your GCP cloud console and then select your Organization from the resource browser.
Copy your Organization ID, and then paste it into Zscaler MDR.
.png?sv=2026-02-06&spr=https&st=2026-09-11T16%3A31%3A18Z&se=2026-09-11T16%3A50%3A18Z&sr=c&sp=r&sig=OkGz2JyJGrnqLKxHEFJoSvjNvAmYJn%2Bd1GJX3ElwlHk%3D)
Enter your Provisioning Project ID.
Note: The Provisioning Project can be any Project within your Organization; you can use an existing Project or create a new one. This setup provisions a Pub/Sub Topic and Subscription within this Project to use as the destination for log routing.
To locate your Provisioning Project ID, navigate to your GCP cloud console and select your Project in the resource explorer.
Copy your Project ID, and then paste it into Zscaler MDR.
.png?sv=2026-02-06&spr=https&st=2026-09-11T16%3A31%3A18Z&se=2026-09-11T16%3A50%3A18Z&sr=c&sp=r&sig=OkGz2JyJGrnqLKxHEFJoSvjNvAmYJn%2Bd1GJX3ElwlHk%3D)
From Zscaler MDR, enter any Excluded Projects; this step is optional.
Note: Excluded Projects is a comma-separated list of project ID(s) that will be excluded from the Zscaler MDR scan.
From Zscaler MDR, click Next.
Project
If you selected Project, enter your Project ID.
.png?sv=2026-02-06&spr=https&st=2026-09-11T16%3A31%3A18Z&se=2026-09-11T16%3A50%3A18Z&sr=c&sp=r&sig=OkGz2JyJGrnqLKxHEFJoSvjNvAmYJn%2Bd1GJX3ElwlHk%3D)
To locate your Provisioning Project ID, navigate to your GCP cloud console and then select your Project in the resource explorer.
Copy your Project ID, and then paste it into Zscaler MDR.
.png?sv=2026-02-06&spr=https&st=2026-09-11T16%3A31%3A18Z&se=2026-09-11T16%3A50%3A18Z&sr=c&sp=r&sig=OkGz2JyJGrnqLKxHEFJoSvjNvAmYJn%2Bd1GJX3ElwlHk%3D)
From Zscaler MDR, click Next.
Step 2: Enable Data Access Logs
Enabling Data Access logs ensures Zscaler MDR can monitor activity in your GCP environment.
From Zscaler MDR, select I need to enable Data Access Logs.
To complete this process, navigate to your GCP Audit Logs.
Select your Organization or Project from the resource browser.
Click Set Default Configuration.
Select Admin Read, Data Read, and Data Write.
Click Save.
.png?sv=2026-02-06&spr=https&st=2026-09-11T16%3A31%3A18Z&se=2026-09-11T16%3A50%3A18Z&sr=c&sp=r&sig=OkGz2JyJGrnqLKxHEFJoSvjNvAmYJn%2Bd1GJX3ElwlHk%3D)
From Zscaler MDR, select I’ve enabled Data Access logs.
Note: To prevent unnecessary charges from GCP, ensure to opt out of data storage. GCP automatically directs logs to a default storage sink for storage. For our purposes, we require only the routing of these logs, not their storage.
.png?sv=2026-02-06&spr=https&st=2026-09-11T16%3A31%3A18Z&se=2026-09-11T16%3A50%3A18Z&sr=c&sp=r&sig=OkGz2JyJGrnqLKxHEFJoSvjNvAmYJn%2Bd1GJX3ElwlHk%3D)
Click Next.
Step 3: Configure Telemetry routing to Zscaler MDR
Zscaler MDR provides setup files to provision resources in your GCP environment to enable the integration process.
The integration process can be completed in two different ways:
From Zscaler MDR, choose the scope of your integration by selecting Bash or Terraform.
Bash
Click setup files to download the files that Zscaler MDR has provided.
.png?sv=2026-02-06&spr=https&st=2026-09-11T16%3A31%3A18Z&se=2026-09-11T16%3A50%3A18Z&sr=c&sp=r&sig=OkGz2JyJGrnqLKxHEFJoSvjNvAmYJn%2Bd1GJX3ElwlHk%3D)
Unzip the files you downloaded in the previous step.
Navigate to your GCP Cloud Shell, and then click Activate Cloud Shell.
.png?sv=2026-02-06&spr=https&st=2026-09-11T16%3A31%3A18Z&se=2026-09-11T16%3A50%3A18Z&sr=c&sp=r&sig=OkGz2JyJGrnqLKxHEFJoSvjNvAmYJn%2Bd1GJX3ElwlHk%3D)
Upload the setup files to your GCP Cloud Shell.
.png?sv=2026-02-06&spr=https&st=2026-09-11T16%3A31%3A18Z&se=2026-09-11T16%3A50%3A18Z&sr=c&sp=r&sig=OkGz2JyJGrnqLKxHEFJoSvjNvAmYJn%2Bd1GJX3ElwlHk%3D)
Use the following command to grant execution permissions to the setup file:
For Organization
chmod +x organization_provisioning.shFor Project
chmod +x project_provisioning.sh
Initiate the setup files with the following command to allocate the necessary resources for this integration:
For Organization
./organization_provisioning.sh --organization-id ORGANIZATION_ID --provisioning-project-id PROVISIONING_PROJECT_IDFor Project
./project_provisioning.sh --provisioning-project-id PROJECT_ID
If you receive an Authorization confirmation pop-up, click Authorize.
From Zscaler MDR, select I’ve completed the provisioning steps.
.png?sv=2026-02-06&spr=https&st=2026-09-11T16%3A31%3A18Z&se=2026-09-11T16%3A50%3A18Z&sr=c&sp=r&sig=OkGz2JyJGrnqLKxHEFJoSvjNvAmYJn%2Bd1GJX3ElwlHk%3D)
Click Save.
Terraform
If you selected Terraform, click setup files to download the files that Zscaler MDR has provided.
.png?sv=2026-02-06&spr=https&st=2026-09-11T16%3A31%3A18Z&se=2026-09-11T16%3A50%3A18Z&sr=c&sp=r&sig=OkGz2JyJGrnqLKxHEFJoSvjNvAmYJn%2Bd1GJX3ElwlHk%3D)
Integrate the Terraform template downloaded in the previous step into your Infrastructure as Code (IaaC) pipeline. Follow your pipeline’s standard process for deploying Terraform templates.
It’s essential to edit the terraform files by replacing all instances of information contained in ‘<>’ with the necessary information. This step is crucial as it ensures the correct configuration for the organization or project-level integration.
This process includes:
- The Project ID of your provisioning Project
- The region where resources will be created in your provisioning Project
- Organization ID or Project ID
- Project Number.png?sv=2026-02-06&spr=https&st=2026-09-11T16%3A31%3A18Z&se=2026-09-11T16%3A50%3A18Z&sr=c&sp=r&sig=OkGz2JyJGrnqLKxHEFJoSvjNvAmYJn%2Bd1GJX3ElwlHk%3D)
Add the Terraform template to your IAC.
From your command line, enter the code below:
terraform planNote: When you plan your terraform, ensure that there are no unexpected errors, resources being created, or resources being deployed.
From your command line, enter the code below:
terraform apply
From Zscaler MDR, select I’ve completed the provisioning steps.
.png?sv=2026-02-06&spr=https&st=2026-09-11T16%3A31%3A18Z&se=2026-09-11T16%3A50%3A18Z&sr=c&sp=r&sig=OkGz2JyJGrnqLKxHEFJoSvjNvAmYJn%2Bd1GJX3ElwlHk%3D)
Click Save.
Ingest Details
Zscaler MDR ingests Google Cloud Platform (GCP) Audit logs from GCP environments. Additionally, Zscaler MDR integrates with GCP to scan your environment regularly to discover new projects and resources.
Environments covered
Google Cloud Platform
Ingest details (GCP Cloud Audit Logs)
Zscaler MDR ingests the following type of activity from GCP Cloud Audit Logs:
Admin Activity
Data Access
Policy Denied
System Events
Currently, Zscaler MDR doesn’t collect Security Command Center alerts from GCP.
Finally, Zscaler MDR integrates with GCP to scan your environment regularly to discover new projects and resources. This integration is established via the Cloud Asset API and the IAM Custom Role configured during onboarding, enabling Zscaler MDR to read your GCP environment. The API method used is SearchAllResources, which requires the cloudasset.assets.searchAllResources permission, ensuring comprehensive visibility into your projects and resources.
FAQ
What permissions are Zscaler MDR asking for?
The ingest role is created with bindings to the following GCP predefined IAM roles:
Roles | Conditions | Why does Zscaler MDR need this? |
|---|---|---|
Attached to Zscaler MDR Ingest: | ||
|
| Allows Zscaler MDR to manage the Log Router Sink configuration for the Log Sink created for Telemetry Routing in Step 3 of the Integration Guide |
|
| Allows Zscaler MDR to read from the subscription |
Attached to GCP Log Sink: | ||
| Allows the Log Sink to publish messages to the topic | |
Additionally, the following permissions are necessary for Zscaler MDR to perform specific actions, such as listing resources, getting sinks, monitoring the sink, getting subscriptions on a pub-sub topic, and listing things with the resource manager:
Permission | Why does Zscaler MDR need this? |
|---|---|
| Allows Zscaler MDR to search information about your GCP Organization to enumerate projects and resources as they are added for monitoring, as well as License calculation purposes |
| Allows Zscaler MDR to read filtered Cloud Monitoring measurements |
| Allows Zscaler MDR to see information about the ingest topic |
| Allows Zscaler MDR to validate that the permissions for managing the ingest topics is correctly configured |
| Allows Zscaler MDR to see information about the subscription to the ingest topic for purposes of ingesting data |
| Allows Zscaler MDR to read GCP Project information to enumerate resources as they are added for monitoring, as well as License calculation purposes |
| Allows Zscaler MDR to list GCP Projects in the organization to enumerate resources as they are added for monitoring, as well as License calculation purposes |
For project scoped integrations only: | |
| Allows Zscaler MDR to validate access to the required permissions across the approved projects |
For organization scoped integrations only: | |
| Allows Zscaler MDR to read GCP Folder information to enumerate resources, and projects within an Organization organized by folders as they are added for monitoring, as well as License calculation purposes |
| Allows Zscaler MDR to list GCP Folders in the organization to enumerate resources, and projects within an Organization organized by folders as they are added for monitoring, as well as License calculation purposes |
| Allows Zscaler MDR to list GCP Organizations in your account to enumerate projects and resources as they are added for monitoring, as well as License Calculation purposes |
| Allows Zscaler MDR to validate access to the required permissions across the integrated organziation |
Is the roles/logging.configWriter required?
Yes, this role is required for Zscaler MDR to be able to manage the configuration for the Log Sink that’s used to route telemetry. Zscaler MDR is only able to manage the configuration for the Log Sink used in the integration.
How long does it take for the integration to show as Active after setup?
The integration will be created and set as “Provisioning”. Once it is sending telemetry to Zscaler MDR, the status will automatically update to “Active”. This process may take around 20 minutes.
Why does Zscaler MDR need to access the Log Sink resource in my GCP environment?
Zscaler MDR requires this access to manage the inclusive and exclusive filtering of logs for the Integration’s Log Sink. Zscaler MDR will then adjust the Log Sink’s filters to prioritize the routing of data that is useful for security analysis while balancing the amount of data egress from a customer’s environment.
What changes will Zscaler MDR make to my GCP environment with this access?
Zscaler MDR will only focus on making changes to the Integration’s Log Sink and its inclusive and exclusive filtering configuration to determine which logs are routed to Zscaler MDR.
What scope of access is granted to Zscaler MDR by the IAM Role Binding?
The access granted to Zscaler MDR is limited to the Log Sink used by the Integration to route logs to Zscaler MDR. This access is configured using a conditional role binding that only grants Zscaler MDR access to Log Sinks matching the expected resource naming pattern for the Integration.
Organization-level Integration
organizations/<YOUR_ORGANIZATION_ID>/sinks/red-canary-log-sinkProject-level Integration
projects/<YOUR_PROJECT_ID>/sinks/red-canary-log-sink
Why must I set my permissions to “Admin Read, Data Read, and Data Write?”
To emphasize the importance of Data Access logs, we have implemented a validation process that requires their enablement during Integration creation. This ensures that customers cannot proceed without activating this critical security measure.
What’s the cost of hosting the GCP Pub/Sub as part of this integration?
All environments are different and your expected data volumes will change the price significantly. To estimate costs, you can go to Google’s Pub/Sub pricing page and work through your specific details.