Set up a Cloud SQL Proxy VM
Required roles
To follow the steps in this guide, you need the following roles:
- Compute Admin or Compute Security Admin on the project.
To let IAP Desktop connect to Cloud SQL, you need an additional VM that runs the Cloud SQL Auth Proxy . This VM is necessary because IAP-TCP doesn't support creating tunnels to managed services such as Cloud SQL.

This guide describes how to do the following:
- Create a container VM that runs
the
cloud-sql-connectors/cloud-sql-proxyDocker image. - Grant the VM permission to access Cloud SQL.
- Create a firewall rule that allows IAP-TCP to connect to the VM.
Deploy the Cloud SQL Proxy VM
To deploy a VM that automatically runs the Cloud SQL Auth Docker image , do the following:
-
Set your default project ID :
gcloud config set project PROJECT_IDReplace
PROJECT_IDwith the ID of your Cloud SQL project. -
Set your default zone:
gcloud config set compute/zone ZONEReplace
ZONEwith the ID of the zone you want to deploy the VM in. -
Create a service account for the VM:
SERVICE_ACCOUNT=$(gcloud iam service-accounts create cloudsql-proxy-vm --display-name "Cloud SQL Proxy VM" --format "value(email)") -
Allow the service accounr to connect to Cloud SQL by granting it the Cloud SQL Client role (
roles/cloudsql.client):gcloud projects add-iam-policy-binding $(gcloud config get project) \ --member "serviceAccount:$SERVICE_ACCOUNT" \ --role "roles/cloudsql.client" -
Set an environment variable that contains the connection name of your Cloud SQL instance:
CONNECTION_NAME=$(gcloud sql instances describe --format "value(connectionName)" SQL_INSTANCE_NAME)Replace
SQL_INSTANCE_NAMEwith the name of your Cloud SQL instance. -
Create a container VM that runs the
cloud-sql-connectors/cloud-sql-proxyDocker image and attach the service account:gcloud compute instances create-with-container cloudsql-proxy \ --machine-type e2-small \ --service-account $SERVICE_ACCOUNT \ --scopes "https://www.googleapis.com/auth/cloud-platform" \ --no-address \ --container-image gcr.io/cloud-sql-connectors/cloud-sql-proxy:latest \ --container-restart-policy on-failure \ --container-arg="--private-ip" \ --container-arg="-a" \ --container-arg="0.0.0.0" \ --container-arg="$CONNECTION_NAME" \ --network VPC_NAME \ --subnet SUBNETReplace the following:
VPC_NAME: the name of your VPC networkSUBNET: the name of the subnet to deploy the VM into.
The command configures the Cloud SQL Auth Proxy to listen on
0.0.0.0(as opposed to127.0.0.1). This is necessary so that IAP-TCP can connect to the Cloud SQL Auth Proxy from over the network.The VM doesn't have an external IP, because it's only intended to be access from IAP-TCP.
-
Create a firewall rule that allows IAP-TCP to connect to the VM:
gcloud compute firewall-rules create allow-sql-ingress-from-iap \ --direction INGRESS \ --action allow \ --target-service-accounts $SERVICE_ACCOUNT \ --source-ranges 35.235.240.0/20 \ --network VPC_NAME \ --rules tcp:PORTReplace the following:
VPC_NAME: the name of your VPC network-
PORT: the port of the database, for example:- SQL Server:
1433 - MySQL:
3306 - PostgreSQL:
5432
- SQL Server:
You can now use IAP Desktop to connect to cloudsql-proxy, and the VM forwards
connections to your Cloud SQL instance.