Google cloud platform 即使在授予“GCP服务帐户”后,也无法模拟GCP服务帐户;服务帐户令牌创建者“;角色

Google cloud platform 即使在授予“GCP服务帐户”后,也无法模拟GCP服务帐户;服务帐户令牌创建者“;角色,google-cloud-platform,gcloud,impersonation,service-accounts,google-cloud-iam,Google Cloud Platform,Gcloud,Impersonation,Service Accounts,Google Cloud Iam,我在谷歌云平台(GCP)项目中有2个ServiceAccounts 所有者 执行人 owner ServiceAccount附加了一个项目范围的角色: “业主”-用于项目 executor ServiceAccount仅附加了2个特定角色(如下所示): “服务帐户令牌创建者”-在所有者ServiceAccount上 “服务帐户用户”-在所有者服务帐户上 现在,我有一个Executor ServiceAccount的JSON密钥文件。我将使用该凭证文件“模拟”所有者服务帐户。然后我

我在谷歌云平台(GCP)项目中有2个ServiceAccounts

  • 所有者
  • 执行人
owner ServiceAccount附加了一个项目范围的角色:

  • “业主”-用于项目
executor ServiceAccount仅附加了2个特定角色(如下所示):

  • “服务帐户令牌创建者”-在所有者ServiceAccount上
  • “服务帐户用户”-在所有者服务帐户上


现在,我有一个Executor ServiceAccount的JSON密钥文件。我将使用该凭证文件“模拟”所有者服务帐户。然后我将运行
gcloud
命令


这就是我正在做的

#/bin/bash
# --------------------------------------------------------------
导出GOOGLE_应用程序_凭据=“$(pwd)/my executor sa key.json”
echo$GOOGLE\u应用程序\u凭据
cat$GOOGLE\u应用程序\u凭据
所有者\u电子邮件=”owner@my-gcp project.iam.gserviceaccount.com“
echo$OWNER\u电子邮件
# --------------------------------------------------------------
CLUSTER=“my-k8s-CLUSTER”
ZONE=“asia-east1-a”
PROJECT=“我的gcp项目”
MY_COMMAND=“gcloud container clusters get credentials${CLUSTER}--zone${zone}--project${project}--impersonate service account=${OWNER\u EMAIL}”
echo$MY_命令
# --------------------------------------------------------------
`$MY_命令`
# --------------------------------------------------------------
运行上面的程序后,下面是我得到的输出


# --------------------------------------------------------------
/Users/rakib/tmp/my-executor-sa-key.json
{
“类型”:“服务账户”,
“项目id”:“我的gcp项目”,
“私钥id”:“3208--------------------5d63”,
“私钥”:“----开始私钥------\nMIIEv\n----\nEAE9S\n----结束私钥------\n”,
“客户电子邮件”:executor@my-gcp project.iam.gserviceaccount.com“,
“客户id”:“1099---------5533”,
“auth_uri”:https://accounts.google.com/o/oauth2/auth",
“令牌uri”:https://oauth2.googleapis.com/token",
“身份验证提供程序\u x509\u证书\u url”:https://www.googleapis.com/oauth2/v1/certs",
“客户端\u x509\u证书\u url”:https://www.googleapis.com/robot/v1/metadata/x509/executor%40my-gcp project.iam.gserviceaccount.com“
}
owner@my-gcp-project.iam.gserviceaccount.com
# --------------------------------------------------------------
gcloud容器群集获取凭据my-k8s-cluster--zone asia-east1-a--project my gcp project--impersonate服务帐户=owner@my-gcp-project.iam.gserviceaccount.com
# --------------------------------------------------------------
警告:此命令正在使用服务帐户模拟。所有API调用都将按以下方式执行:[owner@my-gcp project.iam.gserviceaccount.com]。
错误:(gcloud.container.clusters.get凭据)模拟失败[owner@my-gcp project.iam.gserviceaccount.com]。确保尝试模拟它的帐户可以访问服务帐户本身和“roles/iam.serviceAccountTokenCreator”角色。
我错过了什么?我确实已授予执行者ServiceAccount所有者ServiceAccount上的
角色/iam.serviceAccountTokenCreator
角色


为什么它不能模拟呢?

事实证明,我需要添加
gcloud auth activate服务帐户--key file=$GOOGLE\u APPLICATION\u CREDENTIALS
命令()。仅设置
$GOOGLE\u APPLICATION\u CREDENTIALS
环境变量对于
gcloud
CLI工具是不够的

一直以来,我都知道在
$GOOGLE\u APPLICATION\u凭证中有servicecomport路径就足够了。无论我读到哪里,我都看到ADC使用
$GOOGLE\u APPLICATION\u凭证

然而,结果是,
gcloud
没有使用ADC。ADC仅由C#、Java、Python、Go、Ruby等客户端库使用


我在谷歌的问题追踪器(issue tracker for google)中为谷歌提供了帮助,以帮助改进他们的文档,避免混淆/混乱。

您遵循了这一点吗?您是否已授予所有者服务帐户本身的角色(将该帐户视为资源)?还是你对这个项目申请了许可?我认为你做了后者,你需要为前者做些什么。会给你一个命令来测试| doNo,忽略这个。。。看起来你可以在项目层面上授予这个角色:你可以在谷歌的问题追踪者上提交反馈,并要求澄清文档感谢@DazWilkin的建议。试图在这个谷歌问题追踪器中提出请求-谢谢,这为我解决了问题。希望文档能够更新,并提供更多关于这方面的指导。