본문으로 건너뛰기

ReBAC이란? 관계 기반 접근 제어(ReBAC)와 예시

ReBAC이란?​

**관계 기반 접근 제어(ReBAC)**는 사용자와 리소스 간의 관계를 기반으로 접근 권한을 결정합니다: alice는 문서의 owner(소유자), bob은 viewer(뷰어), 문서는 폴더에 in(포함됨), 폴더는 팀에 belongs to(속함). 규칙은 각 관계 유형별로 한 번만 작성되며, 예를 들어 "소유자는 편집 가능, 뷰어는 읽기 가능"과 같이 정의하고, 모든 사용자는 자신에게 기록된 관계를 통해 접근 권한을 얻습니다.

ReBAC이 답하는 일반적인 질문들:

  • 사용자가 리소스의 owner(소유자)인가요?
  • 사용자가 리소스를 소유한 프로젝트의 member(멤버)인가요?
  • 리소스가 사용자가 접근 권한을 가진 type(유형)에 속하나요?

공유가 제품의 일부인 애플리케이션에 적합합니다: 문서 및 파일 공유, 협업 도구, 프로젝트 트래커, 소셜 네트워크 및 멀티 테넌트 SaaS.

ReBAC과 Google Zanzibar​

ReBAC은 Google Drive, Calendar 등 서비스의 공유 기능을 뒷받침하는 시스템인 Google의 Zanzibar 논문(USENIX ATC 2019)을 통해 널리 알려졌습니다. Zanzibar는 관계를 object, relation, user의 tuple(튜플)로 저장하며, 예를 들어 doc:design.md#viewer@user:bob와 같습니다. OpenFGA, SpiceDB와 같은 오픈 소스 서비스들도 동일한 설계를 따릅니다. Casbin에서는 동일한 사실이 하나의 정책 행, 즉 g, bob, design.md, viewer로 표현되며, 모델의 matcher가 각 관계가 허용하는 내용을 정의합니다.

ReBAC vs RBAC vs ABAC​

접근 권한 출처예시 규칙
RBAC사용자의 역할, 모든 리소스에 동일하게 적용editors may edit documents (편집자는 문서를 편집할 수 있음)
ReBAC특정 리소스에 대한 사용자의 관계the owner of a document may edit it (문서 소유자는 이를 편집할 수 있음)
ABAC사용자, 리소스 및 환경의 속성people in the document's department may read it during business hours (업무 시간 중 문서 부서 소속 인원은 읽을 수 있음)

리소스별로 역할을 지정하는 RBAC("alice is editor of doc1")은 이미 간단한 형태의 ReBAC이며, 아래에서 Casbin이 이를 모델링하는 방식입니다. 접근 제어 모델 선택하기에서는 모든 모델에서 하나의 예제를 통해 비교 분석합니다.

Casbin에서의 ReBAC​

Casbin은 다음으로 ReBAC을 모델링합니다:

  • User–resource–role 관계: “user U has role R on resource O” (예: alice는 doc1에서 collaborator).
  • Resource–type 관계: “resource O is of type T” (예: doc1은 doc 유형임).

권한은 “role R can do action A on type T”로 정의됩니다; 사용자가 유형 T인 리소스에서 역할 R을 가지고 있다면 해당 권한을 얻습니다. 예시 모델:

[request_definition]
r = sub, obj, act

[policy_definition]
p = role, obj_type, act

[role_definition]
g = _, _, _
g2 = _, _

[policy_effect]
e = some(where (p.eft == allow))

[matchers]
m = g(r.sub, r.obj, p.role) && g2(r.obj, p.obj_type) && r.act == p.act
# Permission definition: The "collaborator" role can read files of type "doc"
p, collaborator, doc, read

# User-Resource-Role Relationship: alice is a collaborator of doc1
g, alice, doc1, collaborator

# Resource-Type Relationship: doc1 is of type "doc"
g2, doc1, doc

즉: 사용자는 리소스에 대해 올바른 역할을 가져야 하며, 리소스는 권한 규칙의 유형과 일치해야 합니다. Casbin은 g(user–resource–role), g2(resource–type), p(role–type–action)를 결합하여 접근 권한을 결정합니다.

FAQ​

ReBAC을 사용하려면 Zanzibar 스타일의 서비스가 필요한가요? 아닙니다. 관계가 애플리케이션 데이터베이스에 저장되고 체크가 서비스 내부에서 이루어진다면 Casbin과 같은 라이브러리로 충분합니다. 여러 서비스가 하나의 관계 저장소를 공유해야 할 때 전용 서비스가 유용합니다; Casbin vs. OpenFGA를 참조하세요.

코드를 작성하지 않고 이 모델을 시도해 볼 수 있나요? 네. 온라인 에디터에서 ReBAC 예제를 선택하세요.

Comments are powered by giscus and GitHub Discussions. They load from giscus.app and GitHub only after you click the button below.