【问题标题】:Cloud Function always using default service account (Terraform)Cloud Function 始终使用默认服务帐户 (Terraform)
【发布时间】:2021-08-31 15:41:51
【问题描述】:

我正在使用 Terraform 创建云函数资源,并希望覆盖默认服务帐户“@appspot.gserviceaccount.com”以使用具有最低权限的自定义服务帐户。

我已经完成了以下操作,但是一旦创建了 Terraform 资源并检查了云功能权限选项卡,它仍然默认为原始选项“@appspot.gserviceaccount.com”

resource "google_service_account" "service_account" {
  account_id   = "mysa"
  display_name = "Service Account"
}

data "google_iam_policy" "cfunction_iam" {
  binding {
    role = google_project_iam_custom_role.cfunction_role.id
    members = [
      "serviceAccount:${google_service_account.service_account.email}",
    ]
  }
  binding {
    role = "roles/cloudfunctions.developer"
    members = [
      "serviceAccount:${google_service_account.service_account.email}",
    ]
  }
}

resource "google_cloudfunctions_function_iam_policy" "policy" {
  project = google_cloudfunctions_function.function.project
  region = google_cloudfunctions_function.function.region
  cloud_function = google_cloudfunctions_function.function.name
  policy_data = data.google_iam_policy.cfunction_iam.policy_data
}

resource "google_project_iam_custom_role" "cfunction_role" {
    role_id = "customCFunctionRole"
    title = "Custom Cloud Function Role"
    description = "More granular permissions other than default @appspot SA"
    permissions = [
      "storage.objects.create", 
      "storage.multipartUploads.create",
      "storage.objects.get",
      "bigquery.tables.create",
      "bigquery.tables.list",
      "bigquery.tables.updateData",
      "logging.logEntries.create",
    ]
}

@Update,我也在 Cloud Function 资源中设置了服务帐户参数:

service_account_email = "${google_service_account.service_account.email}"

我在这里错过了什么?

谢谢!

【问题讨论】:

  • 我不熟悉 Terraform,但看起来您实际上并没有使用您可能创建的服务帐户部署云功能。您似乎正在创建一个服务帐户,并且一些绑定可能会绑定 Cloud Function、帐户和角色(我不清楚),但您希望部署 Cloud Functions 以作为服务帐户运行。
  • 此属性需要是您新创建的服务帐号:registry.terraform.io/providers/hashicorp/google/latest/docs/…
  • 嗨 DazWilkin,我很抱歉,但我忘了附加云函数资源。我已经将服务帐户属性设置如下: service_account_email = "${google_service_account.service_account.email}"
  • 如果您确信自己在做正确的事情,那么 Terraform 提供程序当然有可能是不正确的(忽略了您的 service_account_email)。也许在 GitHub 存储库上提出问题:github.com/hashicorp/terraform-provider-google/issues
  • @DazWikin,由于某种原因它开始工作了。我删除了 tf state 并运行了 terraform apply ,此时它获取了服务帐户。谢谢!

标签: google-cloud-platform google-cloud-functions terraform terraform-provider-gcp


【解决方案1】:

在这里添加我自己的答案。删除之前的状态并让 Terraform 重新创建所有资源后,它选择了描述中定义的正确服务帐户。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-01
    • 2021-12-14
    • 2016-12-05
    • 2022-10-02
    • 2021-11-23
    • 1970-01-01
    • 2021-09-11
    • 2018-08-08
    相关资源
    最近更新 更多