# Ory Keto 관계 튜플 샘플 가이드 (Relationship Tuple Samples) 이 문서는 Baron SSO의 **유저 그룹 중심 통합 권한 정책**을 구현하기 위해 Ory Keto에 저장되는 실제 데이터 샘플을 제공합니다. ## 1. 기본 명명 규칙 (Naming Convention) - **Namespace:** `Tenant`, `UserGroup`, `RelyingParty`, `User` - **Format:** `namespace:object_id#relation@subject` (subject는 `user_id`이거나 `namespace:object_id#relation` 형태의 Subject Set임) --- ## 2. 유저 그룹 및 멤버십 샘플 (User Group & Membership) ### 2.1 그룹 멤버 추가 "한맥 IT 개발팀(`hanmac-it-dev`) 그룹에 사용자 `alice`를 멤버로 추가" - **Tuple:** `UserGroup:hanmac-it-dev#members@User:alice-uuid` - **설명:** alice는 이제 해당 그룹의 권한을 상속받을 준비가 됨. ### 2.2 그룹장(Leader) 임명 "사용자 `bob`을 `hanmac-it-dev` 그룹의 그룹장으로 임명" - **Tuple:** `UserGroup:hanmac-it-dev#owners@User:bob-uuid` - **설명:** bob은 그룹의 소유권을 가지며, 정책에 따라 해당 테넌트의 어드민이 됨. --- ## 3. 정책 기반 자동 권한 상속 (Policy Bridges) ### 3.1 그룹장 -> 테넌트 어드민 승격 "그룹장은 해당 그룹(테넌트)의 어드민 권한을 가진다" (**핵심 정책**) - **Tuple:** `Tenant:hanmac-it-dev#admins@UserGroup:hanmac-it-dev#owners` - **설명:** 이 튜플 하나로 인해 `UserGroup:hanmac-it-dev#owners`에 속한 `bob`은 `Tenant:hanmac-it-dev`의 `admins` 자격을 얻음. ### 3.2 그룹 멤버 -> 테넌트 일반 권한 "그룹 멤버들은 해당 테넌트의 조회(view) 권한을 가진다" - **Tuple:** `Tenant:hanmac-it-dev#members@UserGroup:hanmac-it-dev#members` - **설명:** 그룹에 속한 모든 사용자가 테넌트 자원을 볼 수 있게 함. --- ## 4. 테넌트 간 권한 상속 및 자원 소유 (Hierarchy) ### 4.1 타 테넌트 관리 권한 부여 "개발팀 그룹(`hanmac-it-dev`)에게 `alpha-project` 테넌트의 관리 권한을 부여" - **Tuple:** `Tenant:alpha-project#manage@UserGroup:hanmac-it-dev#members` - **설명:** 이제 개발팀 멤버 전원이 `alpha-project`를 요리할 수 있음. ### 4.2 테넌트-자원(RP) 연결 "인증 앱(`messenger-app`)은 `hanmac-it-dev` 테넌트 소속이다" - **Tuple:** `RelyingParty:messenger-app#parents@Tenant:hanmac-it-dev` - **설명:** `hanmac-it-dev`를 관리하는 사람은 부모 관계를 통해 `messenger-app`도 관리할 수 있게 됨. --- ## 5. 종합 시나리오 예제: Hanmac Family | 대상 리소스 | 관계 | 주체 (Subject) | 비고 | | :--- | :--- | :--- | :--- | | `UserGroup:hanmac-it` | `members` | `User:alice` | Alice는 IT팀 멤버 | | `UserGroup:hanmac-it` | `owners` | `User:bob` | Bob은 IT팀 그룹장 | | `Tenant:hanmac-it` | `admins` | `UserGroup:hanmac-it#owners` | **정책:** Bob은 IT 테넌트 어드민 | | `Tenant:project-x` | `manage` | `UserGroup:hanmac-it#members` | IT팀 전체가 Project-X 관리 | | `RelyingParty:rp-01` | `parents` | `Tenant:project-x` | rp-01은 Project-X 소속 | ### 🔍 권한 확인 (Check API) 결과: 1. **Bob은 `rp-01`을 관리할 수 있는가?** - `bob` -> `UserGroup:hanmac-it#owners` -> `Tenant:hanmac-it#admins` -> (상속 시) -> `rp-01` - **결과: YES** 2. **Alice는 `rp-01`을 관리할 수 있는가?** - `alice` -> `UserGroup:hanmac-it#members` -> `Tenant:project-x#manage` -> (부모 관계) -> `rp-01` - **결과: YES** 3. **Alice는 `Tenant:hanmac-it`의 설정을 바꿀 수 있는가?** - Alice는 `members`일 뿐 `admins`가 아님. - **결과: NO**