RAM身份認證
EMR叢集中的Kerberos服務端除了可以支援第一種MIT Kerberos相容的使用方式,也可以支援Kerberos用戶端使用RAM作為身份資訊進行身份認證。
RAM產品可以建立/管理子帳號,通過子帳號實現對雲上各個資源的存取控制。
主帳號的管理員可以在RAM的使用者管理介面建立一個子帳號(子賬戶名稱必須符合linux使用者的規範),然後將子帳號的AccessKey下載下來提供給該子帳號對應的開發人員,後續開發人員可以通過配置AccessKey,從而通過Kerberos認證訪問叢集服務。
使用RAM身份認證不需要像第一部分MIT Kerberos使用方式一樣,提前在Kerberos服務端添加principle等操作
下面以已經建立的子帳號test在Gateway訪問為例:
- EMR叢集添加test帳號
EMR的安全叢集的yarn使用了LinuxContainerExecutor,在叢集上跑yarn作業必須要在叢集所有節點上面添加跑作業的使用者帳號,LinuxContainerExecutor執行程式過程中會根據使用者帳號進行相關的許可權校正。
EMR叢集管理員在EMR叢集的master節點上執行:
附:adduser.sh代碼sudo su hadoop sh adduser.sh test 1 2
#添加的賬戶名稱 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管理員在Gateway機器上添加test使用者
useradd test
- Gateway管理員配置Kerberos基礎環境
附: config_gateway_kerberos.sh指令碼代碼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>
#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
附: add_accesskey.sh指令碼(修改一下AccessKey)登入Gateway的test帳號 #執行指令碼 sh add_accesskey.sh test
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使用者執行命令
經過以上步驟,test使用者可以執行相關命令訪問叢集服務了。
執行hdfs命令
跑hadoop作業[test@gateway ~]$ 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
跑spark作業[test@gateway ~]$ hadoop jar /usr/lib/hadoop-current/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar pi 10 1
[test@gateway ~]$ 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