E-MapReduce(简称EMR)集群中的Kerberos服务端除了支持第一种兼容MIT Kerberos的使用方式,也支持Kerberos客户端使用RAM用户作为身份信息进行身份认证。
RAM身份认证
RAM产品可以创建或管理RAM用户,通过RAM用户实现对云上各个资源的访问控制。
阿里云账号的管理员可以在RAM的用户管理界面创建一个RAM用户(RAM用户名称必须符合linux用户的规范),然后将RAM用户的AccessKey下载下来提供给该RAM用户对应的开发人员,后续开发人员可以配置AccessKey,从而通过Kerberos认证访问集群服务。
下面以已经创建的RAM用户test在Gateway访问为例:
- EMR集群添加test账号。
EMR的安全集群的Yarn使用了LinuxContainerExecutor,如果需要在集群上运行Yarn作业,则需要在集群所有节点上添加运行作业的用户账号,LinuxContainerExecutor执行程序过程中会根据用户账号进行相关的权限校验。
EMR集群管理员在EMR集群的Master节点上执行如下命令。sudo su hadoop sh adduser.sh test 1 2
附:adduser.sh代码。#添加的账户名称。 user_name=$1 #集群Master节点个数,例如HA集群有2个Master节点。 master_cnt=$2 #集群Worker节点个数。 worker_cnt=$3 for((i=1;i<=$master_cnt;i++)) do ssh -o StrictHostKeyChecking=no emr-header-$i sudo useradd $user_name done for((i=1;i<=$worker_cnt;i++)) do ssh -o StrictHostKeyChecking=no emr-worker-$i sudo useradd $user_name done
- 在Gateway机器上添加test用户。
useradd test
- 配置Kerberos基础环境。
sudo su root sh config_gateway_kerberos.sh 10.27.230.10 /pathto/emrheader1_pwd_file #确保Gateway上面/etc/ecm/hadoop-conf/core-site.xml中值为true <property> <name>hadoop.security.authentication.use.has</name> <value>true</value> </property>
附: config_gateway_kerberos.sh脚本代码。#EMR集群的emr-header-1的IP。 masterip=$1 #保存了masterip对应的root登录密码文件。 masterpwdfile=$2 if ! type sshpass >/dev/null 2>&1; then yum install -y sshpass fi ## Kerberos conf sshpass -f $masterpwdfile scp root@$masterip:/etc/krb5.conf /etc/ mkdir /etc/has sshpass -f $masterpwdfile scp root@$masterip:/etc/has/has-client.conf /etc/has sshpass -f $masterpwdfile scp root@$masterip:/etc/has/truststore /etc/has/ sshpass -f $masterpwdfile scp root@$masterip:/etc/has/ssl-client.conf /etc/has/ #修改Kerberos客户端配置,将默认的auth_type从EMR改为RAM。 #也可以手工修改该文件。 sed -i 's/EMR/RAM/g' /etc/has/has-client.conf
- 使用test用户登录Gateway,配置AccessKey。
#登录Gateway的test账号。 sh add_accesskey.sh test
附: add_accesskey.sh脚本(修改AccessKey)。user=$1 if [[ `cat /home/$user/.bashrc | grep 'export AccessKey'` == "" ]];then echo " #修改为test用户的AccessKeyId/AccessKeySecret export AccessKeyId=YOUR_AccessKeyId export AccessKeySecret=YOUR_AccessKeySecret " >>~/.bashrc else echo $user AccessKey has been added to .bashrc fi
- 使用test用户,执行如下命令。
- 执行HDFS命令。
hadoop fs -ls /
返回信息如下:17/11/19 12:32:15 INFO client.HasClient: The plugin type is: RAM Found 4 items drwxr-x--- - has hadoop 0 2017-11-18 21:12 /apps drwxrwxrwt - hadoop hadoop 0 2017-11-19 12:32 /spark-history drwxrwxrwt - hadoop hadoop 0 2017-11-18 21:16 /tmp drwxrwxrwt - hadoop hadoop 0 2017-11-18 21:16 /user
- 运行Hadoop作业。
hadoop jar /usr/lib/hadoop-current/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar pi 10 1
- 运行Spark作业。
spark-submit --conf spark.ui.view.acls=* --class org.apache.spark.examples.SparkPi --master yarn-client --driver-memory 512m --num-executors 1 --executor-memory 1g --executor-cores 2 /usr/lib/spark-current/examples/jars/spark-examples_2.11-2.1.1.jar 10
- 执行HDFS命令。
在文档使用中是否遇到以下问题
更多建议
匿名提交