本文主要記錄配置安全的hive叢集內建sentry的過程。hive上配置了kerberos認證,配置的過程請參考:
使用yum安裝cdh hadoop叢集
hive配置kerberos認證
系統環境:
作業系統:centos 6.6
hadoop版本:<code>cdh5.4</code>
jdk版本:<code>1.7.0_71</code>
運作使用者:root
叢集各節點角色規劃為:
cdh1作為master節點,其他節點作為slave節點,我們在cdh1節點安裝kerberos server,在其他節點安裝kerberos client。
這部分内容,請參考安裝和配置sentry,因為叢集中配置了kerberos,是以需要在kdc節點上(cdh1)生成 sentry 服務的 principal 并導出為 ticket:
然後,修改/etc/sentry/conf/sentry-site.xml 中下面的參數:
擷取sentry的ticket再啟動sentry-store服務:
需要在 /etc/hive/conf/hive-site.xml中添加:
在hive配置了kerberos認證之後,hive-server2內建sentry有以下要求:
修改 <code>/user/hive/warehouse</code> 權限:
禁止 hiveserver2 impersonation:
确認 /etc/hadoop/conf/container-executor.cfg 檔案中 <code>min.user.id=0</code>。
修改 /etc/hive/conf/hive-site.xml:
另外,因為叢集配置了kerberos,故需要/etc/hive/conf/sentry-site.xml添加以下内容:
參考模闆sentry-site.xml.hive-client.template在 /etc/hive/conf/ 目錄建立 sentry-site.xml:
注意:這裡<code>sentry.hive.provider.backend</code>配置的是<code>org.apache.sentry.provider.db.simpledbproviderbackend</code>方式,關于<code>org.apache.sentry.provider.file.simplefileproviderbackend</code>的配置方法,後面再作說明。
hive添加對sentry的依賴,建立軟連接配接:
在cdh1上啟動或重新開機hiveserver2:
參考 securing impala for analysts,準備測試資料:
然後,在hive中運作下面 sql 語句:
在 cdh1上通過 beeline 連接配接 hiveserver2,運作下面指令建立角色群組:
建立 role、group 等等,執行下面的 sql 語句:
上面建立了兩個角色:
admin_role,具有管理者權限,可以讀寫所有資料庫,并授權給 admin 和 hive 組(對應作業系統上的組)
test_role,隻能讀寫 filtered 資料庫,并授權給 test 組。
以 test 使用者為例,通過 beeline 連接配接 hive-server2:
接下來運作一些sql查詢,檢視是否有權限。
在 ldap 伺服器上建立系統使用者 yy_test,并使用 migrationtools 工具将該使用者導入 ldap,最後設定 ldap 中該使用者密碼。
在每台 datanode 機器上建立 test 分組,并将 yy_test 使用者加入到 test 分組:
運作 beeline 檢視是否能夠使用 ldap 使用者連接配接 hiveserver2:
如果要使用基于檔案存儲的方式配置sentry store,則需要修改/etc/hive/conf/sentry-site.xml為:
建立 sentry-provider.ini 檔案并将其上傳到 hdfs 的 /user/hive/sentry/ 目錄:
關于 sentry-provider.ini 檔案的文法說明,請參考官方文檔。這裡我指定了 hive 組有全部權限,并指定 hive 使用者屬于 hive 分組,而其他兩個分組隻有部分權限。