【发布时间】:2021-04-15 20:28:55
【问题描述】:
我的目标
我想使用 GCP 模拟来获取我的 GKE 集群凭据。然后我想运行kubectl 命令。
初始上下文
- 我有一个名为
rakib-example-project的 GCP 项目 - 我在项目中有 2 个 ServiceAccounts,名为:
-
owner@rakib-example-project.iam.gserviceaccount.com
- 它具有项目范围的
roles/owner角色 - 因此它可以在 GCP 项目中执行任何操作
- 它具有项目范围的
-
executor@rakib-example-project.iam.gserviceaccount.com
- 它仅具有项目范围的
roles/iam.serviceAccountTokenCreator角色 - 因此它可以模拟 GCP 项目中的所有者 ServiceAccount
- 它仅具有项目范围的
-
owner@rakib-example-project.iam.gserviceaccount.com
- 我在项目中有 1 个 GKE 集群,名为
my-gke-cluster
问题
✅我已认证为 executor ServiceAccount:
$ gcloud auth activate-service-account --key-file=my_executor_sa_key.json
Activated service account credentials for: [executor@rakib-example-project.iam.gserviceaccount.com]
✅我通过模拟所有者获取了 GKE 集群凭据:
$ gcloud container clusters get-credentials my-gke-cluster \
--zone asia-southeast1-a \
--project rakib-example-project \
--impersonate-service-account=owner@rakib-example-project.iam.gserviceaccount.com
WARNING: This command is using service account impersonation. All API calls will be executed as [owner@rakib-example-project.iam.gserviceaccount.com].
WARNING: This command is using service account impersonation. All API calls will be executed as [owner@rakib-example-project.iam.gserviceaccount.com].
Fetching cluster endpoint and auth data.
kubeconfig entry generated for my-gke-cluster.
❌由于缺少container.nodes.list 权限,我无法列出集群节点:
$ kubectl get nodes
Error from server (Forbidden): nodes is forbidden: User "executor@rakib-example-project.iam.gserviceaccount.com" cannot list resource "nodes" in API group "" at the cluster scope: requires one of ["container.nodes.list"] permission(s).
但我已经冒充了 Owner ServiceAccount。为什么它仍然缺少权限? ????????????
我的局限
如果我授予我的 executor ServiceAccount roles/container.admin 角色,效果会很好。但是,由于合规要求,我不允许将此类角色授予我的执行者 ServiceAccount。我只能冒充 owner ServiceAccount,然后通过它做任何我想做的事 - 而不是直接。
【问题讨论】:
-
通过查看
.kube/config文件,似乎缺少模拟功能。您能否尝试运行此命令并重试:gcloud config set auth/impersonate_service_account owner@rakib-example-project.iam.gserviceaccount.com。告诉我 -
@guillaumeblaquiere 做到了 :)
gcloud config set auth/impersonate_service_account owner@rakib-example-project.iam.gserviceaccount.com没有以任何方式更改~/.kube/config的内容 - 它只是在gcloud config list中添加了auth/impersonate_service_account属性。这解决了它:) -
@guillaumeblaquiere 您可能想将其添加为这个 SO 问题的答案。我会接受的。
-
我做到了。我还解释了我在哪里挖掘找到了解决方法。
标签: kubernetes google-cloud-platform google-kubernetes-engine kubectl impersonation