跨 GCP 项目将 Google 服务帐户与 GKE 集群中的 Kubernetes 集群服务帐户绑定
Binding Google Service Account with Kubernetes Cluster Service Account in GKE cluster across GCP projects
我在 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
我所解释的一切都正常工作。
目前在不同的项目中有很多GKE集群。此外,分配给应用程序的服务帐户应该在托管 GKE 集群的同一项目中创建。我计划将 KSA 的 GSA 集中化到一个 GCP 项目中。
问题
是否可以在一个项目中搭建GKE集群,在另一个项目的GKE集群上为应用运行创建GSA?
如果是这样,我必须授予与 GKE 集群关联的 GSA 哪些角色?以便访问其他项目中的 GSA 并将它们与 KSA 绑定。
注意:此线程仅与 GKE 上与应用程序 运行 关联的 Google 服务帐户 (GSA) 有关集群,与与 GKE 集群关联的 Google 服务帐户 (GSA) 无关。
以及关于如何将一个 GCP 项目中的 Google 服务帐户 (GSA) 与另一个 GCP 项目中 GKE 集群中的 Kubernetes 集群服务帐户 (KSA) 绑定 .
这应该是可能的。您绝对可以在一个项目中创建服务帐户并将它们附加到另一个项目中的资源。
在“托管”您的服务帐户的项目中:
- 确保不对项目强制执行
iam.disableCrossProjectServiceAccountUsage
约束(这是由 updating the organization policy 为项目完成的)
- 我相信您还需要将
roles/iam.serviceAccountTokenCreator
授予与每个集群关联的 GSA。
见https://cloud.google.com/iam/docs/impersonating-service-accounts#attaching-different-project
我在 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
我所解释的一切都正常工作。
目前在不同的项目中有很多GKE集群。此外,分配给应用程序的服务帐户应该在托管 GKE 集群的同一项目中创建。我计划将 KSA 的 GSA 集中化到一个 GCP 项目中。
问题
是否可以在一个项目中搭建GKE集群,在另一个项目的GKE集群上为应用运行创建GSA?
如果是这样,我必须授予与 GKE 集群关联的 GSA 哪些角色?以便访问其他项目中的 GSA 并将它们与 KSA 绑定。
注意:此线程仅与 GKE 上与应用程序 运行 关联的 Google 服务帐户 (GSA) 有关集群,与与 GKE 集群关联的 Google 服务帐户 (GSA) 无关。
以及关于如何将一个 GCP 项目中的 Google 服务帐户 (GSA) 与另一个 GCP 项目中 GKE 集群中的 Kubernetes 集群服务帐户 (KSA) 绑定 .
这应该是可能的。您绝对可以在一个项目中创建服务帐户并将它们附加到另一个项目中的资源。
在“托管”您的服务帐户的项目中:
- 确保不对项目强制执行
iam.disableCrossProjectServiceAccountUsage
约束(这是由 updating the organization policy 为项目完成的) - 我相信您还需要将
roles/iam.serviceAccountTokenCreator
授予与每个集群关联的 GSA。
见https://cloud.google.com/iam/docs/impersonating-service-accounts#attaching-different-project