有没有办法用 cloudsql_proxy 可执行文件模拟服务帐户?

Is there a way to impersonate a service account with the cloudsql_proxy executable?

https://github.com/GoogleCloudPlatform/cloudsql-proxy

我发现这可以通过使用以下命令在系统范围内设置模拟来实现:gcloud config set auth/impersonate_service_account <MY_SERVICE_ACCOUNT>.

代理 exe 似乎读取了 gcloud 配置。

但这真的很笨重。我想启动代理并指定要模拟的特定用户,而无需在系统范围内更改它。此外,我不会求助于生成不会过期的 json 密钥 - 我想使用模拟。

许多 Gcloud 命令现在支持为此指定的开关,但代理 exe 不支持。请参阅此 GitHub 问题(google 没有回复):https://github.com/GoogleCloudPlatform/cloudsql-proxy/issues/417

我可以 运行 gcloud auth print-access-token --impersonate-service-account=<MY_SERVICE_ACCOUNT> 并设置代理 exe 将获取的环境变量吗?

除了提到 gcloud 之外,我在代码中找不到任何内容:https://github.com/GoogleCloudPlatform/cloudsql-proxy/blob/eca37935e7cd54efcd612c170e46f45c1d8e3556/cmd/cloud_sql_proxy/cloud_sql_proxy.go#L160

  • When the gcloud command-line tool is installed on the local machine, the "active account" is used for authentication. Run 'gcloud auth list' to see which accounts are installed on your local machine and 'gcloud config list account' to view the active account.

这很有趣,因为当 运行ning auth/impersonate_service_account gcloud config list account 什么也没说。

有没有办法让 Gcloud 在每个会话的基础上进行模拟?

编辑:只是为了跟进,根据 --token 的回答完全有效,所以现在我可以 运行 具有 IAM 身份验证的代理并同时模拟 gsa:

# start proxy with IAM login as a GSA with a cloud sql service account setup
./cloud_sql_proxy \
    -enable_iam_login \
    -dir=/var/run/cloudsql \
    -instances=project_id:region:instance_name \
    --token=$(gcloud auth print-access-token --impersonate-service-account='my-gsa@myco.iam.gserviceaccount.com')

# now can auth through proxy as cloud sql federated user 
psql "sslmode=disable \
    host='/var/run/cloudsql/project_id:region:instance_name' \
    user=my-gsa@myco.iam dbname=mydb"

我通过 --token 参数找到了这个技巧

cloud_sql_proxy --instances=<instanceName>=tcp:3306 \
  --token=$(gcloud auth print-access-token --impersonate-service-account=<service account>)