确保 Google 个服务帐户

Ensure Google service accounts

在 Terraform 中,我启用了这样的服务:

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

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

现在确实有时会出现在使用sa的邮箱时,出现服务账号不存在的错误:

Error 400: Service account service-123@gcp-sa-apigateway.iam.gserviceaccount.com does not exist.

我在 API 资源管理器中再次检查 API 已启用!

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

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

正如 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 平台上创建,则仅执行关键语句。

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

发现了关于 google_project_service_identity

因此,由于我在 cloudfunctions 中看到了这个问题,您可以创建一个 google_project_service_identity.cloudfunctions 并希望得到详细的错误消息。

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

对于 apigateway 具体而言,Google 支持人员确认未记录的行为是在创建第一个资源时延迟创建 SA。