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

如何使用cloudsql_proxy模拟服务账号且不修改全局gcloud配置

我此前发现可以通过如下命令设置全局模拟配置来实现Cloud SQL代理的身份模拟需求:
gcloud config set auth/impersonate_service_account <MY_SERVICE_ACCOUNT>

cloudsql_proxy可执行文件可以读取gcloud的全局配置,但这种全局配置的方式非常不灵活。我希望在启动代理时就直接指定要模拟的特定用户,无需修改全局配置,同时也不想生成永久有效的JSON密钥,要使用模拟身份的方式实现认证。

目前很多gcloud命令都支持对应参数实现单次身份模拟,但cloudsql_proxy可执行文件暂不支持该类参数。

我之前尝试思考另一种实现方案:运行gcloud auth print-access-token --impersonate-service-account=<MY_SERVICE_ACCOUNT>,然后将返回的令牌设置为cloudsql_proxy可读取的环境变量或者启动参数,是否可以实现需求?

我查找过cloudsql_proxy的代码,里面关于gcloud认证的说明如下:

当本地设备安装了gcloud命令行工具时,会使用「活跃账户」进行身份认证。运行gcloud auth list可查看本地设备安装的所有账户,运行gcloud config list account可查看当前活跃账户。

但这里存在不合理的地方:当配置了auth/impersonate_service_account时,gcloud config list account不会返回任何相关的模拟账户信息。另外我也想知道有没有办法让Gcloud实现按会话级别的身份模拟?


验证可行的解决方案

经实测,cloudsql_proxy的--token参数完全可以满足需求,现在可以同时启用IAM认证和GSA身份模拟来运行代理,示例如下:

# 启动代理,通过已配置Cloud SQL权限的GSA进行IAM身份登录
./cloud_sql_proxy \
    -enable_iam_login \
    -dir=/var/run/cloudsql \
    -instances=项目ID:区域:实例名 \
    --token=$(gcloud auth print-access-token --impersonate-service-account='my-gsa@myco.iam.gserviceaccount.com')

# 启动后即可通过代理以Cloud SQL联邦用户的身份完成认证
psql "sslmode=disable \
    host='/var/run/cloudsql/项目ID:区域:实例名' \
    user=my-gsa@myco.iam dbname=mydb"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 05:24:01