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

问题描述 投票:0回答:2

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

我发现可以通过使用以下命令设置模拟系统来实现这一点:

gcloud config set auth/impersonate_service_account <MY_SERVICE_ACCOUNT>

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

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

许多 Gcloud 命令现在支持特定的开关,但代理 exe 不支持。请参阅此 GitHub 问题(谷歌没有回复):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

  • 当本地安装了 gcloud 命令行工具时 机、 “活动帐户”用于身份验证。运行“gcloud auth list”即可查看 您的本地计算机上安装了哪些帐户以及 “gcloud config list account”查看活动帐户。

这很有趣,因为运行时

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='[email protected]')

# now can auth through proxy as cloud sql federated user 
psql "sslmode=disable \
    host='/var/run/cloudsql/project_id:region:instance_name' \
    [email protected] dbname=mydb"
google-cloud-platform gcloud google-cloud-sql cloud-sql-proxy
2个回答
7
投票

我用

--token
参数发现了这个技巧

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

0
投票

设置 CLOUDSDK_AUTH_IMPERSONATE_SERVICE_ACCOUNT 变量,如下所示:

CLOUDSDK_AUTH_IMPERSONATE_SERVICE_ACCOUNT=<your serviceaccount> ./cloud_sql_proxy \
    -enable_iam_login \
    -dir=/var/run/cloudsql \
    -instances=project_id:region:instance_name
© www.soinside.com 2019 - 2024. All rights reserved.