使用 Deployment Manager 将 Workload Identity 服务帐户绑定到 GKE 服务帐户?

使用 Deployment Manager 将 Workload Identity 服务帐户绑定到 GKE 服务帐户?

我已经在我们的 GKE 集群上启用了 Workload Identity。现在,我正在将一个应用部署到 GKE,该应用使用 WI 向另一项 Google 服务进行身份验证。我已经使用 Deployment Manager 创建了一个具有 Google 服务正确访问权限的 IAM 服务帐户。我还使用自己的 GKE 服务帐户将该应用部署到集群。

最后,我需要将两种不同类型的服务帐号绑定在一起。这允许 Kubernetes 服务帐号充当 Google 服务帐号,从而允许 pod 访问云服务。

文档使用gcloudCLI 工具添加策略绑定,如下所示:

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]"

相关内容