E-MapReduce从2.7.x/3.5.x版本开始支持创建安全类型的集群,即集群中的开源组件以Kerberos的安全模式启动,在这种安全环境下只有经过认证的客户端(Client)才能访问集群的服务(Service,如 HDFS)。

前置

目前E-MapReduce版本中支持的Kerberos的组件列表如下所示:
组件名称 组件版本
YARN 2.8.5
SPARK 2.4.3
HIVE 3.1.1
TEZ 0.9.1
ZOOKEEPER 3.5.5
HUE 4.4.0
ZEPPELIN 0.8.1
OOZIE 5.1.0
SQOOP 1.4.7
HBASE 1.4.9
PHOENIX 4.14.1

创建安全集群

单击创建集群,在软件配置页面的高级设置中打开Kerberos集群模式即可。

Kerberos
说明 Kafka/Presto/Storm目前版本不支持Kerberos。

Kerberos身份认证原理

Kerberos是一种基于对称密钥技术的身份认证协议,它作为一个独立的第三方的身份认证服务,可以为其它服务提供身份认证功能,且支持SSO(即客户端身份认证后,可以访问多个服务如HBase/HDFS等)。

Kerberos协议过程主要有两个阶段,第一个阶段是KDC对Client身份认证,第二个阶段是Service对Client身份认证。

Kerberos身份认证原理
  • KDC:Kerberos的服务端程序。
  • Client:需要访问服务的用户(principal),KDC和Service会对用户的身份进行认证。
  • Service:集成了Kerberos的服务,如HDFS/YARN/HBase等。
  • KDC对Client身份认证

    当客户端用户(principal)访问一个集成了Kerberos的服务之前,需要先通过KDC的身份认证。

    若身份认证通过,则客户端会获取到一个TGT(Ticket Granting Ticket),后续就可以使用该TGT去访问集成了Kerberos的服务。

  • Service对Client身份认证

    当用户获取TGT后,就可以继续访问Service服务。它会使用TGT以及需要访问的服务名称(如 HDFS)去KDC获取SGT(Service Granting Ticket),然后使用SGT去访问 Service,Service会利用相关信息对Client进行身份认证,认证通过后就可以正常访问Service服务。

Kerberos实践

E-MapReduce的Kerberos安全集群中的服务,在创建集群的时候会以Kerberos安全模式启动。

  • Kerberos服务端程序为HASServer
    • 登录阿里云 E-MapReduce 控制台,选择集群管理 > 管理 > 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客户端等。兼容 MIT Kerberos 认证

    • RAM身份认证

      客户端配置:

      • 如果在集群的某个节点上执行客户端命令,则需要将/etc/ecm/hadoop-conf/core-site.xml中的hadoop.security.authentication.use.has设置为false/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-confexport HAS_CONF_DIR=/path/to/has-client.conf临时export环境变量,其中HAS_CONF_DIR文件夹下的has-client.confauth_type设置为RAM

      访问方式: 客户端需要使用集群中的软件包(如Hadoop/HBase等),RAM 认证

    • LDAP身份认证

      客户端配置:

      • 如果在集群的某个节点上执行客户端命令,则需要将/etc/ecm/hadoop-conf/core-site.xmlhadoop.security.authentication.use.has设置为true/etc/has/has-client.confauth_type设置为LDAP
      • 如果有通过控制台的执行计划运行作业,则不能修改master节点上面/etc/ecm/hadoop-conf/core-site.xml以及 /etc/has/has-client.conf中的值,否则执行计划的作业认证就会失败,可以使用下面的方式export HADOOP_CONF_DIR=/etc/has/hadoop-confexport HAS_CONF_DIR=/path/to/has-client.conf临时export环境变量,其中HAS_CONF_DIR文件夹下的has-client.confauth_type设置为LDAP

      访问方式:客户端需要使用集群中的软件包(如Hadoop/HBase等),LDAP 认证

    • 执行计划认证

      如果用户有使用E-MapReduce控制台的执行计划提交作业,则emr-header-1节点的配置必须不能被修改(默认配置)。

      客户端配置:

      emr-header-1上面的/etc/ecm/hadoop-conf/core-site.xmlhadoop.security.authentication.use.has设置为true/etc/has/has-client.confauth_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/