【问题标题】:Ensure Google service accounts确保 Google 服务帐号
【发布时间】:2021-10-16 20:57:47
【问题描述】:

在 Terraform 中,我启用如下服务:

resource "google_project_service" "apigateway" {
  service = "apigateway.googleapis.com"
}

之后,我确保仅在创建资源后才引用 apigateway (service-123@gcp-sa-apigateway.iam.gserviceaccount.com) 的服务帐户。

现在有时确实会发生在使用 sa 的电子邮件时,我收到服务帐户不存在的错误:

错误 400:服务帐户 service-123@gcp-sa-apigateway.iam.gserviceaccount.com 不存在。

我在 API Explorer 中再次检查了 API 已启用!

这反过来又会发生在 apigateway 上,就像其他人一样(例如 cloudfunctions)。 所以我想知道如何确保创建服务帐户?

我天真地认为创建google_project_services 应该可以解决问题,但似乎并非在所有情况下都如此。关于 Google 服务帐户的文档似乎非常稀少:(

【问题讨论】:

  • 我不确定 - 试试 depends_on。我不确定资源是否会等到创建依赖服务帐户。
  • 已经在使用depends_on。它没有帮助。

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


【解决方案1】:

正如 John Hanley 所说,您可以使用depends_on 创建此dependency in terraform

正如您在以下评论中看到的那样,将创建服务帐户,但将分配密钥,直到第一句完成。

  resource "google_service_account" "service_account" {
  account_id   = "terraform-test"
  display_name = "Service Account"
}

resource "google_service_account_key" "mykey" {
  service_account_id = google_service_account.service_account.id
  public_key_type    = "TYPE_X509_PEM_FILE"

  depends_on = [google_service_account.service_account]
}

此外,如果服务帐户已经在 GCP 平台上创建,则仅执行 key 语句。

请务必注意,您用于此配置的帐户需要具有create an account 所需的 IAM 权限。

【讨论】:

  • 我已经在使用depends_on。这个问题专门针对隐式创建的服务帐户!
  • @abergmeier - 你的问题没有表明这一点。更新您的问题,包括足够的详细信息以重现您的问题。
  • 请注意,apigateways 及其 google 托管服务帐户的工作方式不同(当前)。这没有记录。
【解决方案2】:

了解google_project_service_identity

因此,由于我发现 cloudfunctions 存在此问题,您可以创建一个 google_project_service_identity.cloudfunctions 并希望获得详细的错误消息。

遗憾的是,这并不适用于所有人,例如apigateway.

【讨论】:

    【解决方案3】:

    特别是对于apigateway,Google 支持确认未记录的行为是 SA 在创建第一个资源时延迟创建。

    【讨论】:

    • 请提供参考资料或 Google 提供的完整措辞。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-29
    • 2015-06-28
    • 2017-03-06
    • 1970-01-01
    • 2021-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多