You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从App Engine应用内连接启用强制SSL的Google Cloud SQL实例

解决方案

直接处理证书权限问题

  • 利用App Engine运行时的可写临时目录/tmp解决权限问题:
    1. 将Cloud SQL提供的CA证书、客户端证书、客户端私钥内容硬编码到应用配置中,或随部署包一同打包(不要放到静态资源目录)
    2. 应用初始化时,将三个证书内容分别写入/tmp目录下的独立文件,写入完成后调用os.chmod(文件路径, 0o600)修改权限,App Engine的临时目录支持权限修改操作
    3. psycopg2连接时直接传入/tmp下的证书路径即可通过权限校验
  • 无文件极简方案:若使用psycopg2>=2.7版本,可直接将证书内容作为字符串传入连接参数,无需落地到文件系统,自然避开权限校验:
import psycopg2

conn = psycopg2.connect(
    dbname="你的数据库名",
    user="数据库用户名",
    password="数据库密码",
    host="Cloud SQL实例公网IP",
    port="5432",
    sslmode="verify-ca",
    sslrootcert="-----BEGIN CERTIFICATE-----\n你的CA证书内容\n-----END CERTIFICATE-----",
    sslcert="-----BEGIN CERTIFICATE-----\n你的客户端证书内容\n-----END CERTIFICATE-----",
    sslkey="-----BEGIN PRIVATE KEY-----\n你的客户端私钥内容\n-----END PRIVATE KEY-----"
)

更优的目标实现方案(推荐)

你的核心需求是强制GCP外部(工作站)访问数据库走SSL,App Engine到Cloud SQL的通信可以通过GCP原生安全通道避开证书配置问题,完全消除当前的副作用:

  • 优先用内置Unix套接字连接:
    1. 在Cloud SQL控制台开启「仅允许SSL连接」,满足外部访问强制SSL的要求
    2. 在App Engine的app.yaml配置文件中添加beta_settings.cloud_sql_instances = "你的GCP项目ID:实例区域:Cloud SQL实例ID",GCP会自动为App Engine实例挂载Cloud SQL的Unix套接字
    3. psycopg2连接时将host参数设置为/cloudsql/你的GCP项目ID:实例区域:Cloud SQL实例ID,无需配置任何SSL相关参数,该通信路径为GCP内部私有链路,天然加密,不需要走公网也不需要证书校验
  • 无公网方案:
    1. 关闭Cloud SQL的公网访问,配置为仅允许VPC内部访问
    2. 为App Engine配置无服务器VPC访问连接器,让App Engine的请求走私有网络访问Cloud SQL
    3. 外部工作站访问时使用Cloud SQL Auth Proxy,代理会自动处理SSL加密,无需手动管理证书即可满足强制SSL的要求

内容的提问来源于stack exchange,提问作者dreo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 18:45:04