오늘의 인기 글
최근 글
최근 댓글
Today
Total
05-09 15:52
관리 메뉴

우노

[Terraform] 동일 GCP Service Account를 사용한 다중 프로젝트 접근 설정 본문

DevOps/Terraform

[Terraform] 동일 GCP Service Account를 사용한 다중 프로젝트 접근 설정

운호(Noah) 2023. 6. 4. 17:35

들어가기 앞서,

  • 해당 포스트에선, Terraform을 사용해, 동일한 GCP Service Account를 사용해 다중 프로젝트에 접근할 수 있도록 설정하는 방법에 대해서 다뤄보겠습니다.

예제 코드

  • 예제 코드는, 프로젝트 C의 Service Account를 사용해 프로젝트 A와 B에 접근하는 설정을 다루고 있으며, 아래와 같은 방식으로 진행됩니다.
    • 프로젝트 C에 Service Account 및 Key를 생성합니다.
    • 프로젝트 C의 Service Account를 프로젝트 A와 B의 IAM 멤버로 추가합니다.
      • 프로젝트 C의 Service Account가 프로젝트 A와 B 각각에 지정된 역할을 가질 수 있도록 설정합니다.
    • 사용자는 프로젝트 C의 Service Account와 Key를 사용해 프로젝트 A와 B에 접근할 수 있게 됩니다.
# 각 프로젝트에서 사용할 역할
locals {
  sa_roles_used_by_projects = {
    projectA_iam_roles_list = [
      "roles/firebase.admin"
    ]

    projectB_iam_roles_list = [
      "roles/firebase.admin"
    ]
  }
}

# 프로젝트 C에 Service Account 및 Key 생성
resource "google_service_account" "projectC_sa" {
  account_id = "projectC-sa"
  display_name = "projectC-sa"

  description = "ProjectA와 ProjectB에 접근하기 위한 service account 입니다."
}
resource "google_service_account_key" "projectC_sa_key" {
  service_account_id = google_service_account.projectC_sa.name
}

# 프로젝트 C의 Service Account를 프로젝트 A의 IAM 멤버로 추가
resource "google_project_iam_member" "projectA_iam" {
  project = "prjectA의 ID"

  count = length(local.sa_roles_used_by_projects.projectA_iam_roles_list)
  role = local.sa_roles_used_by_projects.projectA_iam_roles_list[count.index]
  member = "serviceAccount:${google_service_account.projectC_sa.email}"
}

# 프로젝트 C의 Service Account를 프로젝트 B의 IAM 멤버로 추가
resource "google_project_iam_member" "projectB_iam" {
  project = "prjectB의 ID"

  count = length(local.sa_roles_used_by_projects.projectB_iam_roles_list)
  role = local.sa_roles_used_by_projects.projectB_iam_roles_list[count.index]
  member = "serviceAccount:${google_service_account.projectC_sa.email}"
}
Comments