E-MapReduce從EMR-2.7.x/EMR-3.5.x版本開始支援建立安全類型的叢集,即叢集中的開源組件以Kerberos的安全模式啟動,在這種安全環境下只有經過認證的用戶端(Client)才能訪問叢集的服務(Service,如HDFS)。
前置
組件名稱 | 組件版本 |
---|---|
YARN | 2.7.2 |
SPARK | 2.1.1/1.6.3 |
HIVE | 2.0.1 |
TEZ | 0.8.4 |
ZOOKEEPER | 3.4.6 |
HUE | 3.12.0 |
ZEPPELIN | 0.7.1 |
OOZIE | 4.2.0 |
SQOOP | 1.4.6 |
HBASE | 1.1.1 |
PHOENIX | 4.7.0 |
建立安全叢集
在叢集建立頁面的軟體配置下開啟安全按鈕即可,如下所示:
Kerberos身份認證原理
Kerberos是一種基於對稱金鑰技術的身份認證協議,它作為一個獨立的第三方的身份認證服務,可以為其它服務提供身份認證功能,且支援SSO(即用戶端身份認證後,可以訪問多個服務如HBase/HDFS等)。
Kerberos協議過程主要有兩個階段,第一個階段是KDC對Client身份認證,第二個階段是Service對Client身份認證。
- KDC
Kerberos的服務端程式
- Client
需要訪問服務的使用者(principal),KDC和Service會對使用者的身份進行認證
- Service
整合了Kerberos的服務,如HDFS/YARN/HBase等
- KDC對Client身份認證
當用戶端使用者(principal)訪問一個整合了Kerberos的服務之前,需要先通過KDC的身份認證。
若身份認證通過則用戶端會拿到一個TGT(Ticket Granting Ticket),後續就可以拿該TGT去訪問整合了Kerberos的服務。
- Service對Client身份認證
當2.1中使用者拿到TGT後,就可以繼續訪問Service服務。它會使用TGT以及需要訪問的服務名稱(如HDFS)去KDC擷取SGT(Service Granting Ticket),然後使用SGT去訪問Service,Service會利用相關資訊對Client進行身份認證,認證通過後就可以正常訪問Service服務。
EMR實踐
EMR的Kerberos安全叢集中的服務在建立叢集的時候會以Kerberos安全模式啟動。
- Kerberos服務端程式為HasServer
- 登入EMR 控制台,選擇 ,執行查看/修改配置/重啟等操作。
- 非HA叢集部署在emr-header-1,HA叢集部署在emr-header-1/emr-header-2兩個節點
- 支援四種身份認證方式
HasServer可同時支援以下4種身份認證方式,用戶端可以通過配置相關參數來指定HasServer使用哪種方式進行身份認證
- 相容MIT Kerberos的身份認證方式
用戶端配置:
如果在叢集的某個節點上執行用戶端命令,則需要將 /etc/ecm/hadoop-conf/core-site.xml中hadoop.security.authentication.use.has設定為false. 如果有通過控制台的執行計畫跑作業,則不能修改master節點上面/etc/ecm/hadoop-conf/core-site.xml中的值,否則執行計畫的作業認證就不通過而失敗,可以使用下面的方式 export HADOOP_CONF_DIR=/etc/has/hadoop-conf臨時export環境變數,該路徑下的hadoop.security.authentication.use.has已經設定為false
訪問方式:Service的用戶端包完全可使用開源的,如HDFS用戶端等。詳見
- RAM身份認證
用戶端配置:
如果在叢集的某個節點上執行用戶端命令,則需要將 /etc/ecm/hadoop-conf/core-site.xml中hadoop.security.authentication.use.has設定為true,/etc/has/has-client.conf中auth_type設定為RAM. 如果有通過控制台的執行計畫跑作業,則不能修改master節點上面/etc/ecm/hadoop-conf/core-site.xml以及/etc/has/has-client.conf中的值,否則執行計畫的作業認證就不通過而失敗,可以使用下面的方式 export HADOOP_CONF_DIR=/etc/has/hadoop-conf; export HAS_CONF_DIR=/path/to/has-client.conf臨時export環境變數,其中HAS_CONF_DIR檔案夾下的has-client.conf的auth_type設定為RAM
訪問方式: 用戶端需要使用叢集中的軟體包(如Hadoop/HBase等),詳見
- LDAP身份認證
用戶端配置:
如果在叢集的某個節點上執行用戶端命令,則需要將 /etc/ecm/hadoop-conf/core-site.xml中hadoop.security.authentication.use.has設定為true,/etc/has/has-client.conf中auth_type設定為LDAP. 如果有通過控制台的執行計畫跑作業,則不能修改master節點上面/etc/ecm/hadoop-conf/core-site.xml以及/etc/has/has-client.conf中的值,否則執行計畫的作業認證就不通過而失敗,可以使用下面的方式 export HADOOP_CONF_DIR=/etc/has/hadoop-conf; export HAS_CONF_DIR=/path/to/has-client.conf臨時export環境變數,其中HAS_CONF_DIR檔案夾下的has-client.conf的auth_type設定為LDAP
訪問方式:用戶端需要使用叢集中的軟體包(如Hadoop/HBase等),詳見
- 執行計畫認證
如果使用者有使用EMR控制台的執行計畫提交作業,則emr-header-1節點的配置必須不能被修改(預設配置)。
用戶端配置:
emr-header-1上面的/etc/ecm/hadoop-conf/core-site.xml中hadoop.security.authentication.use.has設定為true,/etc/has/has-client.conf中auth_type設定為EMR.
訪問方式:跟非Kerberos安全叢集使用方式一致。詳見
- 相容MIT Kerberos的身份認證方式
- 其他
登陸master節點訪問叢集
叢集管理員也可以登陸master節點訪問叢集服務,登陸master節點切換到has帳號(預設使用相容MIT Kerberos的方式)即可訪問叢集服務,方便做一些排查問題或者營運等。
>sudo su has >hadoop fs -ls /
说明 也可以登入其他帳號操作叢集,前提是該帳號可以通過Kerberos認證。另外,如果在master節點上需要使用 相容MITKerberos的方式,需要在該帳號下先export一個環境變數。export HADOOP_CONF_DIR=/etc/has/hadoop-conf/