一、Sentry概述
Apache Sentry是一个轻量级的授权和验证系统,它提供了对数据和计算资源的细粒度访问控制能力。它可以集成到Hadoop、Hive以及其他多种大数据处理工具中,通过特定的权限管理,保证严格且精细的数据安全。
在具体实现中,Sentry通过将访问权限呈现为一个树形结构,将不同层次的授权操作映射到相应的树节点上,从而实现权限细粒度控制。
除此之外,Sentry支持多个访问方式,如SQL、API、命令行等,同时还提供了访问控制日志和跟踪以及自定义扩展功能等强大特性。
二、Sentry常用场景
Sentry主要应用于大数据场景下对数据安全的需求,通常用于以下几种场景:
1、Hive Metastore安全控制
在大数据生态系统中,Hive Metastore是一个关键组件。许多不同的处理服务都会使用它,因此对该组件的安全控制需要特别关注。Sentry可以对Hive Metastore进行授权管理,实现细粒度对元数据的访问控制。
2、Hadoop 集群授权管理
Sentry可以集成到Hadoop集群中,提供大数据的授权管理。管理人员可以配置角色、权限和用户,对集群资源进行管理和保护。
3、云计算资源授权管理
在云计算环境下,Sentry可以对数据资源进行授权管理,实现多租户访问控制。实现云计算资源隔离和安全保护。
三、Sentry核心概念涵义
1、权限分层
Sentry权限采用分层结构,每个层次都有自己的权限,子层可以从父层继承权限或添加自己的权限。如下图:
[ Action_a ] / | \ [ Role_x] Role_y Role_z / \ [u1] [u2]
上面的示意图中,”Action_a”代表数据库表中的一个操作,”Role_x”、“Role_y”、“Role_z”代表了三个不同的角色,分别拥有不同的权限。在子层级中,用户u1和u2,继承了父层级角色Role_x的所有权限,同时u1可以拥有自己的权限,而u2没有特殊权限。
2、Sentry服务
Sentry服务是由多个服务组件协作工作的。Sentry服务可以简单地被分为两个部分:Sentry Server和Sentry Client。
[HiveServer2] | [Hive MetaStore] | [Authorization/Object Ownership] | +---------------+ +-----------+ | Sentry | | RDF | +---------------+ +-----------+ | HDFS | | Solr | +---------------+ +-----------+
其中,HiveMetaStore提供数据存储,而Sentry Server则负责用户验证和权限控制。如下图所示,Sentry Server架构如下:
+------------+ | Sentry | +------------+ | Plugin API | | Policy | | Service | +------------+
其中,Plugin API提供了接口定义,Policy提供了权限管理相关的逻辑实现,Service负责提供后台服务和和管理UI。
3、Sentry权限模型
Sentry权限模型是Sentry实现的核心,可以将访问控制模型表示为一个典型的可扩展树形结构,整个树的每个节点都可以持有访问控制列表(ACL)
[ Column Level ] | [ Table Level ] | [ Database Level ] | [ Server Level ]
四、Sentry安装和配置
1、Sentry安装
(1)下载Sentry源代码
git clone https://github.com/apache/sentry.git cd sentry
(2)构建Sentry
mvn clean package assembly:assembly -Dmaven.test.skip=true -Pdist
(3)初始化Sentry Schema
sh ./sentry --command schema-tool --confg /etc/sentry/sentry-site.xml --action schema-upgrade
2、Hive集成Sentry权限控制
(1)安装HiveServer2
(2)将Sentry JAR文件加入到Hive Server2 CLASSPATH当中,以`hive-env.sh`文件为例:
# export SENRTY的路径,用于相关jar文件的引用 export SENTRY_HOME=/usr/hdp/current/sentry export HADOOP_HOME=/usr/hdp/current/hadoop-client # 将Sentry jar文件加入到Hive CLASSPATH中 export HIVE_SERVER2_CLASSPATH=$SENTRY_HOME/lib/*:$HADOOP_HOME/*:$HIVE_SERVER2_CLASSPATH
(3)在hive-site.xml中添加Sentry授权信息
hive.security.authorization.manager org.apache.hadoop.hive.ql.security.authorization.plugin.sqlstd.SQLStdConfOnlyAuthorizerFactory hive.security.authorization.enabled true
3、设置Sentry
首先,我们需要在Sentry中添加用户、角色和授权规则。
(1)创建管理员角色和用户
sentry --command createUser -–conf /etc/sentry/sentry-site.xml --user giuseppe sentry --command roleCreate –-conf /etc/sentry/sentry-site.xml --role admin sentry --command roleCreate –-conf /etc/sentry/sentry-site.xml --role dba sentry --command roleCreate –-conf /etc/sentry/sentry-site.xml --role scientist
(2)给管理员用户授予管理员角色,并创建测试库
sentry --command grantRoleToGroup --conf /etc/sentry/sentry-site.xml --rolename admin --group giuseppe sentry --command createRole --conf /etc/sentry/sentry-site.xml --role test_role sentry --command grant --conf /etc/sentry/sentry-site.xml ––privilege server=server1 test_role sentry --command grant –-conf /etc/sentry/sentry-site.xml ––privilege server=server1/db=test_database ALL sentry --command grant --conf /etc/sentry/sentry-site.xml –-privilege server=server1/db=test_database/table=test_table
总结
Apache Sentry作为开源的细粒度权限控制系统,能够有效地保护大数据资源的安全,提供了可靠、高效的数据访问控制机制,并且与现有的大数据处理框架(如Hadoop、Hive,等)集成良好。它通过细粒度的策略管理,实现了数据安全和可控制,已经成为大数据安全领域的研究热点和关注重点。