gpt4 book ai didi

google-cloud-platform - 如何通过 gcloud 命令行为 serviceAccounts 授权以访问 Kubernetes API?

转载 作者:行者123 更新时间:2023-12-03 23:18:25 27 4
gpt4 key购买 nike

我正在尝试通过 gcloud 自动创建与 GKE 一起使用的服务帐户命令行工具。我找到了一个似乎反射(reflect)了 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}"

当它执行时,它会创建一个新的服务帐户并在本地生成一个 key 文件。然后我尝试使用这个 key 来获取我的 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角色。

谢谢!

最佳答案

我假设服务帐户是指 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

然后创建一个 key :
gcloud iam service-accounts keys create key.json --iam-account=gke-test@[PROJECT_ID].iam.gserviceaccount.com

现在您需要为该服务帐户分配一些角色,您的选项是:
  • roles/container.admin全面管理容器集群及其 Kubernetes API 对象。
  • roles/container.clusterAdmin容器集群的管理。
  • roles/container.developer拥有对容器集群内 Kubernetes API 对象的完全访问权限。
  • roles/container.viewer对 Container Engine 资源的只读访问权限。

  • 再看 https://cloud.google.com/container-engine/docs/iam-integration详情页。

    我分配 roles/container.viewer (只读角色,您可以分配给 get-credentials 的最低限度)到此服务帐户:
    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

    使用服务帐号 key 登录 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。 .

    关于google-cloud-platform - 如何通过 gcloud 命令行为 serviceAccounts 授权以访问 Kubernetes API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43900761/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com