目標(biāo)
Flink Kerberos安全認(rèn)證的主要目標(biāo)是:
????1.任務(wù)訪問連接器的時(shí)候啟用數(shù)據(jù)安全訪問權(quán)限
????2.與Zookeeper進(jìn)行安全認(rèn)證
????3.與Hadoop組件進(jìn)行安全訪問(eg:hdfs,hbase)
生產(chǎn)環(huán)境部署中,流作業(yè)應(yīng)理解為可以長(zhǎng)時(shí)間運(yùn)行(幾天/幾周/幾個(gè)月),并且訪問數(shù)據(jù)源時(shí),能夠在整個(gè)生命周期中進(jìn)行身份認(rèn)證訪問。這與Hadoop委派令牌或ticket緩存不同。
當(dāng)前已經(jīng)支持帶有keytab認(rèn)證或者h(yuǎn)adoop委托token的flink集群(JobManager、TaskManager、jobs)長(zhǎng)時(shí)間運(yùn)行。請(qǐng)記住,集群上所有的作業(yè)共享統(tǒng)一的憑據(jù)(keytab或者token)。要想每一個(gè)job采用不同的keytab,只需要啟動(dòng)帶有不同配置的單獨(dú)的flink集群就可以。許多Flink群集可以在YARN或Mesos環(huán)境中并行運(yùn)行。
Flink 安全認(rèn)證是如何工作的
從概念上講,F(xiàn)link程序可以使用第三方連接器(Kafka,HDFS,Cassandra,F(xiàn)lume,Kinesis等),這需要使用身份認(rèn)證方法(Kerberos,SSL / TLS,用戶名/密碼等)。Flink盡最大努力滿足所有連接器的安全性要求,但其目前僅提供對(duì)Kerberos身份驗(yàn)證的支持。 Kerberos身份驗(yàn)證支持以下服務(wù)和連接器:
????1.Kafka(0.9+)
????2.HDFS
????3.Hbase
????4.Zookeeper
請(qǐng)注意,可以為每個(gè)服務(wù)單獨(dú)啟用Kerberos。 例如,用戶可以啟用Hadoop安全性,而不必為ZooKeeper使用Kerberos,反之亦然。 多個(gè)服務(wù)啟用Kerberos共享的是keytab的配置,然后由每個(gè)組件顯式使用。
內(nèi)部體系基于任務(wù)啟動(dòng)時(shí)的安全模塊(實(shí)現(xiàn)類?org.apache.flink.runtime.security.modules.SecurityModule)。以下各節(jié)介紹每個(gè)安全模塊。
Hadoop安全模塊
該模塊使用Hadoop UserGroupInformation(UGI)類來創(chuàng)建登錄用戶上下文。 然后,登錄用戶將用于與Hadoop的所有交互,包括HDFS,HBase和YARN。
如果啟用了Hadoop安全性(在core-site.xml中),則登錄用戶將需要配置Kerberos憑據(jù)。 否則,登錄用戶僅傳達(dá)啟動(dòng)集群的操作系統(tǒng)的用戶身份。
詳解:flink + kerberos訪問hadoop采用的UGI來認(rèn)證。
JAAS安全模塊
該模塊為集群提供了動(dòng)態(tài)的JAAS配置,使配置的Kerberos憑據(jù)可供ZooKeeper,Kafka和其他依賴JAAS的組件使用。
請(qǐng)注意,用戶還可以使用Java SE文檔中描述的機(jī)制來提供靜態(tài)JAAS配置文件。靜態(tài)目錄會(huì)覆蓋此模塊提供的任何目錄。
Zookeeper安全模塊
該模塊配置某些與整個(gè)進(jìn)程相關(guān)的ZooKeeper安全性相關(guān)的設(shè)置,即ZooKeeper服務(wù)名稱(默認(rèn):Zookeeper)和JAAS登錄上下文名稱(默認(rèn):Client)。
部署模式
獨(dú)立模式
在獨(dú)立/集群模式下運(yùn)行采用安全認(rèn)證Flink群集的步驟:
????1.將安全性相關(guān)的配置添加到Flink配置文件(在集群所有節(jié)點(diǎn)上)(請(qǐng)參見https://ci.apache.org/projects/flink/flink-docs-release-1.9/ops/config.html#kerberos-based-security)。
????2.確保keytab文件存在于所有集群節(jié)點(diǎn)上的security.kerberos.login.keytab指示的路徑中。
????3.正常部署Flink群集。
集群模式
在獨(dú)立/集群模式下運(yùn)行采用安全認(rèn)證Flink群集的步驟:
????1.將安全性相關(guān)的配置添加到Flink配置文件(在集群所有節(jié)點(diǎn)上)(請(qǐng)參見https://ci.apache.org/projects/flink/flink-docs-release-1.9/ops/config.html#kerberos-based-security)。
????2.確保keytab文件存在于所有集群節(jié)點(diǎn)上的security.kerberos.login.keytab指示的路徑中。
????3.正常部署Flink群集。
在YARN / Mesos模式下,keytab會(huì)自動(dòng)從客戶端復(fù)制到Flink yarn containers。
使用kinit(只支持yarn)
在YARN模式下,可以使用ticket cache(由kinit管理)來部署沒有keytab的但是需要安全認(rèn)證的Flink群集。 這避免了生成keytab的復(fù)雜性,并避免了將keytab委托給集群管理器。 在這種情況下,F(xiàn)link CLI獲取Hadoop委托令牌(用于HDFS和HBase)。 主要缺點(diǎn)是,由于生成的委派令牌將過期(通常在一周內(nèi)或者一天),因此群集的壽命必然很短。
使用kinit運(yùn)行安全Flink集群的步驟:
????1.將與安全性相關(guān)的配置選項(xiàng)添加到客戶端上的Flink配置文件中(請(qǐng)參見https://ci.apache.org/projects/flink/flink-docs-release-1.9/ops/config.html#kerberos-based-security)。
????2.使用kinit命令登錄。
????3.正常部署Flink群集。
更多細(xì)節(jié)
Ticket 重新生成
每個(gè)使用Kerberos的組件都獨(dú)立負(fù)責(zé)更新Kerberos ticket-granting-ticket(TGT)。 當(dāng)提供keytab時(shí),Hadoop,ZooKeeper和Kafka都會(huì)自動(dòng)更新TGT。 在委派令牌場(chǎng)景中,YARN本身會(huì)更新令牌(直至其最大使用壽命)。
官網(wǎng)地址:https://ci.apache.org/projects/flink/flink-docs-release-1.9/ops/security-kerberos.html
更多大數(shù)據(jù)技術(shù)請(qǐng)咨詢微信 18310801089