大數(shù)據(jù)生態(tài)安全框架的實現(xiàn)原理與最佳實踐(下篇)

大數(shù)據(jù)生態(tài)安全框架的實現(xiàn)原理與最佳實踐(下篇)

前言

數(shù)字化轉(zhuǎn)型大背景下胰舆,數(shù)據(jù)作為企業(yè)重要的戰(zhàn)略資產(chǎn)昧碉,其安全的重要性不言而喻睬罗。

我們會通過系列文章苍姜,來看下大數(shù)據(jù)生態(tài)中安全框架的實現(xiàn)原理與最佳實踐,系列文章一共兩篇曼月,包含以下章節(jié):

  • 大數(shù)據(jù)生態(tài)安全框架概述
  • HDFS 認(rèn)證詳解
  • HDFS 授權(quán)詳解
  • HIVE 認(rèn)證詳解
  • HIVE 授權(quán)詳解
  • 金融行業(yè)大數(shù)據(jù)安全最佳實踐

本片文章是下篇肃叶,包含上述后三個章節(jié),希望大家喜歡十嘿。

1. HIVE 認(rèn)證詳解

  • HIVE 的認(rèn)證方式因惭,通過參數(shù) hive.server2.authentication 在服務(wù)端進行統(tǒng)一配置;
  • 該參數(shù)可選的值主要有三種:hive.server2.authentication=none/kerberos/ldap
  • HIVE的客戶端绩衷,不管是 beeline 等專用 cli 客戶端蹦魔,還是 dbeaver 等通用 jdbc gui 客戶端激率,抑或 JAVA 應(yīng)用(基于jdbc),都需要根據(jù)服務(wù)端配置的認(rèn)證方式勿决,使用對應(yīng)的方式乒躺,進行認(rèn)證后才能成功連上 hiveserver2,進而提交查詢命令低缩。
  • 視乎大數(shù)據(jù)集群中是否開啟了 kerberos嘉冒,實際的認(rèn)證方式,分為以下四種:
    • 無認(rèn)證模式
    • 只開啟LDAP認(rèn)證模式
    • 只開啟Kerberos認(rèn)證模式
    • 開啟Kerberos和LDAP雙重認(rèn)證模式

1.1 無認(rèn)證模式:hive.server2.authentication = none

  • 當(dāng)不需要對用戶身份進行校驗咆繁,可以配置 hive.server2.authentication = none, 這種境況經(jīng)常用在測試環(huán)境讳推,生產(chǎn)環(huán)境一般不推薦;
  • 此時用戶通過各種客戶端如 cli/gui/java 登錄時,可以不配置用戶名和密碼, 在服務(wù)端 Hive 會認(rèn)為登錄的是匿名用戶 anonymous,(這點不同于 hdfs, 當(dāng)沒有開啟kerberos安全時玩般,如果沒有配置 環(huán)境變量或系統(tǒng)參數(shù) Hadoop_user_name,hdfs 的默認(rèn)用戶是提交作業(yè)的LINUX系統(tǒng)用戶)如:beeline -u jdbc:hive2://xx.xx.xx.xx:10000/default
  • 此時用戶通過各種客戶端如 cli/gui/java 登錄時银觅,也可以配置為任意用戶名和任意密碼,在服務(wù)端 Hive 會認(rèn)為登錄的是用戶聲明的任意用戶(用戶名可以是任意用戶名,甚至是不存在的用戶名坏为;密碼可以是任意密碼究驴,或不配置密碼),如:beeline -u jdbc:hive2://xx.xx.xx.xx:10000/default -n xyz匀伏;beeline -u jdbc:hive2://xx.xx.xx.xx:10000/default -n xyz -p xxxx
  • 可以通過 hiveserver2 webui洒忧,驗證登錄的用戶身份;

[圖片上傳失敗...(image-da51e1-1663142339950)]

1.2 只開啟LDAP認(rèn)證模式:hive.server2.authentication = ldap

  • 中大型企業(yè)中一般都會有用戶身份的統(tǒng)一認(rèn)證平臺够颠,其底層一般都使用 ldap 協(xié)議熙侍,其具體實現(xiàn)有微軟的 ActiveDirectory, 也有 openLdap, ApacheDS等開源實現(xiàn)摧找;
  • Hive 提供了基于 Ldap 的認(rèn)證機制,可以使用企業(yè)的統(tǒng)一認(rèn)證平臺牢硅,來驗證登錄hive的用戶的身份,其配置方式:hive.server2.authentication = ldap;
  • 具體的 ldap 工具的 url蹬耘,需要通過參數(shù)指定:hive.server2.authentication.ldap.url;
  • 除了集成商業(yè)版的 ActiveDirectory减余,大數(shù)據(jù)集群中也可以使用獨立安裝的開源的ldap工具综苔,此類工具常見的有 openLdap 和 ApacheDS,其中前者在大部分linux發(fā)行版中都自帶了package安裝包位岔,更容易安裝如筛,不過主要通過命令行cli進行管理;而后者則自帶了gui客戶端 Apache Directory Studio抒抬,功能更為豐富杨刨;以 openLdap為例,其安裝命令如下:sudo yum -y install openldap-clients; sudo yum -y install openldap;
  • 客戶端登錄 ldap 認(rèn)證的 hiveserver2 時擦剑,需要提供用戶名和密碼妖胀,hiveserver2 會到ldap中驗證用戶名和密碼芥颈,只有驗證通過后才能正常登錄;
  • 以 beeline 登錄為例赚抡,其命令格式如下:beeline -u jdbc:hive2://xx.xx.xx.xx:10000/default -n ldapUserName -p ldapUserPwd;

1.3 HIVE 在 kerberos 環(huán)境下的認(rèn)證

  • 大數(shù)據(jù)生態(tài)中的各種存儲系統(tǒng)爬坑,如HDFS/hive/hbase/zookeeper/kafka等,都支持開啟Kerberos安全認(rèn)證涂臣;

  • 當(dāng)大數(shù)據(jù)集群中的存儲系統(tǒng)如HDFS/hive/hbase/zookeeper/kafka等開啟了kerberos安全認(rèn)證后盾计,訪問這些存儲系統(tǒng)的客戶端,包含各種計算引擎如 hive/hbase/spark/flink 的系統(tǒng)服務(wù)赁遗,和用戶編寫的各種應(yīng)用如 spark/hive/flink等署辉,都需要經(jīng)過 kerberos kdc 的認(rèn)證獲得了 ticket 憑證后,才能與這些存儲系統(tǒng)進行正常交互吼和;

  • 具體到 hiveserver2涨薪,其在跟開啟了 kerberos 安全認(rèn)證的 hdfs/yarn/hbase 等交互時,同樣需要配置使用相應(yīng)的 kerberos principal(一般配置為hive)炫乓,且只有在經(jīng)過 kdc 驗證獲得 ticket 后刚夺,才能與 hdfs/yarn/zk 進行交互,hive-site.xml中,相關(guān)配置項截圖如下:
    [圖片上傳失敗...(image-b37627-1663142339950)]

  • 在開啟了 kerberos 安全認(rèn)證的大數(shù)據(jù)集群環(huán)境中末捣,HIVE既可以配置使用 kerberos 認(rèn)證機制侠姑,也可以配置使用 LDAP 認(rèn)證機制:hive.server2.authentication = kerberos/ldap,分別對應(yīng)上文所說的箩做,只開啟Keberos認(rèn)證模式 和 開啟Kerberos認(rèn)證和LDA認(rèn)證模式

1.4 只開啟Kerberos認(rèn)證模式:hive.server2.authentication = kerberos

  • 配置hive.server2.authentication = kerberos莽红,即要求 hiveserver2 的各種客戶端如 cli/gui/java jdbc,只有在通過 kerberos 認(rèn)證獲得ticket 后邦邦,才能正常登陸 hiveserver2 進而提交 sql安吁;
  • 由于是在kerberos環(huán)境下,所以客戶端在登錄前燃辖,需要首先從 kdc 獲取 ticket 并維護在 ticket cache中: a valid Kerberos ticket in the ticket cache before connecting鬼店;
  • 如果是 cli/beeline 等客戶端,一般會通過命令 kinit黔龟,基于手工輸入的密碼或keytab 文件妇智,來獲取特定業(yè)務(wù)用戶的 ticket,并存儲在客戶端的 ticket cache中氏身;(如果緩存的 ticket 過期了巍棱,需要重新獲取)蛋欣;
  • 如果是程序代碼航徙,則一般通過 org.apache.hadoop.security.UserGroupInformation.loginUserFromKeytab(String user, String path) 的方式,基于keytab文件來獲取特定業(yè)務(wù)用戶的 ticket陷虎,并存儲在客戶端的 ticket cache中捉偏;(UserGroupInformation 在后臺會自動基于keytab 文件來定時刷新ticket倒得,確保不會過期);
  • 客戶端在獲取業(yè)務(wù)用戶的 ticket 成功后夭禽,才可以通過 jdbc連接霞掺,登錄到指定的 hiveserver2;
  • 客戶端在獲取業(yè)務(wù)用戶的 ticket 成功后讹躯,通過 jdbc連接登錄到指定的 hiveserver2時菩彬,需要特別注意下 hiveserver2 的url的格式,其格式推薦使用:jdbc:hive2://xx.xx.xx.xx:10000/default;principal=hive/_HOST@CDH.COM
  • 這里的principal部分潮梯,推薦使用三段式來指定骗灶,包含pincipal, host 和 realm;
  • pincipal 必須指定為系統(tǒng)用戶hive,而不能是業(yè)務(wù)用戶如 dap,xyz等(本質(zhì)上是因為秉馏,hive-site.xml 中配置的hive系統(tǒng)用戶是hive)耙旦;
  • host部分,推薦指定為_HOST萝究,此時在底層使用時會替換為 hiveserver2 節(jié)點的hostname (當(dāng)然也可以直接指定為 hiveserver2 節(jié)點的具體的 hostname)免都;
  • realm 部分,需要根據(jù)實際配置情況進行指定(可以查看配置文件 /etc/krb5.conf)帆竹;

1.5 開啟Kerberos和LDAP雙重認(rèn)證模式:hive.server2.authentication = ldap

  • 配置hive.server2.authentication = ldap绕娘,即要求 hiveserver2 的各種客戶端如 cli/gui/java jdbc,需要提供用戶名和密碼栽连,且hiveserver2 會到ldap中驗證用戶名和密碼险领,只有驗證通過后,才能正常登陸 hiveserver2 進而提交 sql秒紧;(當(dāng)然因為整個大數(shù)據(jù)環(huán)境開啟了 kerberos, 所以在登錄hiveserver2之前绢陌,一樣要經(jīng)過 kerberos kdc 的認(rèn)證)
  • 由于是在kerberos環(huán)境下,所以客戶端在登錄前熔恢,需要首先從 kdc 獲取 ticket 并維護在 ticket cache中脐湾,這一點跟 kerberos 環(huán)境下,hive 的 kerberos 認(rèn)證方式時一直的:a valid Kerberos ticket in the ticket cache before connecting:
  • 如果是 cli/beeline 等客戶端绩聘,一般會通過命令 kinit沥割,基于手工輸入的密碼或keytab 文件耗啦,來獲取特定業(yè)務(wù)用戶的 ticket凿菩,并存儲在客戶端的 ticket cache中;(如果緩存的 ticket 過期了帜讲,需要重新獲刃乒取);
  • 如果是程序代碼似将,則一般通過 org.apache.hadoop.security.UserGroupInformation.loginUserFromKeytab(String user, String path) 的方式获黔,基于keytab文件來獲取特定業(yè)務(wù)用戶的 ticket蚀苛,并存儲在客戶端的 ticket cache中;(UserGroupInformation 在后臺會自動基于keytab 文件來定時刷新ticket玷氏,確保不會過期)堵未;
  • 客戶端在獲取業(yè)務(wù)用戶的 ticket 成功后,才可以通過 jdbc連接盏触,登錄到指定的 hiveserver2渗蟹,此時登錄格式,跟非 kerberos 環(huán)境下赞辩,hive 的 ldap認(rèn)證方式雌芽,是一樣的:
  • 此時需要提供用戶名和密碼,hiveserver2 會到ldap服務(wù)器中驗證用戶名和密碼辨嗽,只有驗證通過后才能正常登錄世落;
  • 以 beeline 登錄為例,其命令格式如下:beeline -u jdbc:hive2://xx.xx.xx.xx:10000/default -n ldapUserName -p ldapUserPwd;

1.6 大數(shù)據(jù)平臺 CDH/TDH/CDP 與 TDH 中糟需,hive 認(rèn)證方式的差異

  • 客戶端可用的登錄方式屉佳,本質(zhì)上取決于服務(wù)端的具體配置;
  • 在TDH環(huán)境下篮灼,在大數(shù)據(jù)集群開啟了 kerberos 安全認(rèn)證的環(huán)境下忘古,如果 hive 服務(wù)端配置了使用ldap (hive.server2.authentication = ldap),則必須通過kerberos和ldap的雙重認(rèn)證后诅诱,才能登陸 hiveserver2髓堪;
  • 在 CDH/CDP環(huán)境下,在 CDH 5.7 及以后的版本中娘荡,Cloudera 對hive的安全認(rèn)證進行了增強:在大數(shù)據(jù)集群開啟了 kerberos 安全認(rèn)證的環(huán)境下干旁,即使 hive 服務(wù)端配置了使用ldap (hive.server2.authentication = ldap),客戶端也可以通過url指定使用 KERBEROS 認(rèn)證方式來登錄炮沐;此時實際的業(yè)務(wù)用戶争群,是登錄前,通過kinit指定的業(yè)務(wù)用戶4竽辍;槐 !此時需要注意翔试,url中需要指定principal=HIVE/_HOST@CDH.COM,以示默認(rèn)的ldap認(rèn)證方式下轻要,實際使用的是kerberos認(rèn)證方式!?衙濉冲泥!

[圖片上傳失敗...(image-6f4664-1663142339950)]

  • TDH 中,通過安全組件 Guardian 來管理各個組件的安全,Guardian 底層整合了 kerberos 和 ApacheDS凡恍;
  • TDH中志秃,同樣支持以上四種認(rèn)證方式,其推薦的hive認(rèn)證方式嚼酝,其實等同于 “kerberos環(huán)境下浮还,hive 的 LDAP 認(rèn)證方式 : hive.server2.authentication = ldap”;
  • 在TDH 中配置 inceptor 使用 “開啟Kerberos認(rèn)證和LDAP認(rèn)證模式” 闽巩,并不需要額外安裝 OpenLdap/ApacheDS/microsoft AD 等 ldap的具體實現(xiàn)碑定,也不需要跟企業(yè)內(nèi)部統(tǒng)一的 LDAP 服務(wù)器打通,也不存在泄露企業(yè)域賬號用戶名和密碼的風(fēng)險又官,因為底層實際使用的是 Guardien 底層自帶的一個 ldap實現(xiàn)(本質(zhì)是ApacheDS)延刘,創(chuàng)建用戶更改密碼等操作都是在 Guardien 中操作的,跟企業(yè)域賬戶是獨立的六敬;

[圖片上傳失敗...(image-bbc6ce-1663142339950)]

1.7 HIVE認(rèn)證相關(guān)參數(shù)

hive-site.xml中碘赖,認(rèn)證相關(guān)參數(shù)主要有:

  • hive.server2.authentication
  • hive.server2.authentication.kerberos.keytab
  • hive.server2.authentication.kerberos.principal
  • hive.server2.authentication.spnego.keytab
  • hive.server2.authentication.spnego.principal
  • hive.server2.authentication.ldap.url
  • hive.server2.authentication.ldap.baseDN
  • hive.server2.authentication.ldap.Domain
  • hive.metastore.kerberos.keytab.file
  • hive.metastore.kerberos.principal
  • hive.server2.enable.doAs/hive.server2.enable.impersnation

2. HIVE 授權(quán)詳解

先來回顧下 hive 的整體架構(gòu):

  • hive整體分為客戶端和服務(wù)端兩部分;
  • 客戶端包括 hive cli, beeline外构,webui等普泡;
  • 服務(wù)端又分為 hiveserver2 和 hms,以及底層的元數(shù)據(jù)持久存儲 metastore db;
  • Hive 又作為 hadoop的客戶端审编,訪問底層的 hdfs 和 yarn;

[圖片上傳失敗...(image-310fc7-1663142339950)]

當(dāng)前市面上HIVE的使用方式分兩種:

  • 只使用 HMS撼班,將hive 看做是單獨的 table format layer,比如 spark/flink on hive: Hive as a table storage layer: These users have direct access to HDFS and the metastore server (which provides an API for metadata access)垒酬;
  • 完整地使用 hive砰嘁, 包括 hiveserver2+ hms, 比如 hive on mr/tez/spark: Hive as a SQL query engine: These users have all data/metadata access happening through HiveServer2. They don't have direct access to HDFS or the metastore.
  • 第一種只使用 hms 的方式下,spark 等應(yīng)用會直接訪問 hdfs, 所以授權(quán)依賴于 hdfs 的 authentication 機制:HDFS access is authorized through the use of HDFS permissions. (Metadata access needs to be authorized using Hive configuration.)
  • 第二種使用 hiveserver2 的方式勘究,用戶通過 hiveserver2 進而訪問 hms 和 hdfs/s3矮湘,hive 更容易統(tǒng)一管控用戶權(quán)限,也更容易組織底層文件的layout和存儲格式口糕,比如支持 orc acid事務(wù)表缅阳,從而提供高效的數(shù)據(jù)服務(wù),是Hive 社區(qū)期望的方式景描;

當(dāng)前 HIVE 共有四種 authentication 認(rèn)證機制:

  • Storage Based Authorization in the Metastore Server
  • SQL Standards Based Authorization in HiveServer2
  • Authorization using Apache Ranger & Sentry
  • Old default Hive Authorization (Legacy Mode)

之所以有這么多 authentication 機制十办,從根本上來說,還是因為 hive 歷史發(fā)展的原因:

  • 早期的 hive 僅僅是一個簡單的存儲引擎之上的SQL解析與執(zhí)行層超棺,對底層存儲引擎中的數(shù)據(jù)沒有完整的掌控力向族,允許外部應(yīng)用如 spark/presto/flink 等,直接訪問 hms獲取元數(shù)據(jù)说搅,并進而讀寫底層的數(shù)據(jù)(schema on read)炸枣;
  • 后續(xù)hive 逐漸迭代虏等,加強了對底層存儲引擎中的數(shù)據(jù)的管控弄唧,包括文件的目錄結(jié)構(gòu)文件名稱存儲格式等适肠,并進而支持了 orc acid 事務(wù)表等高效的數(shù)據(jù)存取格式,越來越像一款類似 mysql/oracle 等的數(shù)據(jù)庫候引,推薦用戶使用 hiveserver2 來訪問底層數(shù)據(jù)侯养;
  • 所以 hive 需要支持外部計算引擎直接使用 hms 與使用 hiveserver2兩種方式,需要支持 orc acid 事務(wù)表澄干,也需要支持其它格式的各種內(nèi)部表和外部表逛揩;

[圖片上傳失敗...(image-e898b-1663142339950)]

2.1 HIVE授權(quán)詳解-Old default Hive Authorization (Legacy Mode)

  • Hive Old Default Authorization 是 hive 2.0 之前默認(rèn)的 authorization model, 支持類似 RDBMS 中對 user/group/roles 賦予 database/table 各種權(quán)限的機制:authorization based on users, groups and roles and granting them permissions to do operations on database or table
  • 但是 Hive Old Default Authorization 并不是一個完整的權(quán)限控制模型:leaving many security gaps unaddressed, for example, the permissions needed to grant privileges for a user are not defined, and any user can grant themselves access to a table or database.
  • hive 2.0 之后默認(rèn)的 authorization model 已經(jīng)被切換為 SQL standards based authorization mode (HIVE-12429);

[圖片上傳失敗...(image-6d1362-1663142339950)]

2.2 HIVE授權(quán)詳解 - Storage Based Authorization in the Metastore Server

  • HMS 提供了對 hive metastore db 中的元數(shù)據(jù)的訪問麸俘,為保護這些元數(shù)據(jù)被各種 hms 客戶端如 spark/presto/flink 錯誤地訪問和修改辩稽,HMS 不能完全依賴這些客戶端自身的認(rèn)證和授權(quán)等安全機制,為此 Hive 0.10 通過 HIVE-3705 增加了對 HMS 的 authorization 能力从媚,即 Storage Based Authorization逞泄;
  • Storage Based Authorization 底層依賴 hdfs permissions 作為 source of truth: it uses the file system permissions for folders corresponding to the different metadata objects as the source of truth for the authorization policy.
  • Storage Based Authorization 提供了客戶端直接訪問 HMS 時,對底層元數(shù)據(jù)的保護:To control metadata access on the metadata objects such as Databases, Tables and Partitions, it checks if you have permission on corresponding directories on the file system;
  • Storage Based Authorization 通過代理機制(hive.server2.enable.doAs =true)拜效,也可以提供對客戶端通過 hiveserver2 訪問HIVE數(shù)據(jù)時喷众,對底層元數(shù)據(jù)和數(shù)據(jù)的保護:You can also protect access through HiveServer2 by ensuring that the queries run as the end user;
  • Storage Based Authorization 可以通過 hdfs acl 提供權(quán)限的靈活性:Through the use of HDF ACL, you have a lot of flexibility in controlling access to the file system, which in turn provides more flexibility with Storage Based Authorization紧憾;
    [圖片上傳失敗...(image-653c1c-1663142339950)]

Storage based authorization 因為其自身的機制原理到千,在使用上也有其局限性:

  • 由于Storage based authorization 的底層原理是依賴用戶對底層存儲系統(tǒng)中數(shù)據(jù)的訪問權(quán)限,且該用戶在hiveserver2開啟代理與不開啟代理機制下身份不同赴穗,所以其主要用來在用戶直接訪問 hms 時憔四,提供對底層元數(shù)據(jù)的保護;
  • 對于用戶使用 hiveserver2 的情況般眉,需要限制 HiveServer2 中可以執(zhí)行的操作加矛,此時不能單純依靠 Storage based authorization, 還需要配合 “SQL Standards Based Authorization” 或 “Authorization using Apache Ranger & Sentry煤篙,或者配置使用 FallbackHiveAuthorizer:

[圖片上傳失敗...(image-a17ee5-1663142339950)]

2.3 HIVE授權(quán)詳解 - SQL Standards Based Authorization in HiveServer2

  • Storage Based Authorization 只能基于文件系統(tǒng)的目錄/文件的權(quán)限管理機制提供database/table/partition 粒度的權(quán)限管控斟览,為提供更細(xì)粒度的權(quán)限管控,比如行級別辑奈,列級別苛茂,視圖級別的權(quán)限管控, Hive 0.13.0 通過 HIVE-5837 引入了SQL Standards Based Authorization鸠窗;
  • SQL Standards Based Authorization妓羊,其作用域是 HiveServer2分瘦,可以跟/需要跟 hms 的 storage based authorization 結(jié)合使用芍阎,以提供對HIVE元數(shù)據(jù)和數(shù)據(jù)的全面的安全管控;
  • SQL Standards Based Authorization枷莉,會在 hiveserver2 解析編譯用戶的 sql query 語句時,校驗提交該 sql query 語句的業(yè)務(wù)用戶的權(quán)限, 但是在底層執(zhí)行該 query 時净刮,使用的是 Hive 系統(tǒng)用戶剥哑,所以 hive 系統(tǒng)用戶需要有對底層數(shù)據(jù)對應(yīng)的目錄/文件的訪問權(quán)限;
  • 由于 SQL Standards Based Authorization 的作用域是 HiveServer2淹父,所以對于直接訪問底層hdfs數(shù)據(jù)的用戶株婴,比如 spark on hive/Hive CLI/hadoop jar命令等,需要依賴 hms 的 storage based authorization 來進行安全管控暑认;
  • SQL Standards Based Authorization困介,對 hiveserver2 中能提交的命令,做了限制蘸际;
  • 啟用該 authorization 機制時座哩,Dfs/add/delete/compile/reset 等命令時被禁用的;
  • 使用白名單機制粮彤,通過參數(shù) hive.security.authorization.sqlstd.confwhitelist八回,限制了可以通過 set 覆蓋哪些參數(shù)配置;

[圖片上傳失敗...(image-24fe49-1663142339950)]

[圖片上傳失敗...(image-d7433c-1663142339950)]

2.4 HIVE授權(quán)詳解 - Authorization using Apache Ranger & Sentry

  • Apache Ranger 和 Apache Sentry 通過插件機制驾诈,提供了對 hive authorization的支持缠诅,Sentry和Ranger這兩個框架非常類似,都是基于角色的訪問控制模型(role-based access control乍迄,RBAC)管引,基于角色的訪問控制在需要對大量用戶進行授權(quán)時能大大減輕所需的ACL配置工作;
  • Sentry最初是由Cloudera公司內(nèi)部開發(fā)而來的,初衷是為了讓用戶能夠細(xì)粒度的控制Hadoop系統(tǒng)中的數(shù)據(jù)(主要指HDFS闯两,Hive的數(shù)據(jù))褥伴,所以Sentry對HDFS,Hive以及同樣由Cloudera開發(fā)的Impala有著很好的支持性漾狼;
  • 而Ranger最初是由另一家公司Hortonworks(已經(jīng)被Cloudera收購)主導(dǎo)開發(fā)的重慢,它同樣是做細(xì)粒度的權(quán)限控制,但相比較于Sentry而言逊躁,ranger有著更加豐富的策略控制似踱,以及更加通用性的大數(shù)據(jù)組件支持,包括于HDFS, Hive, HBase, Yarn, Storm, Knox, Kafka, Solr 和 NiFi等在Cloudera公司新推出的大數(shù)據(jù)平臺cdp中稽煤,不在提供對sentry的支持而是統(tǒng)一使用了Ranger;
  • CDH中默認(rèn)使用的是 Sentry核芽, HDP 中默認(rèn)使用的是 Ranger, 由于 sentry 項目已經(jīng)從 asf 中退役了,目前業(yè)界推薦的酵熙,CDP中默認(rèn)的轧简,都是 Ranger;
  • Ranger 作為集中式平臺,對 Hadoop 生態(tài)中的大多數(shù)組件匾二,包括hdfs/hive/hbase/yarn/kafka等哮独,綜合提供了授權(quán)拳芙,密鑰管理和審計功能;
  • Ranger 采用了 ABAC 模型 (Attribute based access control)皮璧,基于標(biāo)簽策略舟扎,根據(jù)分類(標(biāo)記)控制對資源的訪問;
  • Ranger 提供了很多高級特性恶导,如 web ui直觀和細(xì)粒度的策略查看和管理,全面的可擴展的審核日志記錄浸须,動態(tài)的行和列級別的訪問控制惨寿,動態(tài)數(shù)據(jù)掩碼可實時保護敏感數(shù)據(jù)等。

[圖片上傳失敗...(image-bf6848-1663142339950)]

2.5 HIVE授權(quán)詳解-總結(jié)

  • HIVE的權(quán)限管控機制删窒,最常用的是結(jié)合 Storage Based Authorization in the Metastore Server 和 SQL Standards Based Authorization in HiveServer2 或 sentry/ranger 插件裂垦;
  • 其中前者基于底層文件系統(tǒng)的權(quán)限管理機制,提供對 hms API 的權(quán)限管控肌索,比如查看/新增/刪除表或分區(qū)等蕉拢;
  • 后者提供通過 hiveserver2 訪問hive數(shù)據(jù)時,更細(xì)粒度的權(quán)限管控诚亚,比如行級別晕换,列級別,視圖級別的權(quán)限管控站宗;
  • 當(dāng)使用 spark/flink/presto on hive 方案時闸准,應(yīng)用會直接訪問 hms 和 hdfs ,只有 Storage Based Authorization起作用梢灭,主要依賴的是 hdfs 的權(quán)限管控機制(posix mode + posix acl)
  • 當(dāng)使用 hive on mr/tez/spark 方案時夷家,應(yīng)用通過 hiveserver2 訪問 hms 和 hdfs, Storage Based Authorization 和 sentry/range 都起作用 (需要關(guān)閉代理功能 hive.server.enable.doAs=false)敏释;
  • 終端業(yè)務(wù)用戶比如 xyz 提交給 HIVESERVER2 的 SQL作業(yè)库快,經(jīng)過 HIVESERVER2 的解析編譯和優(yōu)化后,一般會生成 MR/TEZ/SPARK 任務(wù)(之所以說一般钥顽,是因為有的 SQL 是直接在HIVESERVER2中執(zhí)行的义屏,不會生成分布式的 MR/TEZ/SPARK 任務(wù)),這些 MR/TEZ/SPARK 任務(wù)最終訪問底層的基礎(chǔ)設(shè)施 HDFS 和 YARN 時蜂大,一樣要經(jīng)過這些基礎(chǔ)設(shè)施 hdfs/yarn的權(quán)限校驗湿蛔;
  • 那么這些底層基礎(chǔ)設(shè)施 hdfs/yarn 進行權(quán)限校驗時,是針對 hive 系統(tǒng)用戶進行校驗(hiveserver2 這個服務(wù)的系統(tǒng)用戶一般是linux操作系統(tǒng)上的用戶 hive)县爬,還是針對終端業(yè)務(wù)用戶比如 hundsun進行校驗?zāi)匮羯叮窟@點可以通過參數(shù) hive.server2.enable.doAs進行控制(老版本參數(shù)是hive.server2.enable.impersonation):hive.server2.enable.doAs=false/TRUE:“Setting this property to true will have HiveServer2 execute Hive operations as the user making the calls to it.”;
  • 當(dāng)啟用了 HIVE 的代理機制時(hive.server.enable.doAs=true)财喳,業(yè)務(wù)終端用戶如 xyz 提交的 HIVE SQL 作業(yè)底層的 MR/TEZ/SPARK 任務(wù)訪問 HDFS/YARN 時察迟,HDFS/YARN 驗證的是業(yè)務(wù)終端用戶 xyz 的身份 (后續(xù) HDFS/YARN 的權(quán)限校驗斩狱,校驗的也是 xyz 用戶的權(quán)限);
  • 當(dāng)沒有啟用 HIVE 的代理機制時(hive.server.enable.doAs=false)扎瓶,業(yè)務(wù)終端用戶提交的 HIVE SQL 作業(yè)底層的 MR/TEZ/SPARK 任務(wù)訪問 HDFS/YARN 時所踊,需要驗證的是 hiveserver2 服務(wù)對應(yīng)的用戶,即 hive 的身份 (后續(xù) HDFS/YARN 的權(quán)限校驗概荷,校驗的也是 hive 用戶的權(quán)限)秕岛;

[圖片上傳失敗...(image-5cf61e-1663142339950)]

[圖片上傳失敗...(image-aa29b4-1663142339950)]

[圖片上傳失敗...(image-7c89c5-1663142339950)]

2.6 HIVE授權(quán)詳解-相關(guān)參數(shù)

HIVE授權(quán)相關(guān)參數(shù)主要有:

  • hive.security.authorization.enabled: Enable or disable the Hive client authorization
  • hive.security.authorization.manager:org.apache.hadoop.hive.ql.security.authorization.plugin.fallback.FallbackHiveAuthorizerFactory/org.apache.hadoop.hive.ql.security.authorization.StorageBasedAuthorizationProvider/org.apache.hadoop.hive.ql.security.authorization.DefaultHiveMetastoreAuthorizationProvider/org.apache.sentry.binding.hive.authz.SentryHiveAuthorizerFactory;
  • hive.metastore.pre.event.listeners: The pre-event listener classes to be loaded on the metastore side to run code whenever databases, tables, and partitions are created, altered, or dropped. Set this configuration property to org.apache.hadoop.hive.ql.security.authorization.AuthorizationPreEventListener in hive-site.xml to turn on Hive metastore-side security;
  • hive.security.metastore.authorization.manager: This tells Hive which metastore-side authorization provider to use. Defaults to org.apache.hadoop.hive.ql.security.authorization.StorageBasedAuthorizationProvider .
  • hive.security.metastore.authenticator.manager:The authenticator manager class name to be used in the metastore for authentication, defaults to org.apache.hadoop.hive.ql.security.HadoopDefaultMetastoreAuthenticator
  • hive.security.authorization.createtable.owner.grants
  • hive.security.authorization.sqlstd.confwhitelist
  • hive.warehouse.subdir.inherit.perms
  • hive.server2.enable.doAs/hive.server2.enable.impersnation

3. 金融行業(yè)大數(shù)據(jù)安全最佳實踐

  • 在金融行業(yè)強調(diào)安全的背景下误证,我們推薦對大數(shù)據(jù)集群開啟kerberos 安全認(rèn)證, 開啟用戶權(quán)限校驗:hadoop.security.authentication=kerberos继薛,dfs.permissions.enabled=true
  • HDFS 文件的授權(quán),要遵循最小化原則愈捅,不能對目標(biāo)目錄籠統(tǒng)設(shè)置777遏考!
  • HDFS文件的授權(quán),建議主要使用 POSIX MODE 來進行設(shè)置蓝谨,必要時通過 POSIX ACL 進行補充:dfs.namenode.acls.enabled=true
  • 業(yè)務(wù)用戶對HDFS文件的使用灌具,建議將所有文件,比如 jar/配置文件/數(shù)據(jù)字典等譬巫,存放在統(tǒng)一的目錄下咖楣,比如/user/hundsun/dap
  • 針對HIVE的認(rèn)證,我們推薦兩種方式:只開啟Kerberos認(rèn)證模式/開啟Kerberos認(rèn)證和LDAP認(rèn)證模式芦昔,其中后者的實際含義是“大數(shù)據(jù)集群(hdfs/yarn/zookeeper/hive等)開啟了kerberos安全認(rèn)證截歉,同時 hive 組件 配置了使用 LDAP認(rèn)證”;
  • 具體的LDAP烟零,如果要跟企業(yè)域賬戶打通瘪松,則需要使用企業(yè)內(nèi)部統(tǒng)一的 LDAP 服務(wù)器;否則建議使用一個單獨的 ldap 服務(wù)器(比如 OpenLdap/ApacheDS/microsoft AD 等 ldap的某個具體實現(xiàn))锨阿,比如在 TDH中宵睦,底層實際使用的是 Guardien 底層自帶的一個 ldap實現(xiàn)(本質(zhì)是ApacheDS),創(chuàng)建用戶更改密碼等操作都是在 Guardien 中操作的墅诡,更企業(yè)域賬戶是獨立的壳嚎;
  • 針對HIVE的授權(quán),我們推薦使用 sentry/ranger等第三方插件統(tǒng)一進行授權(quán)和鑒權(quán)末早,此時需要關(guān)閉hive的代理功能 Hive.server2.enableDoas=false烟馅;
  • 我們推薦各個業(yè)務(wù)系統(tǒng)使用該系統(tǒng)對應(yīng)的業(yè)務(wù)用戶的身份提交業(yè)務(wù)SQL,而不是各個業(yè)務(wù)系統(tǒng)統(tǒng)一都使用 HIVE 系統(tǒng)用戶然磷;
  • 業(yè)務(wù)用戶對HIVE表的使用郑趁,如果都是通過HIVESERVER2來訪問,建議使用 ORC 事務(wù)內(nèi)表姿搜;如果通過 SPARK 等計算引擎做 ETL寡润,建議使用 orc/parquet格式的HIVE外表捆憎,并存放在統(tǒng)一的目錄下,比如/user/hundsun/dap梭纹,針對外表目錄的授權(quán)躲惰,需要結(jié)合 HDFS POSIX ACL 來進行;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市变抽,隨后出現(xiàn)的幾起案子础拨,更是在濱河造成了極大的恐慌,老刑警劉巖绍载,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诡宗,死亡現(xiàn)場離奇詭異,居然都是意外死亡逛钻,警方通過查閱死者的電腦和手機僚焦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門锰提,熙熙樓的掌柜王于貴愁眉苦臉地迎上來曙痘,“玉大人,你說我怎么就攤上這事立肘”呃ぃ” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵谅年,是天一觀的道長茧痒。 經(jīng)常有香客問我,道長融蹂,這世上最難降的妖魔是什么旺订? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮超燃,結(jié)果婚禮上区拳,老公的妹妹穿的比我還像新娘。我一直安慰自己意乓,他們只是感情好樱调,可當(dāng)我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著届良,像睡著了一般笆凌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上士葫,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天乞而,我揣著相機與錄音,去河邊找鬼慢显。 笑死晦闰,一個胖子當(dāng)著我的面吹牛放祟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播呻右,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼跪妥,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了声滥?” 一聲冷哼從身側(cè)響起眉撵,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎落塑,沒想到半個月后纽疟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡憾赁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年污朽,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片龙考。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡蟆肆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出晦款,到底是詐尸還是另有隱情炎功,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布缓溅,位于F島的核電站蛇损,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏坛怪。R本人自食惡果不足惜淤齐,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望袜匿。 院中可真熱鬧更啄,春花似錦、人聲如沸沉帮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽穆壕。三九已至待牵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間喇勋,已是汗流浹背缨该。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留川背,地道東北人贰拿。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓蛤袒,卻偏偏與公主長得像,于是被迫代替她去往敵國和親膨更。 傳聞我的和親對象是個殘疾皇子妙真,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容