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

原创文章,作者:WOQCY,如若转载,请注明出处:https://www.506064.com/n/334125.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
WOQCYWOQCY
上一篇 2025-02-05 13:05
下一篇 2025-02-05 13:05

相关推荐

  • Apache配置Python环境

    Apache是一款流行的Web服务器软件,事实上,很多时候我们需要在Web服务器上使用Python程序做为数据处理和前端网页开发语言,这时候,我们就需要在Apache中配置Pyth…

    编程 2025-04-28
  • Apache伪静态配置Java

    本文将会从多个角度阐述如何在Apache中正确伪装Java应用程序,实现URL的静态化,提高网站的SEO优化和性能。以下是相关的配置和代码实例。 一、RewriteEngine的配…

    编程 2025-04-27
  • 如何解决org.apache.tomcat.util.net.nioendpoint套接字处理器出错?

    org.apache.tomcat.util.net.nioendpoint套接字处理器一般是指Tomcat服务器的套接字处理器,在Tomcat服务器中占据着非常重要的位置。如果出…

    编程 2025-04-27
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • git config user.name的详解

    一、为什么要使用git config user.name? git是一个非常流行的分布式版本控制系统,很多程序员都会用到它。在使用git commit提交代码时,需要记录commi…

    编程 2025-04-25
  • Python安装OS库详解

    一、OS简介 OS库是Python标准库的一部分,它提供了跨平台的操作系统功能,使得Python可以进行文件操作、进程管理、环境变量读取等系统级操作。 OS库中包含了大量的文件和目…

    编程 2025-04-25
  • 详解eclipse设置

    一、安装与基础设置 1、下载eclipse并进行安装。 2、打开eclipse,选择对应的工作空间路径。 File -> Switch Workspace -> [选择…

    编程 2025-04-25
  • Java BigDecimal 精度详解

    一、基础概念 Java BigDecimal 是一个用于高精度计算的类。普通的 double 或 float 类型只能精确表示有限的数字,而对于需要高精度计算的场景,BigDeci…

    编程 2025-04-25
  • nginx与apache应用开发详解

    一、概述 nginx和apache都是常见的web服务器。nginx是一个高性能的反向代理web服务器,将负载均衡和缓存集成在了一起,可以动静分离。apache是一个可扩展的web…

    编程 2025-04-25

发表回复

登录后才能评论