文档编写目的
Cloudera数据平台(CDP)利用用于数据安全性和治理的最佳工具-Apache Atlas和Apache Ranger。管理员可以轻松地基于Atlas元数据标签定义安全策略,并将安全策略实时应用于实体的整个层次结构,包括数据库、表和列。
本教程将学习如何对数据进行分类,谁可以访问数据以及如何屏蔽数据。
内容概述
1) 测试环境构建
2) 通过Atlas创建分类
3) 通过Ranger创建基于标签的策略
4) 测试验证
测试环境
1) CM和Cloudera Runtime版本为7.1.1
2) Redhat7.7
3) 拥有Cloudera Manager的管理员账号
4) CDP-DC集群已经构建完成
5) 集群已启用Kerberos
测试环境搭建
我们用于测试的环境包括:
• 一个Hive表(employee_data)-专注于salary列。
• 平台上有三个数据处理和分析用户(您的环境将有所不同)
• etl_user,用户/管理员;属于etl组
• joe_analyst,用户; 属于analyst和us_employee组
• ivanna_eu_hr,用户;属于hr和eu_employee组
目前平台如下:
建表
使用etl_user用户登录hue,并切换到Hive引擎
通过hue的hive创建表并添加初始化数据。
CREATE DATABASE IF NOT EXISTS dbgr;CREATE TABLE IF NOT EXISTS dbgr.employee_data ( id INT, first_name STRING, last_name STRING, email STRING, title STRING, salary DECIMAL(10,2));
INSERT INTO dbgr.employee_data SELECT INLINE(array(struct(1 , "Patty" , "Harvison" , "PattyHarvison@somewhere.com" , "Accountant I" , 48532.04),struct(2 , "Abbey" , "Ledingham" , "AbbeyLedingham@somewhere.com" , "Marketing Assistant" , 58700.35),struct(3 , "Tricia" , "Budgey" , "TriciaBudgey@somewhere.com" , "Nuclear Power Engineer" , 48081.25),struct(4 , "Saraann" , "Corwin" , "SaraannCorwin@somewhere.com" , "Professor" , 49246.32),struct(5 , "Reese" , "Bownes" , "ReeseBownes@somewhere.com" , "Marketing Manager" , 70615.84),struct(6 , "Jennee" , "Hawson" , "JenneeHawson@somewhere.com" , "Clinical Specialist" , 61017.10),struct(7 , "Malinde" , "Kabsch" , "MalindeKabsch@somewhere.com" , "Developer I" , 48767.52),struct(8 , "Darline" , "Wagstaffe" , "DarlineWagstaffe@somewhere.com" , "Quality Engineer" , 61330.88),struct(9 , "Rhona" , "Damarell" , "RhonaDamarell@somewhere.com" , "Legal Assistant" , 42030.92),struct(10 , "Dagmar" , "Sandom" , "DagmarSandom@somewhere.com" , "Staff Scientist" , 74302.82),struct(11 , "Debora" , "Bielfelt" , "DeboraBielfelt@somewhere.com" , "Assistant Media Planner" , 59329.91),struct(12 , "Yule" , "Morigan" , "YuleMorigan@somewhere.com" , "Systems Administrator II" , 72053.94),struct(13 , "Clarette" , "Naptine" , "ClaretteNaptine@somewhere.com" , "GIS Technical Architect" , 74593.99),struct(14 , "Leonard" , "Petrik" , "LeonardPetrik@somewhere.com" , "Financial Analyst" , 49876.08),struct(15 , "Colver" , "Scudamore" , "ColverScudamore@somewhere.com" , "Media Manager IV" , 55048.58)));
查询数据,验证数据是否插入成功
select * from dbgr.employee_data;
可以看到有我们刚插入的15条数据。
通过atlas创建分类
使用admin用户登录atlas:
2.点击Classification,点击+号,来新建一个分类
我们这里创建一个sensitive的分类
1) Name sensitive
2) Description holds sensitive data
然后点击create,创建分类:
搜索我们要分配此新分类的表。
使用以下搜索条件:
1) Basic search
2) Search By Type hive_table
3) Search By Text employee_data
4) Click on Search
5) Click on table name - employee_data
让我们为salary字段分配新的sensitive分类:
1) 单击Schema
2) 单击salary字段旁边的+号
3) 选择sensitive和Propagate选项
4) 点击Add
通过Ranger创建基于标签的策略
使用admin用户打开ranger
创建基于标签的策略
让我们创建一个基于标签的策略,也称为基于访问的属性控制(ABAC)。
1) 点击Access Manager
2) 选择 Tag Based Policies
3) 单击cm_tag 以编辑现有服务
注意:您的服务名称可能与我们的名称不同。
我们有两种策略类型可供选择:Access和Masking。让我们看看两者。
访问策略允许我们对特别标记的数据列施加限制。在此示例中,我们将敏感分类列仅限制为etl组和 joe_analyst用户 。没有其他用户应该能够访问或读取标记为敏感的数据。
选择Access选项卡,然后选择添加新策略。
使用以下方法添加新策略:
1) 策略类型 Access
2) 策略名称: sensitive_access
3) 标签 :sensitive
4) 描述: access to sensitive classified columns
5) 审核记录:是
6) 已启用
7) 允许条件#1:>选择组> etl
8) 允许条件#1:>组件权限> 配置单元(所有权限)
9) 允许条件2:>选择用户> joe_analyst
10) 允许条件2:>组件权限> 配置单元(仅select权限)
11) 拒绝所有其他访问 True
12) 点击添加
创建基于资源的策略
我们先创建一个基于资源的策略,是的三个用户所在的组对dbgr库都有查询和操作权限。
点击Access Manager
选择Resource based Policies
找到Hadoop SQL服务,点击Hadoop SQL,进行基于资源的策略设置。
我们有三种策略类型可供选择:Access、Masking和Row Level Filter。让我们看看Access。
点击Add New Policy,查询一个对dbqr的访问策略。
使用以下方法添加新策略:
1) 策略类型 Access
2) 策略名称 access_dbgr
3) Database: dbgr
4) Table:*
5) Column:*
6) 审核记录:是
7) 已启用
8) 允许条件#1:>选择组> etl,analyst,hr
9) 允许条件#1:>Permission> 配置单元(所有权限)
10) 拒绝所有其他访问 True
11) 点击添加
验证测试
依次通过etl_user/joe_analyst/ivanna_eu_hr用户执行下面的语句:
SELECT * FROM dbgr.employee_data;
使用joe_analyst用户验证
可以查询到所有数据,接着尝试数据更新:
update dbgr.employee_dataset salary=61330.44where first_name='Darline';
基于标签的访问控制只给了joe_analyst用户select权限,没有赋update权限,即使基于资源的访问控制赋给了该用户所有权限,该用户仍然无法进行数据更新。
使用ivanna_eu_hr用户验证
Ivanna_eu_hr用户没有访问*的权限,去除salary字段再次进行查询:
select id,first_name,last_name,email,title from dbgr.employee_data;
因为salary是敏感字段,配置了该敏感标签的ABAC,禁止了其他用户访问,因此ivanna_eu_hr的无法进行访问。
使用etl_user用户验证
进行salary数据更新测试
etl_user有全部操作权限,因此可以进行数据的更新。
Disable ABAC的policy
进入Ranger,依次Access Manager,Tag Based Policy,找到我们之前设置的sensitive_access policy,点击编辑:
将Policy Name旁边的enable修改成disable,然后保存:
使用ivenna_eu_hr用户进行验证
对应的策略关闭后,用户的操作就不受该策略的影响。
总结
通过Ranger和Atlas,可以使用Atlas设置的分类,通过Ranger的基于标签的控制策略来控制谁可以访问数据以及如何屏蔽数据。
领取专属 10元无门槛券
私享最新 技术干货