E-MapReduce從EMR-2.7.x/EMR-3.5.x版本開始支援建立安全類型的叢集,即叢集中的開源組件以Kerberos的安全模式啟動,在這種安全環境下只有經過認證的用戶端(Client)才能訪問叢集的服務(Service,如HDFS)。

前置

目前E-MapReduce版本中支援的Kerberos的組件列表如下所示:
組件名稱 組件版本
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
说明 Kafka/Presto/Storm目前版本不支援Kerberos。

建立安全叢集

在叢集建立頁面的軟體配置下開啟安全按鈕即可,如下所示:

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 控制台,選擇叢集 > 組態管理 > HAS,執行查看/修改配置/重啟等操作。
    • 非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安全叢集使用方式一致。詳見

  • 其他

    登陸master節點訪問叢集

    叢集管理員也可以登陸master節點訪問叢集服務,登陸master節點切換到has帳號(預設使用相容MIT Kerberos的方式)即可訪問叢集服務,方便做一些排查問題或者營運等。

    >sudo su has
    >hadoop fs -ls /
    说明 也可以登入其他帳號操作叢集,前提是該帳號可以通過Kerberos認證。另外,如果在master節點上需要使用 相容MITKerberos的方式,需要在該帳號下先export一個環境變數。
    export HADOOP_CONF_DIR=/etc/has/hadoop-conf/