【发布时间】:2017-10-09 14:11:29
【问题描述】:
我正在尝试通过gcloud 命令行工具自动创建用于 GKE 的服务帐户。我想出了一个流程,该流程似乎反映了 Google Cloud Console 使用的流程,但我的用户看不到获得适当的访问权限。
这是我按顺序执行的命令:
# Environment:
# - uname=<username>
# - email=<user's email address>
# - GCLOUD_PROJECT_ID=<project identifier>
# - serviceAccount="${uname}@${GCLOUD_PROJECT_ID}.iam.gserviceaccount.com"
$ gcloud iam service-accounts \
create "${uname}" --display-name "email:${email}" --format json
$ gcloud projects \
add-iam-policy-binding "${GCLOUD_PROJECT_ID}" \
--member "serviceAccount:${serviceAccount}" \
--role=roles/container.developer --format=json
$ gcloud iam service-accounts keys \
create "${GCLOUD_PROJECT_ID}-${uname}.json" \
--iam-account="${serviceAccount}"
执行此操作时,它会创建一个新的服务帐户并在本地生成一个密钥文件。然后我尝试使用此密钥来获取我的 Kubernetes 集群的凭据。
$ gcloud config configurations create devcluster --activate
$ gcloud config set project devnet-166017
$ gcloud config set compute/zone us-central1-b
$ gcloud auth activate-service-account \
--key-file="${GCLOUD_PROJECT_ID}-${uname}.json"
$ gcloud container clusters get-credentials devcluster
ERROR: (gcloud.container.clusters.get-credentials) ResponseError: \
code=403, message=Required "container.clusters.get" permission for \
"projects/${GCLOUD_PROJECT_ID}/zones/us-central1-b/clusters/devcluster".
由于某种原因,我的服务帐户似乎没有获取凭据所需的权限之一,但根据我所阅读的内容以及我在控制台中观察到的内容,我认为该权限应该是roles/container.developer 角色的一部分。
谢谢!
【问题讨论】:
-
有什么解决办法吗?我试过this 运气不好
-
排序:我发现如果我从一个高度授权的用户开始(Google Cloud 中的一个项目
Owner),上述步骤会创建一个服务帐户,该帐户有权执行我需要的操作.但是,当我使用具有更细粒度权利集的另一个服务帐户时,它会失败。似乎可能有一些派生的授权,但我还没有确定它们到底是什么。 -
我实际上只是删除了失败的
gcloud container clusters get-credentials devcluster行。 不知道为什么它现在有效,但这是我的解决方案。 -
我把这个属性设置为 False 并且可以工作 gcloud config set container/use_client_certificate False
-
This answer 使用与上述@HaroldCastillo 评论相同的解决方案解决了不同的错误消息:
gcloud config set container/use_client_certificate False。自 2019/2020 年的某个时候起,似乎会影响最近创建(或重新创建)的 GKE 集群。
标签: google-cloud-platform gcloud google-kubernetes-engine