Trino iceberg connector의 권한을 제어하기 위해서 아래 3가지를 비교했었다.
OPA와 Apache Ranger는 외부 정책 엔진으로 Trino 외 다른 서비스(k8s, Spark, Kafka 등)에서도 사용 가능하며 Trino에 국한된게 아니다.
File-based AC + 자동 갱신 Watcher은 Trino 엔진에서 처리하는 Trino에 국한된 방식이다.
1. OPA (Open Policy Agent)
방식: 외부 OPA 서버 + Rego 정책 엔진 연동 (권한 판단 로직만 별도 관리)
장점: Rego 언어의 유연성으로 정책 설정을 최대한 건드리지 않아도 됨.
단순 A는 B를 할 수 있다/없다가 아니라 특정 시간대에만 접속 가능, 속성 기반, 컬럼 중에서 민감 정보가 포함되어 있는지 등 다양하게 체크 가능
문제점: 436 버전에서는 트리노 엔진 내부의 OPA Access Control 플러그인 지원 X
결론: Trino 446 버전으로 업그레이드
2. File-based AC + 자동 갱신 Watcher
방식: 사용자가 SQL로 권한 부여 시 Python 스크립트가 hive metastore를 폴링하여 rules.json 자동 갱신
문제점: iceberg connector는 기본적으로 allow all(규칙에 없으면 일단 허용)이라서 제어할 모든 계정, 권한을 적어야하고 누락 시 접근 허용이 된다. 그래서 사용자 계정, 스키마, 테이블 추가 시 rules.json 파일이 계속 변경되어야하고 rule.json 파일 변경 여부를 Trino 엔진이 설정된 주기마다 연동해야해서 지연이 발생한다.
결론: iceberg connector의 Default Policy의 방향성으로 인해 기각
3. Apache Ranger
방식: 데이터 보안 전용 프레임워크
문제점: 운영해야 할 컴포넌트(Admin, DB, Solr, Usersync 등)가 너무 많아 관리 포인트 늘어나고 리소스도 늘어남.
결론: Trino의 접근제어만을 위해서 도입하기엔 비효율적

Trino → OPA → Ownership Service → Metastore DB 순서로 Data flow가 흐른다.
1. 사용자 쿼리: 사용자가 Trino에 SELECT * FROM mydb.mytable 같은 쿼리를 날린다.
2. Trino의 권한 체크: Trino는 이 사용자가 해당 테이블에 접근 권한이 있는지 확인하기 위해 OPA에 "이 유저가 이 테이블 봐도 돼?"라고 HTTP 호출하여 물어본다.
3. OPA의 판단 유보: OPA는 정책(Policy)을 계산하다가, "어? 주인이 누군지 알아야 권한을 줄지 말지 결정하겠는데?"라고 판단한다.
4. Ownership Service 호출: OPA가 Ownership Service의 URL(예: http://ownership-service:8080/?schema=mydb&table=mytable)로 요청을 보낸다.
5. Metastore DB 조회 및 응답: Ownership Service는 Metastore DB에서 소유자 정보를 꺼내서 OPA에게 JSON({"owner": "admin"})으로 던져준다.
6. OPA의 최종 결정: OPA는 "방금 받은 소유자가 'admin'네? 그럼 이 쿼리 승인(Allow)!" 혹은 "소유자가 다른 사람이네? 거절(Deny)!"이라는 결과를 Trino에 보낸다.
7. Trino의 실행/차단: Trino는 OPA의 결정에 따라 쿼리를 실행하거나 Access Denied 에러를 보낸다.
트러블슈팅
1. Trino 448 버전 버그
Trino 버전을 448로 진행했었는데 Trino iceberg DB의 한글 컬럼을 조회하지 못하는 버그가 있어서 446 버전으로 다시 업그레이드를 진행했었다.
2. OPA health check port 구분
OPA는 정책 판단 쿼리가 몰리면서 부하가 있었다. 그래서 health check port를 따로 구분하여 진단용 port와 서비스용 port를 구분하여 잠시 OPA API가 느려지는 것에서 오는 k8s pod 재시작을 막았다.
'Dataops > Airflow와 Trino' 카테고리의 다른 글
| 🐰 Trino iceberg와 hive connector 비교하기 (0) | 2026.03.01 |
|---|---|
| K8S Airflow 동작 방식과 pod 종류 확인하기 (0) | 2026.03.01 |
| Airflow와 Trino 관계 보기 (0) | 2026.03.01 |

