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/zh-hk/n/334125.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
WOQCY的頭像WOQCY
上一篇 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

發表回復

登錄後才能評論