그룹과 RBAC용 Terraform 패턴

그룹과 RBAC용 Terraform 패턴 (Terraform patterns for groups and RBAC)

Boundary의 RBAC(역할 기반 접근 제어)를 사용하면 역할의 허용 작업을 한 번만 정의하고, 개별적으로 권한을 부여하는 대신 사용자나 그룹을 그 역할에 할당할 수 있어요. 이 페이지는 Boundary 사용자를 그룹화하고 그룹에 RBAC 역할을 할당하는 Terraform 패턴을 보여줍니다.

이 페이지는 사용자 그룹화와 RBAC 역할 할당을 다룹니다. 사용자 자체를 만드는 방법은 사용자와 인증 방법 페이지를 참고하세요.

보안 모범 사례는 인가 결정을 내릴 때 RBAC를 사용하도록 권장합니다. RBAC는 사용자가 수행할 수 있는 작업을 정의하는 역할을 만들고, 그 역할에 사용자를 한 명 이상 할당하는 방법론이에요. Boundary에서는 사용자를 역할에 직접 할당할 수도 있지만, 동등한 접근을 가진 사용자를 그룹에 넣는 것이 더 나은 패턴입니다. 그런 다음 그룹을 Boundary 환경에 최소 권한을 부여하는 역할에 할당할 수 있어요.

출처: HashiCorp Boundary docs

본문

사전 요구 사항

이 문서는 독자가 다음을 갖추고 있다고 가정합니다:

  • Terraform 기초에 대한 이해
  • 기존 Boundary 설치
  • Terraform Boundary 프로바이더 구성
  • 만들려는 그룹에 할당할 Boundary 사용자와 인증 방법 생성

그룹 구성

이 예시는 Accounting 그룹에 사용자를 추가합니다.

# Add Jeff and Susmitha to the Accounting group
resource "boundary_group" "Accounting" {
  name        = "Accounting"
  description = "The Accounting Department"
  member_ids  = [boundary_user.susmitha,id, boundary_user.jeff.id]
  scope_id    = boundary_scope.project.id
}

그룹을 수동으로 채울 필요는 없고, 대신 아이덴티티 프로바이더가 제공하는 기존 그룹을 활용할 수 있어요.

그룹 유형 멤버십 권장되는 경우
Static 그룹 수동 할당 작고 안정적인 멤버십
Managed 그룹 아이덴티티 프로바이더에서 자동 채움 멤버십이 이미 아이덴티티 프로바이더에 존재 (권장)

Managed 그룹 구성

이 예시는 Engineering이라는 LDAP(경량 디렉터리 접근 프로토콜) 그룹을 기반으로 자동으로 채워지는 managed 그룹을 만듭니다.

resource "boundary_managed_group_ldap" "Engineering" {
  name           = "Engineering"
  description    = "Engineering Managed LDAP Group"
  auth_method_id = boundary_auth_method_ldap.forumsys_ldap.id
  group_names    = ["Engineering"]
}

HashiCorp는 가능하면 managed 그룹을 사용할 것을 권장합니다. 그룹 멤버십 관리를 추상화하고 Boundary 관리를 단순화하기 때문이에요.

역할 구성

그룹을 만든 다음에는 그 그룹에 역할을 하나 이상 할당해서 그룹 멤버들이 Boundary에서 유용한 작업을 할 수 있게 해야 해요.

이 패턴은 readonly라는 역할을 만드는데, 이 역할은 모든 Boundary 리소스에 읽기 전용으로 접근할 수 있게 해주는 grant를 포함합니다. 이 예시는 또한 Accounting static 그룹과 Engineering managed 그룹을 그 역할에 연결합니다.

resource "boundary_role" "readonly" {
  name          = "readonly"
  description   = "A readonly role"

  # Assign Accounting and Engineering to this role
  principal_ids = [boundary_group.accounting.id, boundary_managed_group_ldap.Engineering.id]

  # This is the grant string provides read-only access to all objects in the current scope.
  grant_strings = ["ids=*;type=*;actions=read"]
  scope_id      = boundary_scope.project.id
}

관련 역할, 그룹, grant 문서

이 주제에서 언급한 Boundary 리소스에 대한 자세한 내용은 도메인 모델 문서를 참고하세요:

Terraform으로 다음 리소스를 관리하는 방법에 대한 자세한 내용은 Boundary 프로바이더 문서를 참고하세요:

더 알아보기 (Learn more)

호스트와 호스트 세트를 만들어 사용자가 연결할 타깃을 구성하고 싶을 거예요. 타깃에는 주소나 호스트, 그리고 그 호스트에 연결할 자격 증명이 필요합니다.