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

如何使用本地凭证从Node.js程序连接GCP Cloud SQL(无需IP白名单)

本地Node.js通过谷歌凭证访问Cloud SQL PostgreSQL方案

有两种可靠的方式实现本地通过谷歌凭证访问Cloud SQL,无需开放公网IP或手动维护IP白名单:

方式一:使用Cloud SQL Auth Proxy(推荐)

这是GCP官方推荐的安全方案,Proxy会自动处理认证和加密,无需修改原有数据库连接逻辑。

操作步骤

  1. 安装Cloud SQL Auth Proxy
    下载对应系统的二进制文件:

    • macOS/Linux:curl -o cloud-sql-proxy https://storage.googleapis.com/cloud-sql-connectors/cloud-sql-proxy/v2.1.0/cloud-sql-proxy.darwin.amd64(可替换为对应版本和架构)
    • Windows:直接下载对应exe文件
      赋予执行权限(macOS/Linux):chmod +x cloud-sql-proxy
  2. 配置本地凭证

    • 个人账号场景:运行gcloud auth application-default login,按提示完成登录,自动生成默认应用凭证。
    • 服务账号场景:下载服务账号密钥JSON文件,保存到本地指定路径。
  3. 启动Proxy

    • 默认凭证启动:./cloud-sql-proxy <你的项目ID>:<实例区域>:<实例ID>
    • 服务账号密钥启动:./cloud-sql-proxy <你的项目ID>:<实例区域>:<实例ID> --credentials-file=/path/to/service-account-key.json
  4. Node.js连接数据库
    Proxy会将本地端口(默认5432)转发到Cloud SQL实例,直接用本地连接参数即可:

    const { Client } = require('pg');
    
    const client = new Client({
      host: 'localhost',
      port: 5432,
      user: '<数据库用户名>',
      password: '<数据库密码>',
      database: '<数据库名称>'
    });
    
    client.connect()
      .then(() => console.log('连接成功'))
      .catch(err => console.error('连接失败', err));
    

方式二:直接使用IAM认证(无需Proxy)

通过谷歌凭证生成临时密码,直接在PostgreSQL驱动中使用,适合不想运行额外进程的场景。

操作步骤

  1. 配置IAM权限
    给你的谷歌账号或服务账号授予Cloud SQL Client角色,确保拥有访问Cloud SQL实例的权限;同时在Cloud SQL实例的IAM认证设置中启用该功能。

  2. 安装依赖

    npm install pg google-auth-library
    
  3. 编写连接代码
    利用google-auth-library生成临时访问令牌,作为密码连接数据库(用户名是你的谷歌邮箱或服务账号邮箱):

    const { Client } = require('pg');
    const { GoogleAuth } = require('google-auth-library');
    
    async function connectToCloudSQL() {
      const authClient = await new GoogleAuth({
        scopes: ['https://www.googleapis.com/auth/cloud-platform']
      }).getClient();
      const token = await authClient.getAccessToken();
    
      const pgClient = new Client({
        host: '<Cloud SQL实例公网IP>', // 需实例保留公网IP,但无需添加IP白名单
        port: 5432,
        user: '<你的谷歌邮箱/服务账号邮箱>',
        password: token.token,
        database: '<数据库名称>',
        ssl: { rejectUnauthorized: false } // 生产环境建议配置官方CA证书
      });
    
      try {
        await pgClient.connect();
        console.log('连接成功');
        // 执行查询逻辑
      } catch (err) {
        console.error('连接失败', err);
      } finally {
        await pgClient.end();
      }
    }
    
    connectToCloudSQL();
    

注意事项

  • 临时令牌有效期为1小时,需在过期前重新生成。
  • 生产环境中建议配置PostgreSQL的SSL证书,避免禁用rejectUnauthorized。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 03:05:26