如何允许 GCP 身份修改特定服务帐户

How to allow a GCP Identity to modify specific service accounts

我有一个 Terraform 用来管理我的云资源的服务帐户,我们称它为 resource-manager-sa。我需要给它足够的访问权限 create/delete/edit 其他服务帐户,但不能更改它自己或项目中它不应该接触的其他 SA。

我尝试在那里添加一个条件,但似乎 'service accounts' 不是 you can use 在条件 (?) 中的资源类型之一。这是我用于绑定该角色的 HCL 片段(我使用 Terraform 的事实与这里无关):

resource "google_project_iam_member" "service-account" {
  project = var.project
  role    = "roles/iam.serviceAccountAdmin"
  member  = "serviceAccount:${google_service_account.resource-manager-sa.email}"

  condition {
    title      = "Can manage Blah Blah SA"
    expression = "resource.name.extract('/serviceAccounts/{name}').startsWith('blah-blah@')"
  }
}

当我删除条件时,一切正常,但 resource-manager-sa 拥有的权限远远超过它需要的权限。它甚至可以修改自己来提升自己的特权。我添加条件后,砰的一声,它无法访问任何服务帐户:

Error: Error when reading or editing Service Account "projects/***/serviceAccounts/blah-blah@***.iam.gserviceaccount.com": googleapi: Error 403: Permission iam.serviceAccounts.get is required to perform this operation on service account projects/***/serviceAccounts/blah-blah@***.iam.gserviceaccount.com., forbidden

我觉得我在这里做的事情根本上是错误的,但我找不到一个很好的示例配置来实现我在这里想要实现的目标。

服务帐户也是一种资源。因此,您可以在服务帐户级别而非项目级别为身份分配 IAM 权限。这意味着您可以创建一个没有 permissions/roles 的服务帐户并将该服务帐户权限授予另一个服务帐户。

使用 Terraform 查看 google_service_account_iam_member 资源。这将为您提供您询问的粒度,并且不允许提升权限。