Security overview
Security overview (보안 개요)
Trino 클러스터를 운영할 때 설치 다음으로 중요하게 신경 써야 할 것이 바로 보안이에요. 이 개요 문서는 Trino 클러스터의 보안을 구성하는 다양한 측면을 소개해요.
출처: 문서
본문
보안 구성의 측면 (Aspects of configuring security)
기본 설치된 Trino에는 보안 기능이 활성화되어 있지 않아요. 보안은 Trino 아키텍처의 여러 부분에 대해 활성화할 수 있어요:
- 클러스터에 대한 클라이언트 접근 보호
- 클러스터 내부 보호
- 데이터 소스에 대한 클러스터 접근 보호
권장 구성 워크플로 (Suggested configuration workflow)
새 Trino 클러스터의 보안을 구성하려면 이 모범 사례 순서를 따라 보세요. 단계를 건너뛰거나 합치지 마세요.
- TLS/HTTPS 활성화 - 보안 팀과 협력하세요. 가능하면 로드 밸런서나 프록시로 HTTPS를 종료하고, 전 세계적으로 신뢰받는 TLS 인증서를 사용하세요. 이 단계가 제대로 동작하는지 확인하세요.
- 공유 시크릿(shared secret) 구성 - 이 단계가 제대로 동작하는지 확인하세요.
- 인증 활성화 - 먼저 password file 인증으로 시작해 동작하게 만드세요. 그 다음 LDAP 같은 선호하는 인증 제공자를 구성하세요. 가능하면 클라이언트 인증에 Kerberos의 복잡함은 피하세요. 이 단계가 제대로 동작하는지 확인하세요.
- 인가(authorization)와 접근 제어 활성화 - 먼저 파일 기반 규칙으로 시작하고, 필요에 따라 다른 접근 제어 방법을 구성하세요. 이 단계가 제대로 동작하는지 확인하세요.
한 번에 한 단계씩 구성하세요. 변경할 때마다 항상 Trino 서버를 재시작하고, 계속 진행하기 전에 결과를 확인하세요.
클러스터에 대한 클라이언트 접근 보호 (Securing client access to the cluster)
Trino 클라이언트에는 Trino CLI, Web UI, JDBC 드라이버, Python, Go 또는 기타 클라이언트와 이들을 사용하는 애플리케이션이 포함돼요.
Trino 클러스터에 대한 모든 접근은 코디네이터(coordinator)가 관리해요. 따라서 클러스터에 대한 접근을 보호한다는 것은 코디네이터에 대한 접근을 보호한다는 뜻이에요.
고려할 측면이 세 가지 있어요:
- 암호화 (Encryption): 이동 중인 클라이언트-서버 통신의 무결성 보호
- 인증 (Authentication): 사용자 식별과 사용자 이름 관리
- 인가와 접근 제어 (Authorization and access control): 각 사용자의 접근 권한 검증
암호화 (Encryption)
Trino 서버는 표준 HTTPS 프로토콜과 TLS 암호화(이전에는 SSL로 알려짐)를 사용해요.
인증 (Authentication)
Trino는 여러 인증 제공자를 지원해요. 새 클러스터를 구성할 때는 다른 제공자를 구성하기 전에 먼저 간단한 password file 인증부터 시작하세요.
- Password file authentication
- LDAP authentication
- Salesforce authentication
- OAuth 2.0 authentication
- Certificate authentication
- JSON Web Token (JWT) authentication
- Kerberos authentication
사용자 이름 관리 (User name management)
Trino는 인증 제공자의 사용자·그룹 이름을 Trino 사용자 이름으로 매핑하는 방법을 제공해요.
User mapping은 모든 인증 시스템에 적용되며, 다른 시스템의 복잡한 사용자 이름([email protected])을 단순한 사용자 이름(alice)으로 매핑하는 정규식 규칙을 지정할 수 있게 해줘요.
Group mapping은 접근 제어를 쉽게 하기 위해 사용자 이름 집합을 그룹 이름에 할당하는 방법을 제공해요.
인가와 접근 제어 (Authorization and access control)
Trino의 기본 접근 제어 방식은 인증된 모든 사용자에게 모든 연산을 허용해요.
접근 제어를 구현하려면 다음을 사용해요:
- 파일 기반 시스템 접근 제어 (File-based system access control): 카탈로그·스키마·테이블 수준에서 세밀한 사용자 접근 제한을 지정하는 JSON 파일을 구성해요.
- Open Policy Agent 접근 제어 (OPA): Open Policy Agent를 사용해 세밀한 수준에서 접근 제어 결정을 내려요.
- Ranger 접근 제어: Apache Ranger를 사용해 세밀한 접근 제어 결정을 내리고, 쿼리 실행 시점에 동적 행 필터·컬럼 마스킹을 적용하며, 감사 로그(audit log)를 생성해요.
추가로 Trino는 커스텀 접근 제어 방법을 만들거나 기존 방법을 확장할 수 있는 API를 제공해요.
접근 제어는 테이블의 컬럼에 대한 접근을 제한할 수 있어요. SELECT * 문으로 모든 컬럼을 조회하는 쿼리의 기본 동작은 접근할 수 없는 컬럼에 대해 접근을 거부하는 오류를 보여주는 것이에요.
이 동작을 접근할 수 없는 컬럼을 조용히 숨기도록 바꾸려면 Config properties에서 전역 속성 hide-inaccessible-columns를 설정하세요:
hide-inaccessible-columns = true
클러스터 내부 보호 (Securing inside the cluster)
클러스터 안에서 코디네이터와 워커 사이의 내부 통신을 보호할 수 있어요.
카탈로그 파일의 비밀번호 같은 속성 파일의 시크릿(secret)은 시크릿 관리(secrets management)로 보호할 수 있어요.
데이터 소스에 대한 클러스터 접근 보호 (Securing cluster access to data sources)
Trino 클러스터와 데이터 소스 사이의 통신은 카탈로그별로 구성돼요. 각 카탈로그는 다양한 보안 관련 구성을 지원하는 커넥터를 사용해요.
자세한 내용은 개별 커넥터 문서에서 확인할 수 있어요. 시크릿 관리는 카탈로그 속성 파일의 내용에도 사용할 수 있어요.
더 알아보기 (Learn more)
본격적으로 시작하려면 TLS부터 구성하고, 이어서 인증(Authentication types)과 접근 제어(File-based access control) 순서로 진행해 보세요.