- Вопрос или проблема
- Ответ или решение
- Управление учетными записями сервисов с ролями в нескольких проектах Google Cloud Platform с использованием Terraform
- Проблема с назначением ролей
- 1. Проверка правильности конфигурации
- 2. Проверка переменных
- 3. Использование google_project_iam_custom_role
- 4. Применение конфигурации
- 5. Проверка IAM в консоли GCP
- Заключение
Вопрос или проблема
У меня есть несколько проектов в GCP. Я создал сервисный аккаунт в Project_BA, а затем назначил необходимые роли как в Project_BA, так и в Project_Res этому сервисному аккаунту. Однако, когда я проверял в консоли, никакие роли не были назначены этому сервисному аккаунту в Project_Res. Вот моя настройка terraform:
resource "google_service_account" "service_account" {
project = var.project_ba
account_id = replace(var.name, "_", "-")
description = "Аккаунт для запуска функции загрузки"
}
# Создать пользовательскую роль в project_res
resource "google_project_iam_custom_role" "custom_role" {
project = var.project_res
role_id = "ba_custom_roles"
title = "Пользовательские роли"
permissions = [
"roles/secretmanager.secretAccessor",
"roles/secretmanager.viewer"
]
}
# Назначить пользовательскую роль сервисному аккаунту в project_ba
resource "google_project_iam_binding" "project_res_custom_role_binding" {
project = var.project_res
role = "projects/${var.project_res}/roles/${google_project_iam_custom_role.custom_role.role_id}"
members = [
"serviceAccount:${google_service_account.service_account.email}"
]
}
resource "google_project_iam_member" "project_ba_storage_admin" {
project = var.project_ba
role = "roles/storage.admin"
member = "serviceAccount:${google_service_account.service_account.email}"
}
resource "google_project_iam_member" "project_ba_bigquery_data_editor" {
project = var.project_ba
role = "roles/bigquery.dataEditor"
member = "serviceAccount:${google_service_account.service_account.email}"
}
resource "google_project_iam_member" "project_ba_composer_admin" {
project = var.project_ba
role = "roles/composer.admin"
member = "serviceAccount:${google_service_account.service_account.email}"
}
Ответ или решение
Управление учетными записями сервисов с ролями в нескольких проектах Google Cloud Platform с использованием Terraform
Ваша ситуация, касающаяся управления учетными записями сервисов в нескольких проектах GCP с использованием Terraform, является типичной задачей для облачной инфраструктуры. Давайте разберем вашу конфигурацию и выявим, где могут быть препятствия на пути к корректной настройке ролей.
Проблема с назначением ролей
Вы создали учетную запись сервиса в проекте Project_BA
и назначили ей роли как в этом проекте, так и в Project_Res
. Однако вы столкнулись с тем, что роли, назначенные в Project_Res
, не отображаются в консоли. Возможные причины и шаги для их устранения могут быть следующими:
1. Проверка правильности конфигурации
Ваш код Terraform выглядит следующим образом:
resource "google_service_account" "service_account" {
project = var.project_ba
account_id = replace(var.name, "_", "-")
description = "Account to run the ingest function"
}
# Создание кастомной роли в Project_Res
resource "google_project_iam_custom_role" "custom_role" {
project = var.project_res
role_id = "ba_custom_roles"
title = "Custom Roles"
permissions = [
"roles/secretmanager.secretAccessor",
"roles/secretmanager.viewer"
]
}
# Назначение кастомной роли учетной записи сервиса в Project_Res
resource "google_project_iam_binding" "project_res_custom_role_binding" {
project = var.project_res
role = "projects/${var.project_res}/roles/${google_project_iam_custom_role.custom_role.role_id}"
members = [
"serviceAccount:${google_service_account.service_account.email}"
]
}
resource "google_project_iam_member" "project_ba_storage_admin" {
project = var.project_ba
role = "roles/storage.admin"
member = "serviceAccount:${google_service_account.service_account.email}"
}
resource "google_project_iam_member" "project_ba_bigquery_data_editor" {
project = var.project_ba
role = "roles/bigquery.dataEditor"
member = "serviceAccount:${google_service_account.service_account.email}"
}
resource "google_project_iam_member" "project_ba_composer_admin" {
project = var.project_ba
role = "roles/composer.admin"
member = "serviceAccount:${google_service_account.service_account.email}"
}
2. Проверка переменных
Убедитесь, что переменные var.project_ba
и var.project_res
правильно определены и ссылаются на верные проекты. Ошибки в имени проекта могут приводить к тому, что политики IAM не применяются.
3. Использование google_project_iam_custom_role
Пожалуйста, проверьте, действительно ли кастомная роль была успешно создана в Project_Res
. Вы можете это сделать, выполнив команду gcloud
:
gcloud iam roles describe projects/{var.project_res}/roles/ba_custom_roles
Если она отсутствует, возможно, проблема заключается в неправильном определении при создании.
4. Применение конфигурации
После внесения изменений запустите следующие команды для обновления вашей инфраструктуры:
terraform init
terraform plan
terraform apply
Убедитесь, что команда terraform apply
прошла без ошибок и все ресурсы были созданы/обновлены корректно.
5. Проверка IAM в консоли GCP
Перейдите в консоль IAM вашего проекта Project_Res
и убедитесь, что учетная запись сервиса отображается среди членов с назначенной кастомной ролью. Иногда могут возникать задержки в обновлении интерфейса, так что дайте системе немного времени.
Заключение
Управление ролями сервисных аккаунтов в нескольких проектах GCP может быть сложным, но при правильной настройке с использованием Terraform это становится более управляемым процессом. Используя предлагаемую выше стратегию, вы должны быть в состоянии успешно назначить роли вашему сервисному аккаунту в разных проектах.
Если у вас остались вопросы или если проблема не была решена, рекомендуется обратиться к более детальной документации GCP или к сообществу Terraform для получения помощи.