이는 Google Cloud Platform의 리소스에 대한 여러 IAM 역할을 보다 쉽게 비파괴적으로 관리할 수 있게 해주는 하위 모듈 모음입니다.
이 모듈은 Terraform 1.3+에서 사용하도록 고안되었으며 Terraform 1.3+를 사용하여 테스트되었습니다. Terraform >=1.3을 사용하여 비호환성을 발견하면 문제를 열어주세요.
업그레이드를 지원하기 위해 다음 가이드를 사용할 수 있습니다.
전체 예제는 예제 폴더에 있지만 두 프로젝트의 역할을 관리하기 위한 기본 사용법은 다음과 같습니다.
module "projects_iam_bindings" {
source = " terraform-google-modules/iam/google//modules/projects_iam "
version = " ~> 8.0 "
projects = [ " project-123456 " , " project-9876543 " ]
bindings = {
" roles/storage.admin " = [
" group:[email protected] " ,
" user:[email protected] " ,
]
" roles/compute.networkAdmin " = [
" group:[email protected] " ,
" user:[email protected] " ,
]
" roles/compute.imageUser " = [
" user:[email protected] " ,
]
}
}
또한 이 모듈은 Terraform을 통해 할당되지 않은 모든 역할을 제거하는 권한 모드를 제공합니다. 다음은 권한 모드를 사용하여 스토리지 버킷에 대한 액세스를 관리하는 예입니다.
module "storage_buckets_iam_bindings" {
source = " terraform-google-modules/iam/google//modules/storage_buckets_iam "
version = " ~> 8.0 "
storage_buckets = [ " my-storage-bucket " ]
mode = " authoritative "
bindings = {
" roles/storage.legacyBucketReader " = [
" user:[email protected] " ,
" group:[email protected] " ,
]
" roles/storage.legacyBucketWriter " = [
" user:[email protected] " ,
" group:[email protected] " ,
]
}
}
mode
변수는 서브모듈의 동작을 제어합니다. 기본적으로 "additive"로 설정되어 있으며 가능한 옵션은 다음과 같습니다:
권한 모드에서는 하위 모듈이 모듈에 나열된 IAM 바인딩을 완전히 제어합니다. 이는 모듈 외부의 역할에 추가된 모든 구성원이 다음에 Terraform이 실행될 때 제거된다는 것을 의미합니다. 그러나 모듈에 나열되지 않은 역할은 영향을 받지 않습니다.
추가 모드에서 하위 모듈은 기존 바인딩을 영향을 받지 않은 상태로 둡니다. 대신, 모듈에 나열된 모든 멤버가 기존 IAM 바인딩 세트에 추가됩니다. 그러나 모듈에 나열된 구성원은 모듈에 의해 완전히 제어 됩니다 . 즉, 모듈을 통해 바인딩을 추가하고 나중에 제거하면 모듈이 역할 바인딩 제거를 올바르게 처리한다는 의미입니다.
각 하위 모듈은 GCP의 IAM 바인딩을 변경하기 전에 일부 변수에 대한 작업을 수행합니다. 하위 모듈에서 널리 사용되는 for_each
(추가 정보)의 제한으로 인해 하위 모듈에 제공할 수 있는 동적 값의 종류에는 특정 제한이 있습니다.
projects
)는 1개의 엔터티에만 허용됩니다.projects
)를 전달하는 경우 구성은 정적이어야 합니다 . 즉, 엔터티 이름을 가져오기 위해 다른 리소스의 필드를 사용할 수 없습니다(여기에는 random_id
를 통해 무작위로 생성된 해시를 가져오는 것이 포함됩니다). 의지).authoritative
모드에서만 동적일 수 있습니다. 다음 리소스 유형을 선택하여 IAM 바인딩을 적용할 수 있습니다.
projects
변수)organizations
변수)folders
변수)service_accounts
변수)subnets
변수)storage_buckets
변수)pubsub_topics
변수)pubsub_subscriptions
변수)kms_key_rings
변수)kms_crypto_keys
변수)secrets
변수)managed_zones
변수)entity_ids
및 location
변수) 영향을 미칠 리소스를 선택하려면 모듈 호출에 지정된 변수를 설정하세요. mode
변수를 설정하고 선택한 리소스를 관리할 수 있는 충분한 권한을 부여하는 것을 잊지 마세요. bindings
변수는 리소스에 적용할 IAM 바인딩이 없는 경우 인수로 전달된 빈 맵 {}
허용합니다.
하위 모듈을 실행하려면 해당 리소스에 대한 IAM을 관리하기 위한 적절한 역할을 가진 서비스 계정이 있어야 합니다. 적절한 역할은 다음과 같이 대상으로 삼는 리소스에 따라 다릅니다.
올바른 Terraform 버전이 1.3 이상인지 확인하세요.
$HOME/.terraform.d/plugins/에 컴파일된 플러그인이 있는지 확인하세요.
컴파일하고 사용하는 방법에 대한 자세한 내용은 각 플러그인 페이지를 참조하세요.