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의 여러 접근 제어 시스템 섹션을 참고해 보세요.