시스템 접근 제어

시스템 접근 제어 (System access control)

Trino는 코디네이터에 인증하는 주체(principal)와 쿼리를 실제로 실행하는 사용자 이름을 구분해요. 예를 들어 Trino CLI를 실행할 때 Trino 사용자 이름은 --user 옵션으로 지정할 수 있어요.

출처: 문서

본문

기본적으로 Trino 코디네이터는 어떤 주체든 어떤 Trino 사용자로 쿼리를 실행하도록 허용해요. 보안 환경에서는 이 동작이 바람직하지 않을 테니, 대개 커스터마이징이 필요해요.

구현 (Implementation)

SystemAccessControlFactorySystemAccessControl 인스턴스를 만드는 책임을 가져요. 그리고 관리자가 Trino 설정에서 사용하는 SystemAccessControl 이름도 정의해요.

SystemAccessControl 구현체는 몇 가지 책임을 가져요.

  • 주어진 주체가 특정 사용자로 쿼리를 실행할 권한이 있는지 검증하기
  • 주어진 사용자가 특정 시스템 속성의 값을 바꿀 수 있는지 판별하기
  • 모든 카탈로그에 걸쳐 접근 검사를 수행하기. 이 접근 검사는 어떤 커넥터별 검사보다 먼저 일어나므로, ConnectorAccessControl이 허용할 권한도 거부할 수 있어요.

SystemAccessControlSystemAccessControlFactory의 구현은 플러그인으로 감싸서 Trino 클러스터에 설치해야 해요.

설정 (Configuration)

SystemAccessControlSystemAccessControlFactory를 구현한 플러그인을 코디네이터에 설치한 뒤에는 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의 접근 제어 문서를 함께 보면 흐름이 이어져요.