Учетная запись Google Cloud Service назначает владельца данных через Terraform - PullRequest
1 голос
/ 12 января 2020

У меня есть пользователь учетной записи службы Google Cloud, созданный в Terraform:

resource "google_service_account" "firestore_sa" {
  account_id   = "firestore_sa_${random_id.project-unique-id.hex}"
}

Я хочу предоставить владельцу учетной записи службы доступ к Firestore и попробовал это без всякой удачи:

resource "google_service_account_iam_binding" "firestore_sa_role" {
  service_account_id = google_service_account.firestore_sa.name
  role               = "roles/datastore.owner"
  members            = ["serviceAccount:${google_service_account.firestore_sa.email}"]
}

Ошибка, которую я получаю:

Ошибка 400: Роли ролей / datastore.owner не поддерживаются для этого ресурса. BadRequest

Я могу добавить это достаточно легко, используя GCloud:

gcloud projects add-iam-policy-binding MyProject-ABC123 \
  --member serviceAccount:firestore_sa@myproject-abc123.iam.gserviceaccount.com \
  --role roles/datastore.owner

У меня проблема с переводом между ними, и я мог бы использовать некоторую помощь.

1 Ответ

1 голос
/ 12 января 2020

Я понял!

Первая часть состоит в том, что команда gcloud скрывает что-то, чего нет у Terraform - вам нужны все 3 из них:

  1. google_service_account (+ ключ )
  2. google_project_iam_binding
  3. google_project_iam_member

Вторая часть Я использовал google_service_account_iam_binding вместо привязки проекта. Привязка проекта - это то, что мне действительно нужно здесь. Итак, моя окончательная конфигурация выглядела так:

resource "google_project_iam_binding" "firestore_sa_binding" 
{
  role    = "roles/datastore.owner"
  members = ["serviceAccount:${google_service_account.firestore_sa.email}"]
}

resource "google_project_iam_member" "firestore_sa_member" {
  role   = "roles/datastore.owner"
  member = "serviceAccount:${google_service_account.firestore_sa.email}"
}
...