접근 제어
접근 제어 (Access Control)
개요 (Overview)
Apache Pinot은 AccessControlFactory 인터페이스를 사용해 ACL을 구현해요. AllowAllAccessFactory는 아무것도 강제하지 않는 no-op 팩토리예요. 기본적으로 사용되는 팩토리이기도 해요. Pinot의 인증·권한 부여 레이어는 인터페이스의 자체 구현을 제공함으로써 확장할 수 있어요.
출처: 문서
본문
권한 부여 검사와 속성 흐름 (Authorization checks and attribute flow)
Pinot의 권한 부여 흐름은 역할(role) 집합에 의존해요. 다음 목록은 해당 속성과 함께 권한 부여 검사에 포함되어야 하는 역할을 언급해요. 특정 엣지 케이스에서 필요한 모든 검사를 강제하지 못하는 불완전한 규칙 집합을 구성하는 것도 가능하지만, 이 목록은 완전한 구현에 따라 해당 검사에 보내야 하는 속성을 나타내요:
- Tables 역할은 다음을 속성으로 받아요: 접근할 테이블의 값으로 쓰일 TableNames. 검사가 수행되는 테이블의 Table Type(OFFLINE 또는 REALTIME). 검사의 access type — 검사가 Create, Read, Update, Delete(CRUD) 동작인지 Pinot 고유 동작인지 결정해요. 검사의 data source type — SET 또는 UNSET일 수 있으며, 이 검사에 데이터 소스가 설정됐는지를 나타내요. 검사의 access path — 테이블 URI 또는 API 경로일 수 있어요.
- Tenants 역할은 tenant 이름을 속성으로 받아요.
- Cluster 역할은 cluster 이름을 속성으로 받아요.
- Infrastructure 역할은 infrastructure 이름을 속성으로 받아요.
- Realtime Provisioning 역할은 realtime provisioning 이름을 속성으로 받아요.
권한 부여 규칙 읽기/쓰기 (Reading/Writing authorization rules)
권한 부여 규칙과 RLS 구성의 읽기/쓰기는 Zookeeper의 다음 경로 아래에 있어요: /<cluster_name>/PROPERTYSTORE/CONFIGS/PINOT/ACCESS_CONTROL, 테이블마다 별도로.
- 클러스터 수준 ACL과 RLS 규칙은 같은
ACCESS_CONTROL하위 트리의CLUSTERznode 아래에 저장돼요. - 테이블 수준 ACL과 RLS 규칙은 같은
ACCESS_CONTROL하위 트리의TABLEznode 아래에 저장돼요.
이 ACL은 Controller REST API로 읽고 쓸 수 있어요: POST /access_control/principals 및 GET /access_control/principals/{principal}. 이 API는 다음 유형의 보안 주체(principal)와 함께 동작해요: HTTP, OAUTH2, SERVICE.