我正在尝试通过gcloud
命令行工具自动创建服务帐户,以便与GKE一起使用。我发现了一个似乎与Google云端控制台使用的流程相似的流程,但我的用户看不到相应的访问权限。
这是我按顺序执行的命令:
# 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
角色的一部分。
谢谢!
答案 0 :(得分:2)
我假设服务帐户是指Google Cloud的服务帐户。以下是与GKE相关的IAM角色:https://cloud.google.com/container-engine/docs/iam-integration(搜索container.
)。
首先创建一个服务帐户:
gcloud iam service-accounts create --display-name "GKE cluster access" gke-test
然后创建一个键:
gcloud iam service-accounts keys create key.json --iam-account=gke-test@[PROJECT_ID].iam.gserviceaccount.com
现在您需要为此服务帐户分配一些角色,您的选项是:
roles/container.admin
对Container Clusters及其Kubernetes API对象进行全面管理。 roles/container.clusterAdmin
容器集群管理。roles/container.developer
对Container Clusters内的Kubernetes API对象的完全访问权限。roles/container.viewer
对Container Engine资源的只读访问权。再次查看https://cloud.google.com/container-engine/docs/iam-integration页面了解详情。
我将roles/container.viewer
(一个只读角色,至少可以分配给获取凭据)分配给此服务帐户:
gcloud projects add-iam-policy-binding [PROJECT_ID] --role=roles/container.viewer --member=serviceAccount:gke-test@[PROJECT_ID].iam.gserviceaccount.com
从您当前的帐户退出gcloud:
gcloud auth revoke
使用服务帐户密钥登录gcloud:
gcloud auth activate-service-account --key-file=key.json
尝试get-credentials
:
$ gcloud container clusters get-credentials test --zone us-west1-a
Fetching cluster endpoint and auth data.
kubeconfig entry generated for test.
有效。我用roles/container.developer
尝试了它,它也有效。
您可以尝试其他权限并查看哪些有效,哪些无效,但您已明确说明文档未明确哪些角色可以访问container.clusters.getCredentials
。