我已经在我们的 GKE 集群上启用了 Workload Identity。现在,我正在将一个应用部署到 GKE,该应用使用 WI 向另一项 Google 服务进行身份验证。我已经使用 Deployment Manager 创建了一个具有 Google 服务正确访问权限的 IAM 服务帐户。我还使用自己的 GKE 服务帐户将该应用部署到集群。
最后,我需要将两种不同类型的服务帐号绑定在一起。这允许 Kubernetes 服务帐号充当 Google 服务帐号,从而允许 pod 访问云服务。
这文档使用gcloud
CLI 工具添加策略绑定,如下所示:
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
当然,我想通过 GCP 部署管理器(infra-as-code 及所有这些)来完成此操作,但我无法弄清楚正确的 DM 语法!?
我通常通过类型进行角色绑定gcp-types/cloudresourcemanager-v1:virtual.projects.iamMemberBinding
,例如代码示例,但我不知道如何复制上述gcloud
命令,也找不到任何公开的示例。谁能帮忙?
我认为以前actions
会用到,但由于它们已被弃用,我宁愿不在新代码中使用它们。这iamMemberBinding
似乎是推荐的方式。
答案1
事实证明,查看gcp-types/cloudresourcemanager-v1:virtual.projects.iamMemberBinding
类型只是一种转移注意力的手段。相反,解决方案是使用类型accessControl
的属性iam.v1.serviceAccount
。非常感谢这个答案,这为我指明了正确的方向。
总而言之,你的 serviceAccount 变成如下的样子:
resources:
- name: test-name-deploy
type: iam.v1.serviceAccount
properties:
accountId: testing
displayName: testing-sa
accessControl:
gcpIamPolicy:
bindings:
- role: roles/iam.workloadIdentityUser
members:
- "serviceAccount:PROJECT_ID.svc.id.goog[K8S_NAMESPACE/KSA_NAME]"