시스템 접근 제어
시스템 접근 제어 (System access control)
Trino는 코디네이터에 인증하는 주체(principal)와 쿼리를 실제로 실행하는 사용자 이름을 구분해요. 예를 들어 Trino CLI를 실행할 때 Trino 사용자 이름은 --user 옵션으로 지정할 수 있어요.
출처: 문서
본문
기본적으로 Trino 코디네이터는 어떤 주체든 어떤 Trino 사용자로 쿼리를 실행하도록 허용해요. 보안 환경에서는 이 동작이 바람직하지 않을 테니, 대개 커스터마이징이 필요해요.
구현 (Implementation)
SystemAccessControlFactory는 SystemAccessControl 인스턴스를 만드는 책임을 가져요. 그리고 관리자가 Trino 설정에서 사용하는 SystemAccessControl 이름도 정의해요.
SystemAccessControl 구현체는 몇 가지 책임을 가져요.
- 주어진 주체가 특정 사용자로 쿼리를 실행할 권한이 있는지 검증하기
- 주어진 사용자가 특정 시스템 속성의 값을 바꿀 수 있는지 판별하기
- 모든 카탈로그에 걸쳐 접근 검사를 수행하기. 이 접근 검사는 어떤 커넥터별 검사보다 먼저 일어나므로,
ConnectorAccessControl이 허용할 권한도 거부할 수 있어요.
SystemAccessControl과 SystemAccessControlFactory의 구현은 플러그인으로 감싸서 Trino 클러스터에 설치해야 해요.
설정 (Configuration)
SystemAccessControl과 SystemAccessControlFactory를 구현한 플러그인을 코디네이터에 설치한 뒤에는 access-control.config-files 속성이 지정한 파일(들)로 설정해요. 기본값은 단일 etc/access-control.properties 파일이에요. access-control.name을 제외한 모든 속성은 SystemAccessControl 구현체별로 달라요.
access-control.name 속성은 Trino가 SystemAccessControlFactory.getName()이 반환하는 이름을 기준으로 등록된 팩토리를 찾는 데 사용해요. 나머지 속성은 맵으로 묶여 SystemAccessControlFactory.create()에 전달돼요.
예제 설정 파일:
access-control.name=custom-access-control
custom-property1=custom-value1
custom-property2=custom-value2
더 알아보기 (Learn more)
접근 제어의 실제 규칙 작성 방법이 궁금하다면 Trino의 접근 제어 문서를 함께 보면 흐름이 이어져요.