前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >0745-什么是Apache Ranger - 3

0745-什么是Apache Ranger - 3

作者头像
Fayson
发布2020-02-10 10:18:56
1.1K0
发布2020-02-10 10:18:56
举报
文章被收录于专栏:Hadoop实操Hadoop实操

作者:Eric Lin (林晨辉), Cloudera高级售后技术支持工程师。毕业于Monash大学计算机科学, Sir John Monash的奖学金获得者。曾就业于数据收集公司如Hitwise(现为Experian的子公司)和Effective Measure,担任高级工程师,负责设计,开发和管理用于采集, 处理和报告网络数据的平台(基于PHP,Java和CDH)。现任职Cloudera, 担任高级售后技术支持工程师,主要擅长解决在CDH生态系统中出现的各种疑难杂症。


在阅读本文前,建议先阅读前面的文章:

《0741-什么是Apache Ranger - 1》

《0742-什么是Apache Ranger - 2》

在本文中我会介绍Ranger的安全区域(Security Zone)功能,其工作方式以及如何在Ranger Admin UI中对其进行配置。以下内容假设你已经通过Ambari或Cloudera Manager7.x安装了Apache Ranger。

首先我们来看看什么是安全区域(Security Zone)

安全区域(Security Zone)在Ranger中提供了将资源策略分成不同区域的功能。这有助于简化安全策略的管理,并允许在针对某些资源进行授权时检查数量有限的策略,因为仅加载和检查包含请求资源的特定区域下的策略。

最重要的是,它还使多个管理员可以根据分配给他们的区域来设置不同的策略。例如,销售管理员只能为分配了HDFS中的/sales目录或Hive中的销售数据库的销售区域(Sales Zone)下的资源设置策略,而开发管理员只能为分配了HDFS中的/dev目录或Hive中的开发数据库的开发区域(Development Zone)下的资源设置策略。该功能在RANGER-2232有进行说明。

添加新的安全区域非常简单,有关详细信息,您可以参考Cloudera的官方文档:Adding a Ranger security zone。这里我不会再做介绍, 但是,要记住的一件事是,只能将一个资源分配给一个安全区域。如果尝试使用已分配给另一个区域的资源来创建新的安全区域,则会被被拒绝。参见下图:

其实你也没有任何理由需要拥有同一个资源去映射到两个不同的安全区域,这也违反了安全区域(Security Zone)的原始设计。

现在,我已经创建了两个安全区域,让我们继续:

在接下来的文章中,我想演示以下内容:

如果某些资源的策略在分配给其他资源的安全区域下已经被定义,你依旧可以在其他安全区域下成功创建这些资源的策略,不过这个策略会被忽略,即不会生效。

以下是我的设置:

  • 2个区域,一个是“Sales”,另一个是“Development”
  • HDFS目录/sales分配给Sales安全区域
  • HDFS目录/dev分配给Development安全区域
  • 创建了2个组:sales和dev
  • 同时创建了2个用户:user1属于sales组,user2属于dev组
代码语言:javascript
复制
$ groups user1
user1 : user1 sales

$ groups user2
user2 : user2 dev

如果不设置任何策略,每个用户都不能访问他们的部门数据:

代码语言:javascript
复制
$ sudo -u user1 hdfs dfs -mkdir /sales/user1
mkdir: Permission denied: user=user1, access=WRITE, inode="/sales":hdfs:supergroup:drwxr-xr-x

$ sudo -u user2 hdfs dfs -mkdir /dev/user2
mkdir: Permission denied: user=user2, access=WRITE, inode="/dev":hdfs:supergroup:drwxr-xr-x

创建Ranger策略也同样很简单,可以参见Cloudera官网的文档:Configure a resource-based policies。我已经创建了2个策略,每个安全区域下有一个用于HDFS。参见下图,Dev HDFS策略在Development Security Zone下,Sales HDFS策略是在Sales Security Zone下:

现在,我可以确认每个用户都可以在自己的部门的HDFS路径下创建目录:

代码语言:javascript
复制
$ sudo -u user1 hdfs dfs -mkdir /sales/user1
$ sudo -u user1 hdfs dfs -ls /sales
Found 1 items
drwxr-xr-x   - user1 supergroup          0 2020-01-26 10:41 /sales/user1

$ sudo -u user2 hdfs dfs -mkdir /dev/user2
$ sudo -u user2 hdfs dfs -ls /dev
Found 1 items
drwxr-xr-x   - user2 supergroup          0 2020-01-26 10:42 /dev/user2

为简单起见,我没有在实验室中启用Kerberos,因此仅使用“ sudo -u {username}”作为目标用户运行命令,仅用于演示。

现在如果你进入Ranger Admin UI的Audits页面,你可以查看我先前运行命令的审计历史。我过滤了一下只显示user1:

你可以看到第一次尝试创建“/sales/user1”路径时被拒绝。通过上图的最后一栏“Zone Name”,可以发现资源/sales确实位于Sales Zone下,但我们尚未创建策略,因此Ranger没有应用任何授权,而是退回到HDFS ACL,查看上图“Access Enforcer”栏位的值是“hadoop-acl”。

在创建“Sales HDFS”策略以允许sales组下的所有用户都可以访问HDFS的/sales路径后,我们可以看到Ranger接管了授权并授予“ user1”可以创建/sales/user1目录 。我们还可以看到,Ranger记录了在此过程中用于检查的策略,查看上图第一个栏位“Policy ID”的值为58。最后,它还授予了“ user1”执行“ -ls”操作的权限,如上图第一行。

现在,我将尝试创建一个新策略,以允许user1访问HDFS的/dev路径,但仍位于Sales Zone下,并查看其是否生效。参见下图:

我可以确认策略已经保存成功,但是访问还是被拒绝。

代码语言:javascript
复制
$ sudo -u user1 hdfs dfs -mkdir /dev/user1
mkdir: Permission denied: user=user1, access=WRITE, inode="/dev":hdfs:supergroup:drwxr-xr-x

你可以看到,Ranger尝试检查Development Zone下的策略,但是没有找到任何内容(Policy ID栏的值为空),因为我们刚刚为此类访问创建的策略实际上在另一个安全区域中,因此它将被忽略,然后Ranger回退到使用hadoop-acl。

因此你如果在做troubleshooting,一件非常重要的事是你需要确保策略是放置在正确的安全区域下。常去Ranger Admin的Audit页面看看Ranger使用了什么策略。

需要注意的一件事是,当根据请求的资源未找到安全区域时,Ranger将使用在安装过程中设置的“Default”区域。这个“Default”区域没有名称,但存在于Ranger数据库的Security Zone表中。

代码语言:javascript
复制
id          | 1
create_time | 2020-01-21 00:51:01.622843
update_time | 2020-01-21 00:51:01.622843
added_by_id | 1
upd_by_id   | 1
version     | 1
name        |
jsondata    |
description | Unzoned zone

id          | 2
create_time | 2020-01-25 00:56:00.276
update_time | 2020-01-25 00:56:00.283
added_by_id | 1
upd_by_id   | 1
version     | 1
name        | Sales
jsondata    | {"name":"Sales","services":{"cm_hdfs":{"resources":[{"path":["/sales"]}]},"cm_hive":{"resources":[{"database":["sales"],"column":["*"],"table":["*"]}]}},"tagServices":["cm_tag"],"adminUsers":["Eric Lin"],"adminUserGroups":[],"auditUsers":["Eric Lin"],"auditUserGroups":[],"description":"For Sales Department","id":-1,"isEnabled":true}
description | For Sales Department
jsondata    | {"name":"Sales","services":{"cm_hdfs":{"resources":[{"path":["/sales"]}]},"cm_hive":{"resources":[{"database":["sales"],"column":["*"],"table":["*"]}]}},"tagServices":["cm_tag"],"adminUsers":["Eric Lin"],"adminUserGroups":[],"auditUsers":["Eric Lin"],"auditUserGroups":[],"description":"For Sales Department","id":-1,"isEnabled":true}
description | For Sales Department

id          | 3
create_time | 2020-01-25 01:02:28.233
update_time | 2020-01-25 01:02:28.234
added_by_id | 1
upd_by_id   | 1
version     | 1
name        | Development
jsondata    | {"name":"Development","services":{"cm_hdfs":{"resources":[{"path":["/dev"]}]},"cm_hive":{"resources":[{"database":["dev"],"column":["*"],"table":["*"]}]}},"tagServices":["cm_tag"],"adminUsers":["Eric Lin"],"adminUserGroups":[],"auditUsers":["admin"],"auditUserGroups":[],"description":"For Development department","id":-1,"isEnabled":true}
description | For Development department

你可以看到“ x_security_zone”表中存储了一个具有“ id”为1但“name”为空的区域,这张表是Ranger用于在其Web UI中展示安全区域(Security Zone)数据的。未分配给用户创建的安全区域的所有策略将默认为该区域。这意味着对于与任何区域都不匹配的资源,Ranger将检索分配给该默认区域的所有策略以进行授权过程。

原文参考:

代码语言:javascript
复制
https://www.ericlin.me/2020/01/introduction-to-apache-ranger-part-iii/
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Hadoop实操 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
大数据
全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档