LDAP/Active Directory用のHadoopグループ・マッピングの構成

LDAP/Active Directoryグループ・レベルの認可をHadoopで強制できるようにActive Directoryユーザーおよびグループを認識するには、次のいずれかのオプションを使用してHadoopグループ・マッピングを設定します。

core-site.xmlでのHadoopグループ・マッピングの構成

  1. Apache Ambariにアクセスします。
  2. サイド・ツールバーの「サービス」で、「HDFS」を選択します。
  3. 「構成」「拡張」を選択します。
  4. カスタム・コアサイトに次のキー・ペアを追加します:
    "hadoop.security.group.mapping":"org.apache.hadoop.security.CompositeGroupsMapping",
    "hadoop.security.group.mapping.providers.combined":"true",
    "hadoop.security.group.mapping.providers":"jniUnix,adServer",
    "hadoop.security.group.mapping.provider.jniUnix":"org.apache.hadoop.security.JniBasedUnixGroupsMappingWithFallback",
    "hadoop.security.group.mapping.provider.adServer":"org.apache.hadoop.security.LdapGroupsMapping",
    "hadoop.security.group.mapping.provider.adServer.ldap.url":"ldap://{AD_FQDN}:389",
    "hadoop.security.group.mapping.provider.adServer.ldap.base":"{AD_SEARCH_BASE}",
    "hadoop.security.group.mapping.provider.adServer.ldap.bind.user":"{AD_BIND_USER_DN}",
    "hadoop.security.group.mapping.provider.adServer.ldap.bind.password":"{AD_BIND_USER_PWD}",
    "hadoop.security.group.mapping.provider.adServer.ldap.search.filter.group":"(&(objectclass=group)(cn=*))",
    "hadoop.security.group.mapping.provider.adServer.ldap.search.filter.user":"(&(objectclass=user)(sAMAccountName={0}))",
    "hadoop.security.group.mapping.provider.adServer.ldap.search.attr.memberof":"memberOf",
    "hadoop.security.group.mapping.provider.adServer.ldap.search.attr.group.name":"cn",
    "hadoop.security.group.mapping.ldap.ssl":"false",
    "hadoop.security.group.mapping.provider.adServer.ldap.ssl.truststore":"",
    "hadoop.security.group.mapping.provider.adServer.ldap.ssl.truststore.password.file":"",
    

すべてのマッピングを一度に設定するには、un0で次を実行します:

  1. un0で、次を実行します。
    export AMBARI_CONF_SCRIPT=/var/lib/ambari-server/resources/scripts/configs.py
  2. <ambari_password><un0_node_IP>および<cluster_name>を収集し(Ambari UIからクラスタ名を確認)、次を実行して現在のcore-site構成を取得します。
    python ${AMBARI_CONF_SCRIPT} \
    --user=admin \
    --password='<ambari_password>' \
    --protocol=https --unsafe \
    --host=<un0_node_IP> \
    --port=7183 \
    --cluster=<cluster_name> \
    --config-type=core-site \
    --action=get \
    --file=/tmp/current_core-site.json
  3. 適切な値を含むキーと値のペアを構成JSONファイルcurrent_core-site.jsonのプロパティ・オブジェクトのキーと値のシリーズに貼り付け、次のキーと値のペアをproperties_attributesオブジェクトのパスワード・オブジェクトに追加します。
    "password": {
       "hadoop.security.group.mapping.provider.ad4usersX.ldap.bind.password": "true" //the key-value pair to mask out your password in Ambari.
     },
  4. 次を実行して、構成を更新します。
    python ${AMBARI_CONF_SCRIPT} \
    --user=admin \
    --password='<ambari_password>' \
    --protocol=https --unsafe \
    --host=<un0_node_IP> \
    --port=7183 \
    --cluster=<cluster_name> \
    --config-type=core-site \
    --action=set \
    --file=/tmp/current_core-site.json
  5. デフォルトでは、Hadoopはユーザー・グループ・マッピング・キャッシュを300秒ごとにリフレッシュします。リフレッシュ間隔を短くするには、次のキーと値のペアを追加します。
    "hadoop.security.groups.cache.secs":"<number of seconds you need>"
  6. 「サービス」の「...」アイコンを選択し、「必要なものをすべて再起動」を選択します。

SSSDを使用したHadoopグループ・マッピングの構成(推奨)

  1. yumパッケージのインストールを有効にします。
    sudo sed -i "s/enabled=0/enabled=1/g" /etc/yum.repos.d/oracle-linux-ol7.repo
  2. この変更をすべてのノードにブロードキャストします。
    sudo dcli -f /etc/yum.repos.d/oracle-linux-ol7.repo -d /etc/yum.repos.d/oracle-linux-ol7.repo
  3. 必要なパッケージをインストールします。
    sudo dcli -C "yum -y install sssd realmd oddjob oddjob-mkhomedir adcli krb5-workstation samba-common-tools openldap-clients"
  4. realmコマンドをdiscoverパラメータとともに実行して、結合したドメインに関する情報を返し、結合が発生したことを確認します。
    sudo realm join -v -U Administrator@<AD_REALM_NAME> <AD_REALM_NAME> --membership-software=adcli
    ノート

    レルム結合では、samba/adcliを使用してレルム結合操作を実行します。これらを強制するには、--membership-software=<samba/adcli>を追加して、使用するメンバーシップ・ソフトウェアを指定します。

    ADサーバーに別のコンピュータ名を登録するには、--computer-name=<computer-name> を追加します。

    クラスタのすべてのノードでレルム結合を実行するには、次を実行します。

    cat /etc/hosts | grep -v 'local' | awk '{print $NF}' | while read line; do echo $line; ssh -n $line "sudo echo '<BIND_USER_PASSWORD>' | sudo realm join -v -U Administrator@<AD_REALM_NAME> <AD_REALM_NAME> --membership-software=adcli"; sleep 1; done

  5. /etc/sssd/sssd.confを更新します。[domain/<AD_REALM_NAME>]セクションで、次の更新を行います。
    1. fully_qualified_namesFalseに変更します。

      sudo sed -i 's/use_fully_qualified_names = True/use_fully_qualified_names = False/g' /etc/sssd/sssd.conf

    2. (オプション)次を追加します。
      ldap_user_search_base = cn=Users,dc=ad,dc=domain,dc=com
      ldap_group_search_base = cn=
      Users,dc=ad,dc=domain,dc=com
      ノート

      ADドメイン名のセグメントごとに、個別のdcエントリが必要です。たとえば、ADドメイン名がA.B.C.D.COMの場合、dcエントリ・リストdc=a,dc=b,dc=c,dc=d,dc=comを含める必要があります。
  6. sssd.confファイルをすべてのノードにブロードキャストします。
    sudo dcli -f /etc/sssd/sssd.conf -d /etc/sssd/sssd.conf
  7. SSSDサービスを再起動します。
    sudo dcli -C "/bin/systemctl restart sssd.service"
  8. SSSDがユーザーおよびグループ情報を取得していることを確認します。
    sudo dcli -C "id Administrator"
    ノート

    レスポンスid: Administrator: No such userを取得した場合、SSSDは正常に機能しません。