GCP Shared Responsibility Model Explained: Who Secures What?
The shared responsibility model defines who is responsible for which parts of security in Google Cloud. Google secures the infrastructure your workloads run on. You secure what you deploy onto that infrastructure. Understanding where that line sits, and how it shifts depending on which GCP service you use, is one of the most important things to get right before putting anything in production.
The simple version
Here is the clearest way to put it: Google secures the cloud. You secure what you put in the cloud.
That one-liner is accurate but incomplete. The real picture is more specific:
Google always secures: physical hardware, data centres, the global network, hypervisor isolation between tenants, and the reliability of managed services
You always secure: IAM and access control, your application code, your data, service account permissions, and how your resources are exposed on the network
The split shifts by service type: with VMs you own the OS and installed software; with Cloud Run, Google owns the OS but you own your container image; with Cloud SQL, Google patches the database engine but you still own access control, network rules, and encryption choices
Think of it like renting property
Renting a house (Compute Engine VM): the landlord maintains the building structure, plumbing, and roof. Everything inside is yours to manage. If the boiler breaks, that is on the landlord. If you leave the front door unlocked, that is on you.
Renting a serviced apartment (Cloud Run / App Engine): cleaning, maintenance, and utilities are included. You still lock your door, store your valuables safely, and control who has a key.
Staying in a hotel room (BigQuery / Cloud SQL): almost everything is managed for you. But you still put your valuables in the safe, you decide who you invite in, and hotel staff cannot see what is in your luggage.
In all three cases, Google is the property owner. IAM is your lock. Your data is your luggage. No amount of property management changes who owns those.
Most cloud security incidents do not happen because Google’s infrastructure was compromised. They happen because customers leave a storage bucket public, grant overly broad IAM roles, or skip patching a VM. The shared responsibility model is the framework that explains why those are the customer’s problem, not Google’s.
What Google secures
Google’s responsibility covers the infrastructure GCP runs on. You cannot configure, inspect, or audit any of this directly. Google manages it on your behalf:
Physical data centre security: building access control, hardware, power, environmental systems, and physical surveillance
Network infrastructure: the global fibre backbone, undersea cables, hardware routing, and DDoS mitigation at the network edge
Hypervisor and hardware isolation: your VM cannot read memory from another customer’s VM running on the same physical host
OS and runtime patching for managed services: when you use Cloud Run, App Engine, or Cloud SQL, Google patches the underlying OS and database engine
Managed service reliability: uptime SLAs for Cloud SQL, Cloud Run, BigQuery, and other managed offerings
Compliance certifications: ISO 27001, SOC 2, PCI-DSS, and others apply to Google’s infrastructure layer, not automatically to what you build on top of it
Google holding PCI-DSS certification for its infrastructure does not make your application PCI-DSS compliant. Your application design, data handling, and access controls must meet the requirements independently. Google’s certifications cover the infrastructure layer only.
What you always secure
These responsibilities never shift to Google, regardless of which GCP service you use:
IAM and access control: who has what permissions on which resources. A misconfigured IAM policy that grants
roles/editorto everyone is your decision. Fixing it is your job.Service account permissions: what your workloads are allowed to do. Overly permissive service accounts are one of the most common cloud security problems and one of the easiest to prevent.
Your application code: SQL injection vulnerabilities, insecure API endpoints, hardcoded credentials, and logic bugs. Google cannot inspect your application logic or identify those vulnerabilities for you.
Data classification and handling: knowing which data is sensitive, where you store it, and whether it is encrypted appropriately.
Regulatory compliance for your data: GDPR, HIPAA, or any regulation governing data you collect is your compliance obligation, not Google’s.
Network exposure decisions: whether a VM, Cloud Run service, or database is reachable from the internet. GCP’s network is private by default. You make it public.
There is no configuration, no managed service, and no Google product that takes IAM off your plate. Every role binding in your project was created by a human on your team. If those bindings are too broad, Google has no automatic mechanism to tighten them for you. That is the shared responsibility model in its most important form.
How responsibility shifts by service type
The core principle: the more managed the service, the more infrastructure Google handles. But you always retain ownership of identity, access, data, and application-level security, no matter which service type you choose.
Compute Engine (IaaS)
You manage the most here. Google secures the physical hardware and hypervisor, but everything inside your VM is your responsibility: the operating system, installed packages, patch schedule, firewall configuration, and the applications running on it. An unpatched kernel vulnerability on a Compute Engine VM is your risk. If someone breaks in through an outdated, unpatched service on your VM, that is a customer responsibility failure, not a GCP infrastructure flaw.
Cloud Run and App Engine (PaaS)
Google manages the OS and runtime underneath your container. Your responsibility shifts to what
is inside the container: your application code, your base image choice, and the dependencies
you bundle. A vulnerable base image (for example, node:18 with known CVEs) in a
Cloud Run container is your responsibility
even though Google manages the host OS. Rebuild images regularly, use minimal base images, and
scan for vulnerabilities before deploying.
BigQuery and Cloud SQL (managed services)
Google runs the service. You are responsible for who can access it, which networks can connect,
how data is encrypted at the application level, and what you store in it. A
Cloud SQL instance with
roles/editor granted to an overly broad group is a customer configuration mistake.
Google guarantees availability. It does not configure your access controls.
When you pick Compute Engine over Cloud Run, you are choosing to take on OS patching, firewall management, and software maintenance in exchange for more control. That trade-off is valid for many workloads. Just make it deliberately, knowing which security tasks come with it.
Responsibility at a glance
This table shows who owns each layer depending on the service type. “Google” means Google handles it automatically. “You” means it is your responsibility to configure and maintain. “Shared” means Google provides the mechanism and you decide how to use it.
| Layer | Compute Engine (IaaS) | Cloud Run / App Engine (PaaS) | BigQuery / Cloud SQL (managed) |
|---|---|---|---|
| Physical hardware and data centres | |||
| Network infrastructure | |||
| Hypervisor / tenant isolation | |||
| Host OS patching | |||
| Guest OS / runtime patching | You | ||
| Installed software and middleware | You | You (container contents) | |
| Application code | You | You | You |
| IAM and access control | You | You | You |
| Network firewall / ingress rules | You | You (ingress settings) | You (authorised networks) |
| Encryption at rest (default) | Google (Google-managed keys) | Google (Google-managed keys) | Google (Google-managed keys) |
| Encryption key management | Shared | Shared | Shared |
| Your data | You | You | You |
Shared areas: where both sides play a role
Encryption
Google encrypts all data at rest by default using Google-managed keys. You decide whether to use customer-managed encryption keys (CMEK) via Cloud KMS for tighter control over key lifecycle and access. Application-level encryption (encrypting specific fields before writing to a database) is entirely your responsibility. See Encryption in Google Cloud and Customer-Managed Encryption Keys for the full picture.
Audit logging
GCP generates Admin Activity audit logs automatically and for free. You decide what else to enable: Data Access logs for services handling sensitive data, how long to retain logs, and whether to export them to Cloud Storage or BigQuery for compliance. Leaving Data Access logs disabled for services that handle regulated data is a customer oversight, not a platform default. See Cloud Audit Logs for what to enable and how to query it.
Admin Activity logs (who changed what configuration) are always enabled. Data Access logs (who read or wrote your actual data) are off by default across every service. If you are storing anything sensitive, turn them on. This is your call, not Google’s.
Network configuration
GCP provides the network fabric via VPC. You configure which resources are reachable from the internet, which subnets connect to what, and which firewall rules apply. The network is private by default. It only becomes exposed when you configure it to be.
When you need to think about shared responsibility
The shared responsibility model is not abstract theory. It has direct practical implications at specific moments in any GCP project:
Deploying your first workloads: before you put anything in production, you need to know which security tasks are yours. Defaulting to “Google handles security” is how misconfigurations happen.
Choosing between VMs, containers, and managed services: the service type determines your security surface. Running a Compute Engine VM means you own the OS patch cycle. Cloud Run shifts that to Google, but you now own your container image. Make the trade-off deliberately.
Granting IAM roles: IAM is always your responsibility. Every time you add a binding, you are making a shared responsibility decision.
Using managed databases: Cloud SQL and BigQuery remove infrastructure management, but access control, network exposure, and encryption configuration are still yours.
Preparing for audits or compliance reviews: auditors will ask what Google is responsible for versus what your team is responsible for. The shared responsibility model is the direct answer to that question.
Responding to a security incident: knowing which layer an incident occurred in tells you whether Google’s infrastructure team is responsible or whether your team must remediate it.
Common mistakes
Assuming Google secures everything in GCP. Google secures the infrastructure. If your IAM is misconfigured, your application has vulnerabilities, or your Cloud Storage bucket is public, that is your problem. “Google Cloud is secure” refers to the platform, not what you deploy on it.
Not patching Compute Engine VM guest operating systems. Google patches the hypervisor host. The Linux or Windows installation inside your VM is yours. Use Cloud Run or App Engine if you want Google to handle OS maintenance. If you need VMs, use VM Manager for automated OS patch management.
Thinking managed services remove all security work. Cloud SQL patches the database engine. You still configure authorised networks, set IAM roles, choose encryption settings, enable audit logging, and secure the application connecting to it. Managed services reduce the surface. They do not eliminate it.
Leaving IAM open because it seems easier. Granting
roles/editorto everyone, reusing the default Compute Engine service account, or making storage buckets public are customer decisions. Google cannot override them unless you set an Organisation Policy. These mistakes are the leading cause of cloud data exposures.Storing secrets in environment variables or application code. Hardcoded credentials and environment variables are not secure storage for database passwords, API keys, or certificates. Use Secret Manager and rotate secrets regularly.
Not enabling Data Access audit logs for sensitive services. Admin Activity logs are on by default. Data Access logs (which record who read or wrote your data) are off by default. For any service handling sensitive data, enabling these is your responsibility, not Google’s.
How to apply this in practice
For every project you deploy in GCP, run through these checks. These are the customer-side responsibilities that are most commonly skipped.
For every GCP service
Apply IAM least privilege: grant only the roles actually needed, scoped to the narrowest resource possible
Create dedicated service accounts per workload; do not share the default Compute Engine service account across services
- Enable Data Access audit logs for any service handling sensitive or regulated data
Store secrets in Secret Manager, not in environment variables, source code, or configuration files
Review IAM bindings periodically. They accumulate over time, and stale access is a real risk.
For Compute Engine VMs
Enable OS patch management or schedule manual patching for the guest OS. This is fully your responsibility, not Google’s.
- Use Shielded VMs to protect against boot and firmware-level attacks
Use OS Login or Identity-Aware Proxy (IAP) for SSH access instead of opening port 22 to the internet
Review firewall rules and remove any that allow broader access than the workload actually needs
For containerised workloads (Cloud Run and GKE)
Keep base images up to date and rebuild on a regular schedule. Outdated container images are your responsibility, not Google’s.
Scan container images for known vulnerabilities before deploying (Artifact Registry can do this automatically)
Set Cloud Run ingress to “Internal only” or “Load balancer” for services that are not intended to be public
For GKE, review GKE cluster security settings, including node pool service accounts and Workload Identity configuration
For managed databases and storage
Configure authorised networks and use private IPs for Cloud SQL. Do not leave database instances with a public IP unless you have a specific reason and strict firewall rules.
Review Cloud Storage bucket IAM and confirm no bucket has
allUsersaccess unless that is explicitly intentionalEnable customer-managed encryption keys for data that requires it under your compliance requirements
Use VPC Service Controls to restrict access to managed services to traffic from within your VPC perimeter
Before you deploy anything, write down which layer it sits at (IaaS, PaaS, or managed service), then list the security tasks that come with that choice. It takes five minutes and prevents the most common omissions.
Summary
- Google secures physical infrastructure, hardware, network, hypervisor, and managed service reliability
- You are always responsible for IAM, service account permissions, application code, data handling, and network exposure decisions
- With Compute Engine (IaaS), you also own guest OS patching, installed software, and firewall rules
- With Cloud Run and App Engine (PaaS), Google owns the OS and runtime; you own the container image, dependencies, and application code
- With BigQuery, Cloud SQL, and other managed services, Google patches the service; you configure access control, network rules, and encryption choices
- Encryption, logging, and network configuration are shared: Google provides the mechanism, you configure the controls
- Most cloud security incidents come from customer misconfiguration (IAM mistakes, public buckets, unpatched VMs), not from Google infrastructure failures
Frequently asked questions
What is the shared responsibility model in GCP?
The shared responsibility model defines which security tasks belong to Google and which belong to you. Google secures the underlying infrastructure: physical data centres, hardware, network, and hypervisor. You secure everything you deploy on top: your data, application code, IAM configuration, network firewall rules, and access controls. The split shifts depending on how managed the service is. The more Google manages, the fewer infrastructure tasks you own. But IAM, your data, and your application code are always yours.
What is Google responsible for in Google Cloud?
Google secures physical data centre access, hardware integrity, the global network infrastructure, hypervisor isolation between tenants, DDoS mitigation at the network edge, and the reliability of managed services. For managed services like Cloud SQL, Cloud Run, and App Engine, Google also patches the underlying OS and runtime. Customers are responsible for everything they deploy on top of that infrastructure.
What am I responsible for in GCP?
Regardless of which GCP service you use, you are always responsible for IAM and access control, your application code, data classification and handling, service account permissions, and compliance with regulations governing your data. When using Compute Engine VMs, you also own the guest OS, installed software, and patch schedule. With Cloud Run or GKE, you own your container image and its dependencies.
Does using Cloud Run or Cloud SQL remove my security responsibilities?
It reduces them but does not eliminate them. Cloud SQL removes the need to patch the database engine. Cloud Run removes OS maintenance. But you are still responsible for IAM access control, network firewall rules, encryption choices, audit log configuration, and the security of your application code and container images. Managed services shift the infrastructure boundary, not your ownership of identity, data, and access.
Is IAM my responsibility in GCP?
Yes, always. IAM is entirely the customer's responsibility regardless of which GCP service you use. Google provides the IAM system, but every decision about who gets which role on which resource is yours. A misconfigured IAM policy that exposes a Cloud Storage bucket or grants excessive permissions to a service account is a customer mistake, not a GCP infrastructure flaw.