如何使用Python安全便捷地连接Cloud SQL?
安全便捷的Python连接Cloud SQL推荐方案
首推Cloud SQL Auth代理,它能搞定绝大多数连接痛点——不用手动管理SSL证书、不用维护IP白名单、自动加密所有连接,不管是本地开发还是GCP生产环境都适用。
为什么选Auth代理?
- 安全层面:代理通过IAM身份验证,自动建立加密连接,数据库无需暴露公网IP,彻底规避IP白名单的维护风险和证书过期问题。
- 便捷层面:本地和生产环境的连接代码可以高度统一,不用因为环境差异修改配置。
本地开发场景步骤
安装并启动Auth代理
推荐用Docker启动(无需手动处理版本):docker run -d -p 5432:5432 gcr.io/cloudsql-docker/gce-proxy:latest /cloud_sql_proxy -instances=your-project:region:instance-name=tcp:0.0.0.0:5432也可以直接用二进制文件:
# Linux/macOS ./cloud-sql-proxy your-project:region:instance-name # Windows cloud-sql-proxy.exe your-project:region:instance-namePython连接代码
直接连接本地代理转发的端口即可,无需额外SSL配置:PostgreSQL(psycopg2)
import psycopg2 def get_db_connection(): try: conn = psycopg2.connect( user="db_username", password="db_password", host="127.0.0.1", port="5432", dbname="db_name" ) return conn except Exception as e: print(f"连接失败: {e}") raiseMySQL(pymysql)
import pymysql def get_db_connection(): try: conn = pymysql.connect( user="db_username", password="db_password", host="127.0.0.1", port=3306, db="db_name" ) return conn except Exception as e: print(f"连接失败: {e}") raise
GCP生产环境场景(Cloud Run/App Engine/GCE)
配置权限
给运行Python服务的服务账号添加Cloud SQL Client角色,确保服务能访问Cloud SQL实例。连接方式
- Cloud Run/App Engine标准环境:直接在服务配置中关联Cloud SQL实例,代码里用
127.0.0.1和对应端口连接(和本地代码一致)。 - GCE/App Engine灵活环境:可以直接使用Unix域套接字连接,无需启动代理进程:
PostgreSQL套接字连接
conn = psycopg2.connect( user="db_username", password="db_password", host="/cloudsql/your-project:region:instance-name", dbname="db_name" )MySQL套接字连接
conn = pymysql.connect( user="db_username", password="db_password", unix_socket="/cloudsql/your-project:region:instance-name", db="db_name" )
- Cloud Run/App Engine标准环境:直接在服务配置中关联Cloud SQL实例,代码里用
额外提示
- 不要硬编码数据库密码,建议用GCP Secret Manager或者环境变量存储敏感信息。
- 如果使用ORM(比如SQLAlchemy),只需对应调整连接字符串的host/端口或套接字路径即可,逻辑完全一致。
内容的提问来源于stack exchange,提问作者Jack Wotherspoon
相关产品推荐
相关产品推荐

