클라우드/GCP 자원 테라폼으로 관리해보기
(3-2) GCP IAM Policy 관리 - serviceAccount, group, user를 role에 연결해주는 모듈
Fanic
2024. 6. 9. 01:50
반응형
serviceAccount, group, user를 role에 연결해주는 모듈에 대해 기술한다.
1. iam_policy.tf
모듈을 입력하는 부분으로 필수 입력으로 member_type(serviceAccount, group, user)을 지정해야한다.
iam_policy 모듈의 경우 email 정보를 서비스 계정 생성 모듈의 output 정보를 활용하여 가져오게 하였다.
# 필수 입력 member_type : user, serviceAccount , group
module "iam_policy" {
source = "./modules/iam_policy_module"
project_id = "pjt-an3-dev-vm-2"
member_type = "serviceAccount"
email = module.svcacc_test_account.service_account_email
roles = {
editor = "roles/editor",
network_admin = "roles/compute.networkAdmin",
serviceAccountUser = "roles/iam.serviceAccountUser",
artifactregistry_viewer = module.artifactregistry_viewer.google_project_iam_custom_role_id,
artifactregistry_reader ="roles/artifactregistry.reader",
artifactregistry_admin = "roles/artifactregistry.admin",
serviceAgent = "roles/run.serviceAgent",
serviceAccountTokenCreator = "roles/iam.serviceAccountTokenCreator",
#artifactregistry_viewer ="projects/pjt-an3-dev-vm-2/roles/artifactregistry_viewer",
# 추가적인 역할들
}
}
module "sa_pubsub_bigquery_policy" {
source = "./modules/iam_policy_module"
project_id = "pjt-an3-dev-vm-2"
member_type = "serviceAccount"
email = "pubsub-bigquery@pjt-an3-dev-vm-2.iam.gserviceaccount.com"
roles = {
editor = "roles/editor",
network_admin = "roles/compute.networkAdmin",
serviceAccountUser = "roles/iam.serviceAccountUser",
# 추가적인 역할들z
}
}
module "sa_terraform_connect_policy" {
source = "./modules/iam_policy_module"
project_id = "pjt-an3-dev-vm-2"
member_type = "serviceAccount"
email = "terraform-connect@pjt-an3-shard-vpc-2.iam.gserviceaccount.com"
roles = {
artifactregistry_admin = "roles/artifactregistry.admin",
cloudfunctions_admin = "roles/cloudfunctions.admin"
# 추가적인 역할들z
}
}
module "user_hr9_iam_policy" {
source = "./modules/iam_policy_module"
project_id = "pjt-an3-dev-vm-2"
member_type = "user"
email = "hr9@hrc0618.com"
roles = {
editor = "roles/editor",
network_admin = "roles/compute.networkAdmin",
serviceAccountUser = "roles/iam.serviceAccountUser",
# 추가적인 역할들
}
}
module "user_hr3_iam_policy" {
source = "./modules/iam_policy_module"
project_id = "pjt-an3-dev-vm-2"
member_type = "user"
email = "hr3@hrc0618.com"
roles = {
artifactregistry_reader ="roles/artifactregistry.reader",
artifactregistry_viewer = module.artifactregistry_viewer.google_project_iam_custom_role_id,
# 추가적인 역할들
}
}
GCP 콘솔에서 확인한 추가된 권한
iam_policy_module 정보
1) main.tf
iam_policy.tf 에서 지정된 memeber_type을 통해 타입을 식별하여 이메일을 추가하게 된다.
resource "google_project_iam_member" "project_iam_member" {
for_each = var.roles
project = var.project_id
role = each.value
member = "${var.member_type}:${var.email}"
# 추가적인 맴버 종류에 따른 처리
}
2) output
현재는 전달 받는 곳이 없어 추가하지 않았다.
3) variables.tf
roles의 경우 map 형태로 보내야하며 member_type의 경우 serviceAccount, group, user를 지정하여 보내도록 설정하였다.
variable "project_id" {
description = "프로젝트 ID"
type = string
}
variable "email" {}
variable "roles" {
type = map(string)
default = {}
}
variable "member_type" {
description = "맴버 종류 : serviceAccount, group, user"
type = string
}
반응형