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節點上執行:

    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管理員在Gateway機器上添加test使用者
    useradd test
  • Gateway管理員配置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使用者執行命令

    經過以上步驟,test使用者可以執行相關命令訪問叢集服務了。

    執行hdfs命令

    [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
    跑hadoop作業
    [test@gateway ~]$ hadoop jar /usr/lib/hadoop-current/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar pi 10 1
    跑spark作業
    [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