您的位置:

Apache Sentry详解

一、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,等)集成良好。它通过细粒度的策略管理,实现了数据安全和可控制,已经成为大数据安全领域的研究热点和关注重点。