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

如何在Google Cloud ML-Engine训练脚本中安全访问Google Cloud SQL?

安全访问Cloud SQL用于Cloud ML Engine训练脚本

老兄,你现在用的「允许所有IP访问+仅靠密码保障」的方式风险真的不小——公网暴露的SQL实例简直是暴力破解的活靶子,密码一旦泄露或者被猜中,数据安全就彻底没保障了。下面给你几个更安全的实现方案,按推荐程度排序:

1. 用Cloud SQL Proxy(最推荐,配置简单)

Cloud SQL Proxy会在你的训练实例里搭个本地端口,把请求转发到Cloud SQL实例,全程走Google内部加密网络,而且根本不用给Cloud SQL开任何公网IP,完美规避公网暴露的风险。

操作步骤:

  • 先给ML Engine默认用的服务账号(格式是[你的项目ID]@cloudml-service-account.iam.gserviceaccount.com)加上「Cloud SQL Client」权限,在IAM控制台就能配置。
  • 提交训练作业的时候,加个--cloud_sql_instances参数,格式是项目ID:区域:实例名=tcp:端口,比如:
    gcloud ai-platform jobs submit training 我的训练作业名 \
      --region us-central1 \
      --module-name 我的脚本模块名 \
      --package-path 我的代码包路径 \
      --cloud_sql_instances 我的项目ID:us-central1:我的sql实例=tcp:3306 \
      --runtime-version 2.11 \
      --python-version 3.9
    
  • 训练脚本里连接数据库的时候,直接用127.0.0.1当主机,指定刚才的端口就行,比如MySQL的连接代码:
    import mysql.connector
    conn = mysql.connector.connect(
        host='127.0.0.1',
        port=3306,
        user='数据库用户名',
        password='数据库密码',
        database='目标数据库名'
    )
    
  • 为啥推荐这个?因为不用改Cloud SQL的IP白名单,传输全程加密,还靠Google IAM权限控制访问,比开公网安全太多了。

2. 用VPC私有IP访问

如果你的训练环境需要和其他VPC里的资源打通,那把ML Engine训练作业放到和Cloud SQL同一个VPC里,用私有IP直接访问是个好选择。

操作步骤:

  • 先给Cloud SQL实例开私有IP,在Cloud SQL控制台的「连接」页面配置,关联上你的VPC网络。
  • 把ML Engine的训练网络和你的VPC做个 peering,或者直接指定训练作业用你的自定义VPC。
  • 提交训练作业时加--vpc-network参数,让训练实例加入你的VPC:
    gcloud ai-platform jobs submit training 我的训练作业名 \
      --region us-central1 \
      --module-name 我的脚本模块名 \
      --package-path 我的代码包路径 \
      --vpc-network projects/我的项目ID/global/networks/我的VPC名 \
      --runtime-version 2.11 \
      --python-version 3.9
    
  • 脚本里直接用Cloud SQL的私有IP当主机地址连接就行,完全不用开公网IP。
  • 优势:全程在私有网络里访问,根本没公网暴露的风险,适合企业级的复杂网络架构。

3. 搭配IAM数据库认证(彻底摆脱密码)

上面两种方法还能再升级——用IAM数据库认证,不用管数据库密码,直接用服务账号身份登录,安全又省心。

操作步骤:

  • 在Cloud SQL控制台创建一个数据库用户,用户名就是ML Engine的服务账号邮箱(比如[你的项目ID]@cloudml-service-account.iam.gserviceaccount.com)。
  • 确保这个服务账号有「Cloud SQL Client」权限。
  • 连接数据库的时候用IAM认证方式,举两个例子:
    • MySQL用官方连接器:
      import mysql.connector
      from google.cloud.sql.connector import Connector
      import sqlalchemy
      
      def get_db_connection():
          connector = Connector()
          conn = connector.connect(
              "我的项目ID:us-central1:我的sql实例",
              "pymysql",
              user="[我的项目ID]@cloudml-service-account.iam.gserviceaccount.com",
              db="目标数据库名",
              enable_iam_auth=True
          )
          return conn
      
      # 创建连接池,方便脚本里复用
      db_pool = sqlalchemy.create_engine(
          "mysql+pymysql://",
          creator=get_db_connection,
      )
      
    • PostgreSQL用OAuth2 token认证:
      import psycopg2
      import google.auth
      
      # 获取当前服务账号的凭证
      credentials, project_id = google.auth.default()
      credentials.refresh(google.auth.transport.requests.Request())
      
      conn = psycopg2.connect(
          host='127.0.0.1',  # 如果用Cloud SQL Proxy的话
          port=5432,
          user="[我的项目ID]@cloudml-service-account.iam.gserviceaccount.com",
          dbname="目标数据库名",
          password=credentials.token
      )
      
  • 优势:不用存密码、不用管密码过期,全靠IAM权限控制谁能访问,完全符合Google Cloud的最佳实践。

最后提醒一句:赶紧把原来的「允许所有IP」配置关掉!只保留上面这些安全的访问方式,彻底杜绝公网暴露的风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:54:22