无法从 Terraform 更改存储传输服务帐户权限

Cannot change storage transfer service account permissions from terraform

我正在尝试使用 url 列表cloudfunction.

为此,我需要存储传输服务帐户具有以下权限(遵循 google 文档 here)。 为此,我的 IAC 如下:

main.tf

provider "google" {
  project = var.project
  region  = var.region
  zone    = var.zone
}

locals {
  storage_transfer_service_account = "project-${var.project}@storage-transfer-service.iam.gserviceaccount.com"
}

resource "google_project_service" "storage_transfer_api" {
  project            = var.project
  service            = "storagetransfer.googleapis.com"
  disable_on_destroy = true
}

# For the storage transfer service account
resource "google_project_iam_member" "legacy_bucket_writer" {
  project = var.project
  role    = "roles/storage.legacyBucketWriter"
  member  = "serviceAccount:${local.storage_transfer_service_account}"
}

resource "google_project_iam_member" "object_viewer" {
  project = var.project
  role    = "roles/storage.objectViewer"
  member  = "serviceAccount:${local.storage_transfer_service_account}"
}

但是当我 运行 我的 terraform 计划 我得到以下错误:

tf.plan : var.project is a string, known only after apply
tf.plan : Can't access attributes on a primitive-typed value (string).

我知道 project 变量在计划期间尚未设置,但我如何才能向服务帐户授予必要的权限?

仅关于 terraform 代码的一些评论:

  1. 有一个特殊的 terraform 数据资源 - google_storage_transfer_project_service_account - 使用它可能会有用。它可能看起来像(var.project 表示项目 ID):

    data "google_storage_transfer_project_service_account" "st_service_account" {
      project = var.project
    }
    
  2. Terraform 尝试 运行 很多异步命令 API。同时,一些资源可能依赖于其他资源。有时可以推断出这些依赖关系,有时在 terraform 源文件中没有足够的信息。在另一种情况下,a depends_on meta-argument can be used。有一段代码(在您的地形中)用于启用存储传输 API。这需要时间。据我所知,存储传输服务帐户是在 API 启用期间创建的。在创建服务帐户之前,无法获取其详细信息并为其分配额外的 IAM 角色。