跨 GCP 项目在 GKE 集群中将 Google 服务帐户与 Kubernetes 集群服务帐户绑定

时间:2021-07-21 05:19:09

标签: kubernetes google-cloud-platform google-kubernetes-engine

我在 GCP 项目中构建了一个 Google Kubernetes Engine (GKE) 集群。

根据在集群上运行的应用程序的不同用例,我将应用程序与不同的服务帐户和不同的授予权限相关联。为此,我将 Google 服务帐户 (GSA) 与 Kubernetes 集群服务帐户 (KSA) 绑定如下:

gcloud iam service-accounts add-iam-policy-binding \
  --role roles/iam.workloadIdentityUser \
  --member "serviceAccount:PROJECT_ID.svc.id.goog[K8S_NAMESPACE/KSA_NAME]" \
  GSA_NAME@PROJECT_ID.iam.gserviceaccount.com
kubectl annotate serviceaccount \
  --namespace K8S_NAMESPACE \
  KSA_NAME \
  iam.gke.io/gcp-service-account=GSA_NAME@PROJECT_ID.iam.gserviceaccount.com

参考:https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity#option_2_node_pool_modification

我所解释的一切正常。

目前,在不同的项目中有很多 GKE 集群。此外,分配给应用程序的服务帐户应该在托管 GKE 集群的同一项目中创建。我计划将 KSA 的 GSA 集中到一个 GCP 项目中。

问题

  1. 是否可以在一个项目中构建 GKE 集群并为另一个项目中的 GKE 集群上运行的应用程序创建 GSA?

  2. 如果是这样,我必须授予与 GKE 集群关联的 GSA 什么角色?以便访问其他项目中的 GSA 并将它们与 KSA 绑定。

注意:该主题仅与在 GKE 集群上运行的应用相关联的 Google 服务帐户 (GSA) 相关,与 Google 服务帐户 (GSA) 无关与 GKE 集群相关联。

以及如何将 GCP 项目中的 Google 服务帐户 (GSA) 与另一个 GCP 项目中 GKE 集群中的 Kubernetes 集群服务帐户 (KSA) 绑定

1 个答案:

答案 0 :(得分:0)

应该是可能的。您绝对可以在一个项目中创建服务帐号并将它们附加到另一个项目中的资源。

在“托管”您的服务帐户的项目中:

  • 确保没有对项目强制执行 iam.disableCrossProjectServiceAccountUsage 约束(这由项目的 updating the organization policy 完成)
  • 我相信您还需要将 roles/iam.serviceAccountTokenCreator 授予与每个集群关联的 GSA。

https://cloud.google.com/iam/docs/impersonating-service-accounts#attaching-different-project