使用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_data
set salary=61330.44
where 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的基于标签的控制策略来控制谁可以访问数据以及如何屏蔽数据。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- android Web跳转到app指定页面并传递参数实例
- Dialog全屏,去掉状态栏的方式
- Android 通过TCP协议上传指定目录文件的方法
- Android webview加载https链接错误或无响应的解决
- Android Manifest中meta-data扩展元素数据的配置与获取方式
- Android 配置gradle实现VersionCode自增实例
- 解决Android Studio Gradle Metadata特别慢的问题
- Android ProgressDialog用法之实现app上传文件进度条转圈效果
- Android实现获取meta-data和build.gradle的值
- 浅谈Android Studio导出javadoc文档操作及问题的解决
- Android获取清单文件中的meta-data,解决碰到数值为null的问题
- android studio 打包自动生成版本号与日期,apk输入路径详解
- 详解关于AndroidQ获取不到imsi解决方案
- 解决webview 第二次调用loadUrl页面不刷新的问题
- 浅谈 Android 7.0 多窗口分屏模式的实现