使用 Apache Ranger 管理权限
Apache Ranger 提供了一个集中式的安全管理框架,用户可以通过可视化的 Web 页面来定制各种访问策略,决定哪些角色能访问哪些数据,对 Hadoop 生态的各个组件和服务进行细粒度的数据访问控制,确保数据的安全性和合规性。
Apache Ranger 提供以下核心模块:
- Ranger Admin:Ranger 的核心模块,内置了一个 Web 界面,用户可以通过界面或者 REST 接口来创建和更新安全策略。Hadoop 生态各个组件的 Plugin 定期对这些策略进行轮询和拉取。
- Agent Plugin:嵌入到 Hadoop 生态圈组件的 Plugin,定期从 Ranger Admin 拉取安全策略,存储在本地文件中。当用户访问组件时,Plugin 会根据安全策略对请求进行安全评估,将结果反馈给相应组件。
- User Sync:用于拉取用户和用户组的信息,将用户和用户组的权限数据同步到 Ranger 的数据库中。
除了原生的 RBAC 权限系统,StarRocks 3.1.9 及后续版本还支持通过 Apache Ranger 来进行访问控制。目前 StarRocks 在能力上支持:
- 通过 Ranger 创建 Access policy、Masking policy、Row-level filter policy。
- 支持 Ranger 审计日志。
- 暂不支持 Kerberos 认证的 Ranger Server。
本文介绍 StarRocks 与 Apache Ranger 集成后的权限控制方式以及集成过程。关于如何在 Ranger 上创建权限策略来管理数据安全,参见 Apache Ranger 官网。
权限控制方式
StarRocks 集成 Apache Ranger 后可以实现以下权限控制方式:
- 在 Ranger 中创建 StarRocks Service 实现权限控制。用户访问 StarRocks 内表、外表或其他对象时,会根据 StarRocks Service 中配置的访问策略来进行访问控制。
- 对于 External Catalog,可以复用 Ranger 上的外部 Service(如 Hive Service)实现访问控制。StarRocks 支持对于不同的 Catalog 匹配不同的 Ranger service。用户访问外部数据源时,会直接根据数据源对应的 Service 来进行访问控制。
通过集成 Apache Ranger,您可以实现以下访问控制模式:
- 全部使用 Ranger 进行权限管理,在 StarRocks Service 内统一管理内表、外表及所有对象。
- 全部使用 Ranger 进行权限管理。对于内表及内部对象,在 StarRocks Service 内管理;对于 External Catalog,无需额外创建,直接复用对应外部数据源对应的 Ranger Service。
- External Catalog 使用 Ranger 进行权限管理,复用外部数据源对应的 Ranger Service;内部对象及内部表使用StarRocks 原生 RBAC 鉴权模式,不集成 Ranger。
权限管理流程:
- 对于用户认证,您也可以选择通过 LDAP 来完成。Ranger 可以同步 LDAP 用户,并对其进行权限规则配置。StarRocks 也可以通过 LDAP 完成用户登录认证。
- 在用户发起查询时,StarRocks 会对查询语句进行解析,向 Ranger 传递用户信息及所需权限;Ranger 则会在对应 Service 中根据创建的访问策略来判断用户是否有访问权限,并向 StarRocks 返回鉴权结果。如果用户有访问权限,StarRocks 会返回查询数据;如果用户无访问权限,StarRocks 会返回报错。
前提条件
-
已经部署安装 Apache Ranger 2.1.0 及以上版本。详细的部署步骤,参见 快速开始。
-
确保 StarRocks 所有 FE 机器都能够访问 Ranger。您可以在 FE 节点的机器上执行以下语句来判断:
telnet <ranger-ip> <ranger-port>
如果显示
Connected to <ip>
,则表示连接成功。