Ranger access control
Ranger access control (Ranger 접근 제어)
Apache Ranger 정책을 사용해 Trino의 카탈로그·스키마·테이블·컬럼에 대한 데이터 접근을 인가하고, 컬럼 마스킹·행 필터링·감사 로깅까지 지원하는 방법을 설명해요.
출처: 문서
본문
Ranger 접근 제어 플러그인은 Apache Ranger 정책을 사용해 Trino의 카탈로그, 스키마, 테이블, 컬럼에 대한 데이터 접근을 인가하는 것을 지원해요. 플러그인은 또한 컬럼 마스킹, 행 필터링, 감사 로깅을 지원해요.
요구 사항 (Requirements)
- 원하는 인가 정책을 가진 Apache Ranger 배포에 대한 접근
- Solr, HDFS, Log4J, Elasticsearch 또는 S3를 사용해 감사 로그를 저장하는 감사 저장소에 대한 접근
Apache Ranger 2.5.0 이상에는 필요한 Trino 서비스 정의가 포함돼 있어요. 더 이전 버전의 Apache Ranger에는 GitHub에서 제공되는 서비스 정의 업데이트가 필요해요.
구성 (Configuration)
접근 제어에 Ranger만 사용하려면 코디네이터에 etc/access-control.properties 파일을 다음 구성과 아래 표에 나열된 구성으로 만들어요:
access-control.name=ranger
Ranger 접근 제어를 파일 기반 또는 다른 접근 제어 시스템과 결합하려면 Multiple access control systems에 대한 지침을 따르세요.
다음 표는 Ranger 접근 제어의 구성 속성을 나열해요:
Ranger 접근 제어 구성 속성 (Ranger access control configuration properties)
| Name | Description |
|---|---|
ranger.service.name |
시행할 정책을 가진 Ranger의 서비스 이름. |
ranger.plugin.config.resource |
쉼표로 구분된 Ranger 플러그인 구성 파일 목록. 상대 경로는 클래스패스를 검색해 동적으로 해석돼요. |
ranger.hadoop.config.resource |
쉼표로 구분된 Hadoop 구성 파일 목록. 상대 경로는 클래스패스를 검색해 동적으로 해석돼요. |
ranger-trino-security.xml
<property>
<name>ranger.plugin.trino.policy.rest.url</name>
<value>https://ranger-hostname:6182</value>
<description>MANDATORY: a comma separated list of URLs to Apache Ranger instances in a deployment</description>
</property>
<property>
<name>ranger.plugin.trino.access.cluster.name</name>
<value></value>
<description>Name to identify the cluster running the Trino instance. This is recorded in audit logs generated by the plugin</description>
</property>
<property>
<name>ranger.plugin.trino.use.rangerGroups</name>
<value>false</value>
<description>Boolean flag to specify whether user-to-groups mapping should be obtained from in Apache Ranger. Default: false</description>
</property>
<property>
<name>ranger.plugin.trino.use.only.rangerGroups</name>
<value>false</value>
<description>Boolean flag. true: use only user-to-groups mapping from Apache Ranger; false: use user-to-groups mappings from Apache Ranger and Trino. Default: false</description>
</property>
<property>
<name>ranger.plugin.trino.super.users</name>
<value></value>
<description>Comma separated list of user names. Superusers will be authorized for all accesses, without requiring explicit policy grants.</description>
</property>
<property>
<name>ranger.plugin.trino.super.groups</name>
<value></value>
<description>Comma separated list of group names. Users in supergroups will be authorized for all accesses, without requiring explicit policy grants</description>
</property>
<property>
<name>ranger.plugin.trino.ugi.initialize</name>
<value>false</value>
<description>Initialize the kerberos identity used to authenticate with Ranger admin server</description>
</property>
<property>
<name>ranger.plugin.trino.ugi.login.type</name>
<value></value>
<description>Valid value: keytab</description>
</property>
<property>
<name>ranger.plugin.trino.ugi.keytab.principal</name>
<value></value>
<description>Kerberos principal. Example: [email protected]</description>
</property>
<property>
<name>ranger.plugin.trino.ugi.keytab.file</name>
<value></value>
<description>Location of keytab file. Example: /etc/trino/trino.keytab</description>
</property>
ranger-trino-audit.xml
<property>
<name>xasecure.audit.is.enabled</name>
<value>true</value>
<description>Boolean flag to specify if the plugin should generate access audit logs. Default: true</description>
</property>
<property>
<name>xasecure.audit.solr.is.enabled</name>
<value>false</value>
<description>Boolean flag to specify if audit logs should be stored in Solr. Default: false</description>
</property>
<property>
<name>xasecure.audit.solr.solr_url</name>
<value></value>
<description>URL to Solr deployment where the plugin should send access audits to</description>
</property>
<property>
<name>xasecure.audit.destination.elasticsearch</name>
<value>disabled</value>
<description>Is es audit enabled? Allowed values to enable: enable, enabled, true</description>
</property>
<property>
<name>xasecure.audit.destination.elasticsearch.urls</name>
<value>host1,host2</value>
<description>Comma (,) separated list of es hosts.</description>
</property>
<property>
<name>xasecure.audit.destination.elasticsearch.index</name>
<value>ranger_audits_write</value>
<description>The index to write audits to. Default: ranger_audits</description>
</property>
<property>
<name>xasecure.audit.destination.elasticsearch.port</name>
<value>9200</value>
<description>The port for es. Default: 9200</description>
</property>
<property>
<name>xasecure.audit.destination.elasticsearch.protocol</name>
<value>http</value>
<description>The http protocol to use during communication. Default: http</description>
</property>
<property>
<name>xasecure.audit.destination.elasticsearch.user</name>
<value>write_user</value>
<description>The username to authenticate towards es.</description>
</property>
<property>
<name>xasecure.audit.destination.elasticsearch.password</name>
<value>changeme</value>
<description>The password to authenticate towards es.</description>
</property>
ranger-policymgr-ssl.xml
<property>
<name>xasecure.policymgr.clientssl.keystore</name>
<value></value>
<description>Path to keystore file. Only required for two-way SSL. This property should not be included for one-way SSL</description>
</property>
<property>
<name>xasecure.policymgr.clientssl.keystore.type</name>
<value>jks</value>
<description>Type of keystore. Default: jks</description>
</property>
<property>
<name>xasecure.policymgr.clientssl.keystore.credential.file</name>
<value></value>
<description>Path to credential file for the keystore; the credential should be in alias sslKeyStore. Only required for two-way SSL. This property should not be included for one-way SSL</description>
</property>
<property>
<name>xasecure.policymgr.clientssl.truststore</name>
<value></value>
<description>Path to truststore file</description>
</property>
<property>
<name>xasecure.policymgr.clientssl.truststore.type</name>
<value>jks</value>
<description>Type of truststore. Default: jks</description>
</property>
<property>
<name>xasecure.policymgr.clientssl.truststore.credential.file</name>
<value></value>
<description>Path to credential file for the truststore; the credential should be in alias sslTrustStore</description>
</property>
필수 정책 (Required policies)
| Description | Resource | User | Permission(s) |
|---|---|---|---|
| 사용자는 Trino에서 쿼리를 실행할 권한이 있어야 해요. Apache Ranger에서 이 권한을 부여하는 정책이 없으면 사용자는 어떤 쿼리도 실행할 수 없어요. | Query ID * | {USER} | execute |
| 사용자는 Trino에서 자신을 가장(impersonate)할 권한이 있어야 해요. Apache Ranger에서 이 권한을 부여하는 정책이 없으면 사용자는 어떤 쿼리도 실행할 수 없어요. | Trino User {USER} | {USER} | impersonate |
외부 클라이언트는 system.runtime.kill_query() 프로시저를 사용해 실행 중인 쿼리를 종료할 수 있어요. |
Schema system, Database runtime, Procedure kill_query | {USER} | execute |
| (선택) 워커의 graceful shutdown을 수행하려면 별도의 사용자를 만들 수 있어요. 이를 위해 추가 password 파일 인증을 설정할 수 있다는 점에 주의하세요. | System Information | Any | write_sysinfo |
(선택) /metrics 엔드포인트에서 메트릭을 가져오려면 특수 사용자를 만들 수 있어요. 이를 위해 추가 password 파일 인증을 설정할 수 있다는 점에 주의하세요. |
System Information | Any | read_sysinfo |
더 알아보기 (Learn more)
Ranger를 다른 접근 제어 방식과 결합하는 방법은 System access control의 여러 접근 제어 시스템 섹션을 참고해 보세요.