Apache Ranger的官方Wiki并不是很友好,处于常年缺少维护的状态。但好消息是,Cloudera公司的HDP(原Hortonworks的)、新旗舰产品CDP中使用了Ranger,它们的手册中有比较详细且新版本的Ranger 2.0使用文档
登录Apache Ranger Web UI
输入ranger-admin的url
用户名为 admin,密码为ranger-admin install.properties文件rangerAdmin_password 的值。
配置HDFS
配置HDFS服务
结合Apache Atlas,Ranger可以进行基于Tag的权限管控,这里我们使用基于Resource的服务配置。
- 在Servive Manager页面,点击HDFS服务中的加号
- 配置
Service Name需要填写hdfs插件安装时配置的REPOSITORY_NAME
Config Properties的 username password是连接hdfs的用户名密码,一般来说没有特别在hdfs里配置,可以随便填。这个用户会成为hdfs管理用户,默认会给它一个HDFS全部权限
Namenode URL: hdfs://NAMENODE_FQDN:8020,端口为rpc通讯端口。若开启高可用模式,可以配置2个namenode url,用逗号分隔。
- 点击 Test Connection。
-
配置HDFS规则
在Serice Manager页面选择一个已存在的服务。
- 点击 Add New Policy。或选则一个已有的Policy进行编辑
填写 | Field | Description | | :—- | :—- | | Policy Name | 输入一个自定义policy名称,不能重复。 | | normal/override | 如果选择了override 如果policy name有重复则会覆盖已有的policy | | Resource Path | 需要进行权限管控的 hdfs路径 | | Description | (可选)描述 | | Audit Logging | 指定此policy是否被审计 | | Add Validity Period | 可以选择policy的生效时间区间 |
Allow Conditions中,可以根据 Role 、 Group、User进行权限控制。Permissions有3个:Read、Write、Execute。 勾选Delegate admin的用户可以进行赋权操作。
Exclude from Allow Condition
可以选择一个赋权例外,例如给某一个组配置了一个路径的权限,但想禁止这个组特定的一个用户进行访问,则可以在此设置。
Deny All Other Accesses 如果设置为True,则除了Allow Condition里的用户。其他任何用户、角色、组均不能访问此路径。此时Deny Condition 无法配置。
注意:在全路径 “/” recursive 中,不要把Deny All Other Accesses设置为True,我们可以不设置Deny Condition,但务必将此选项设置为false,否则其他组件如Hive,会受影响。用户会因为没权限访问HDFS而不能访问Hive。
Deny Condition与 Exclude from Deny Condition 和 Allow相反,禁用某些用户和设置禁用例外。
权限控制逻辑:
总结就是 只有在Allow Condition设置了的用户或组才有权限进行访问。
可能有人会有疑问,既然有Exclude from Allow Condition,为什么还需要一个Deny Condition,
Cloudera官网给出了一个案例:
For example, you can allow access to a “finance” database to all users in the “finance” group, but deny access to all users in the “interns” group. Let’s say that one of the members of the “interns” group, “scott”, needs to work on an assignment that requires access to the “finance” database. In that case, you can add an Exclude from Deny condition that will allow user “scott” to access the “finance” database. The following image shows how this policy would be set up in Apache Ranger:
这个案例可能还是有点问题,因为我尝试过,将一个用户设定为Deny Excludes,它并没有权限访问路径,因为它不在Allow Condition中。所以此案例中需要保证scott在finance组中。这样的设计可以满足一次“套娃”场景:我要禁止一个组的成员访问某一路径、但给其中某一个人开放权限。
配置Hive
配置Hive服务
- 在Servive Manager页面,点击Hive服务中的加号
- 填写
Service Name需要填写hive插件安装时配置的REPOSITORY_NAME
Config Properties的 username password是连接hive的用户名密码,这个用户会成为Hive管理用户,默认会给它一个Hive全部权限
jdbc.url 连接hive 的url
- 点击 Test Connection。
- 点击 Add。
配置Hive规则
在这个页面可以针对库、表、行级别进行权限控制 除了常见的权限 Repl Admin可以进行副本管理,Service Admin可以取消 query作业。其他的设计同HDFS。列级屏蔽
Ranger 提供了列级屏蔽功能,可以对于一些敏感数据进行屏蔽,实现数据脱敏的功能。
- Redact – 字母转为x,数学转为n。无法屏蔽中文。
- Partial mask: show last 4 – 显示后四个字符
- Partial mask: show first 4 – 显示前四个字符
- Hash – 使用原值的Hash值替代原值
- Nullify – 使用NULL替代原值
- Unmasked (retain original value) – 恢复原始值
- Date: show only year – 时间只显示年
- Custom – 自定义,可使用Hive UDF
行级屏蔽
Ranger还可以进行行级的屏蔽,例如以下场景可以使用此功能:某区域销售经理只能查看自己区域内的销售数据;医院医生只能查看自己病人的资料等。
Row Filter等于一个 Where语句。
Security Zone
使用空间可以使整个权限管理体系进行拆分。在公司内部,可以让每个部门针对自己需求进行权限规则创建与维护
- 创建空间
- 添加空间信息,空间名称、空间管理员、空间审计员,Resource等。
- 在Servive Manager页面可以按security zone进行过滤