无法从 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 代码的一些评论:
有一个特殊的 terraform 数据资源 - google_storage_transfer_project_service_account - 使用它可能会有用。它可能看起来像(var.project
表示项目 ID):
data "google_storage_transfer_project_service_account" "st_service_account" {
project = var.project
}
Terraform 尝试 运行 很多异步命令 API。同时,一些资源可能依赖于其他资源。有时可以推断出这些依赖关系,有时在 terraform 源文件中没有足够的信息。在另一种情况下,a depends_on
meta-argument can be used。有一段代码(在您的地形中)用于启用存储传输 API。这需要时间。据我所知,存储传输服务帐户是在 API 启用期间创建的。在创建服务帐户之前,无法获取其详细信息并为其分配额外的 IAM 角色。
我正在尝试使用 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 代码的一些评论:
有一个特殊的 terraform 数据资源 - google_storage_transfer_project_service_account - 使用它可能会有用。它可能看起来像(
var.project
表示项目 ID):data "google_storage_transfer_project_service_account" "st_service_account" { project = var.project }
Terraform 尝试 运行 很多异步命令 API。同时,一些资源可能依赖于其他资源。有时可以推断出这些依赖关系,有时在 terraform 源文件中没有足够的信息。在另一种情况下,a
depends_on
meta-argument can be used。有一段代码(在您的地形中)用于启用存储传输 API。这需要时间。据我所知,存储传输服务帐户是在 API 启用期间创建的。在创建服务帐户之前,无法获取其详细信息并为其分配额外的 IAM 角色。