首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用ABAC控制数据访问

文档编写目的

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的基于标签的控制策略来控制谁可以访问数据以及如何屏蔽数据。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200814A0ETA600?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券