terraform/modules/iam/main.tf (98 lines of code) (raw):
#
# Copyright 2023 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
############## Service Accounts ######################################
resource "google_service_account" "sa_dispatcher" {
project = var.project
account_id = var.sa_dispatcher
display_name = "Runtime SA for Dispatcher service"
}
resource "google_service_account" "sa_tagger" {
project = var.project
account_id = var.sa_tagger
display_name = "Runtime SA for Tagger service"
}
resource "google_service_account" "sa_dispatcher_tasks" {
project = var.project
account_id = var.sa_dispatcher_tasks
display_name = "To authorize PubSub Push requests to Tagging Dispatcher Service"
}
resource "google_service_account" "sa_configurator" {
project = var.project
account_id = var.sa_configurator
display_name = "Runtime SA for configurator service"
}
resource "google_service_account" "sa_configurator_tasks" {
project = var.project
account_id = var.sa_configurator_tasks
display_name = "To authorize PubSub Push requests to configurator Service"
}
resource "google_service_account" "sa_snapshoter_bq" {
project = var.project
account_id = var.sa_snapshoter_bq
display_name = "Runtime SA for BQ Snapshoter service"
}
resource "google_service_account" "sa_snapshoter_bq_tasks" {
project = var.project
account_id = var.sa_snapshoter_bq_tasks
display_name = "To authorize PubSub Push requests to BQ Snapshoter Service"
}
resource "google_service_account" "sa_snapshoter_gcs" {
project = var.project
account_id = var.sa_snapshoter_gcs
display_name = "Runtime SA for GCS Snapshoter service"
}
resource "google_service_account" "sa_snapshoter_gcs_tasks" {
project = var.project
account_id = var.sa_snapshoter_gcs_tasks
display_name = "To authorize PubSub Push requests to GCS Snapshoter Service"
}
resource "google_service_account" "sa_tagger_tasks" {
project = var.project
account_id = var.sa_tagger_tasks
display_name = "To authorize PubSub Push requests to Tagger Service"
}
############## Service Accounts Access ################################
# Use google_project_iam_member because it's Non-authoritative.
# It Updates the IAM policy to grant a role to a new member.
# Other members for the role for the project are preserved.
#### Dispatcher Tasks Permissions ###
resource "google_service_account_iam_member" "sa_dispatcher_account_user_sa_dispatcher_tasks" {
service_account_id = google_service_account.sa_dispatcher.name
role = "roles/iam.serviceAccountUser"
member = "serviceAccount:${google_service_account.sa_dispatcher_tasks.email}"
}
#### Dispatcher SA Permissions ###
#### Configurator SA Permissions ###
// write cache entries and/or read backup policies (when using datastore as policies backend)
resource "google_project_iam_member" "sa_configurator_datastore_viewer" {
project = var.project
role = "roles/datastore.user"
member = "serviceAccount:${google_service_account.sa_configurator.email}"
}
// read backup policies when using data catalog as backend
resource "google_project_iam_member" "sa_configurator_datacatalog_viewer" {
project = var.project
role = "roles/datacatalog.viewer"
member = "serviceAccount:${google_service_account.sa_configurator.email}"
}
#### Configurator Tasks SA Permissions ###
resource "google_service_account_iam_member" "sa_configurator_account_user_sa_configurator_tasks" {
service_account_id = google_service_account.sa_configurator.name
role = "roles/iam.serviceAccountUser"
member = "serviceAccount:${google_service_account.sa_configurator_tasks.email}"
}
#### BQ Snapshoter Tasks SA Permissions ###
resource "google_service_account_iam_member" "sa_snapshoter_bq_account_user_sa_inspector_tasks" {
service_account_id = google_service_account.sa_snapshoter_bq.name
role = "roles/iam.serviceAccountUser"
member = "serviceAccount:${google_service_account.sa_snapshoter_bq_tasks.email}"
}
#### GCS Snapshoter Tasks SA Permissions ###
resource "google_service_account_iam_member" "sa_snapshoter_gcs_account_user_sa_inspector_tasks" {
service_account_id = google_service_account.sa_snapshoter_gcs.name
role = "roles/iam.serviceAccountUser"
member = "serviceAccount:${google_service_account.sa_snapshoter_gcs_tasks.email}"
}
#### Tagger SA Permissions ###
// read / write for backup policies when using datastore as backend
resource "google_project_iam_member" "sa_tagger_datastore_user" {
project = var.project
role = "roles/datastore.user"
member = "serviceAccount:${google_service_account.sa_tagger.email}"
}
resource "google_project_iam_member" "sa_tagger_datacatalog_viewer" {
project = var.project
role = "roles/datacatalog.viewer"
member = "serviceAccount:${google_service_account.sa_tagger.email}"
}
#### Tagger Tasks SA Permissions ###
resource "google_service_account_iam_member" "sa_tagger_account_user_sa_tagger_tasks" {
service_account_id = google_service_account.sa_tagger.name
role = "roles/iam.serviceAccountUser"
member = "serviceAccount:${google_service_account.sa_tagger_tasks.email}"
}