Google cloud platform 如何通过gcloud命令行授权serviceAccounts访问Kubernetes API?

Google cloud platform 如何通过gcloud命令行授权serviceAccounts访问Kubernetes API?,google-cloud-platform,gcloud,google-kubernetes-engine,Google Cloud Platform,Gcloud,Google Kubernetes Engine,我正试图通过gcloud命令行工具自动创建服务帐户,以供GKE使用。我已经找到了一个流程,它似乎反映了谷歌云控制台使用的流程,但我的用户看不到如何获得适当的访问权限 以下是我按顺序执行的命令: # Environment: # - uname=<username> # - email=<user's email address> # - GCLOUD_PROJECT_ID=<project identifier> # - serviceAccount="${u

我正试图通过
gcloud
命令行工具自动创建服务帐户,以供GKE使用。我已经找到了一个流程,它似乎反映了谷歌云控制台使用的流程,但我的用户看不到如何获得适当的访问权限

以下是我按顺序执行的命令:

# 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}"
出于某种原因,我的服务帐户似乎没有获取凭据所需的权限,但根据我阅读的内容和在控制台中观察到的内容,我认为此权限应该是
角色/container.developer
角色的一部分


谢谢

我假设服务账户是指谷歌云的服务账户。以下是与GKE相关的IAM角色:(搜索
容器。

首先创建一个服务帐户:

gcloud iam service-accounts create --display-name "GKE cluster access" gke-test
gcloud projects add-iam-policy-binding [PROJECT_ID] --role=roles/container.viewer --member=serviceAccount:gke-test@[PROJECT_ID].iam.gserviceaccount.com
然后创建一个密钥:

gcloud iam service-accounts keys create key.json --iam-account=gke-test@[PROJECT_ID].iam.gserviceaccount.com
现在,您需要为此服务帐户分配一些角色,您的选项有:

  • 角色/container.admin
    容器集群及其Kubernetes API对象的全面管理
  • 角色/container.clusterAdmin
    容器集群的管理
  • 角色/container.developer
    对容器集群内Kubernetes API对象的完全访问权限
  • 角色/container.viewer
    对容器引擎资源的只读访问
再次查看页面了解详细信息

我将
角色/container.viewer
(只读角色,您可以为获取凭据分配的最低权限)分配给此服务帐户:

gcloud iam service-accounts create --display-name "GKE cluster access" gke-test
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
尝试获取凭据:

$ gcloud container clusters get-credentials test --zone us-west1-a
Fetching cluster endpoint and auth data.
kubeconfig entry generated for test.
它起作用了。我用
角色/container.developer
尝试了它,它也可以工作


您可以尝试其他权限,看看哪些有效,哪些无效,尽管您明确说明文档中没有明确说明哪些角色有权访问
container.clusters.getCredentials

有解决方案吗?我尝试了not luckSort of:我发现,如果我开始使用一个高权限的用户(谷歌云中的一个项目
所有者
),上述步骤创建了一个服务帐户,可以访问我需要的内容。然而,当我使用另一个具有更细粒度权限集的服务帐户时,它将失败。看起来可能有一些派生授权,但我还没有确定它们到底是什么。实际上,我只是删除了失败的
gcloud容器集群获取凭据devcluster
行。我不知道为什么它现在可以工作,但这是我的解决方案。我将此属性设为False,并使用gcloud config set container/use\u client\u certificate False使用与上面的@HaroldCastillo注释相同的解决方案处理不同的错误消息:
gcloud config set container/use\u client\u certificate False
。似乎影响了最近创建(或重新创建)的GKE集群,自2019/2020年的某个时候起。感谢Ahmet。我会试着花点时间绕一圈,再试一次。不确定您是否看到了我上面的评论,re:当我使用具有
角色/所有者的帐户(或serviceAccount)时,这对我有效,而不是使用更受限制的帐户。我不知道为什么这很重要,但是,我必须为在自动化管道外执行此过程的serviceAccount授予更高的权限,以使创建的serviceAccount按预期工作。@ahmet alp balkan为了能够使用属于另一个服务帐户的服务帐户执行
gcloud容器群集获取凭据,您还需要哪些作用域项目