Настройка с помощью ADCM

Обзор

Для керберизации кластера с помощью MIT KDC выполните описанные ниже шаги:

  1. В веб-интерфейсе ADCM перейдите на страницу Clusters. Выберите установленный и подготовленный кластер ADH и запустите действие Manage Kerberos.

    Действие Manage Kerberos
    Manage Kerberos
  2. В появившемся окне выберите опцию Existing MIT KDC.

    Выбор соответствующей опции
    Выбор соответствующей опции
  3. Заполните параметры MIT Kerberos (настроенного ранее).

    Параметры MIT Kerberos
    Параметры MIT Kerberos
  4. Нажмите Run и дождитесь окончания действия. Затем приступайте к настройке Kerberos в кластере.

    Запуск действия
    Запуск действия

Параметры MIT Kerberos

Параметр Описание

Authentication on WEB UIs

Включение Kerberos-аутентификации для Web UI

KDC hosts

Один или более MIT KDC-хостов

Realm

Kerberos realm — сеть, содержащая KDC-хосты и множество клиентов

Domains

Домены, в которых находятся хосты

Kadmin server

Адрес хоста, на котором запущен kadmin

Kadmin principal

Имя принципала для подключения через kadmin, например admin@RU-CENTRAL1.INTERNAL

Kadmin password

Пароль принципала для подключения через kadmin

Keytabs directory

Директория keytab-файла, содержащего записи одного или нескольких принципалов и их ключи

Additional realms

Дополнительные сети Kerberos realm

Trusted Active Directory server

Сервер с Active Directory для односторенней доверенности от MIT Kerberos KDC внутри realm

Trusted Active Directory realm

Realm с Active Directory для односторенней доверенности от MIT Kerberos KDC внутри realm

Проверка успешной керберизации кластера с помощью MIT Kerberos

После керберизации кластера любое действие пользователя должно выполняться после успешной аутентификации. Ниже вы можете найти примеры запросов HDFS до и после керберизации кластера с помощью MIT Kerberos.

Проверка HDFS перед керберизацией кластера

HDFS CLI

 
Пример HDFS-команды:

$ sudo -u hdfs hdfs dfs -touch /tmp/arenadata_test.txt
$ sudo -u hdfs hdfs dfs -ls /tmp

Вывод имеет следующий вид:

Found 1 items
-rw-r--r--   3 hdfs hadoop          0 2022-02-05 11:17 /tmp/arenadata_test.txt
HDFS HttpFS

 
Запрос curl на создание сущности в HDFS:

$ curl -I -H "Content-Type:application/octet-stream" -X PUT 'http://httpfs_hostname:14000/webhdfs/v1/tmp/arenadata_httpfs_test.txt?op=CREATE&data=true&user.name=hdfs'

Ответ имеет следующий вид:

HTTP/1.1 201 Created
Date: Sat, 05 Feb 2022 11:23:31 GMT
Cache-Control: no-cache
Expires: Sat, 05 Feb 2022 11:23:31 GMT
Date: Sat, 05 Feb 2022 11:23:31 GMT
Pragma: no-cache
Set-Cookie: hadoop.auth="u=hdfs&p=hdfs&t=simple-dt&e=1628198611064&s=gS6tylp5MZw+aiHs1EzuNfd1qqbJpFAGeGLxTtXxZfg="; Path=/; HttpOnly
Content-Type: application/json;charset=utf-8
Content-Length: 0

Запрос curl на получение данных о файле в HDFS:

$ curl -H "Content-Type:application/json" -X GET 'http://httpfs_hostname:14000/webhdfs/v1/tmp?op=LISTSTATUS&user.name=hdfs'

Ответ имеет следующий вид:

{"FileStatuses":{"FileStatus":[{"pathSuffix":"arenadata_httpfs_test.txt","type":"FILE","length":0,"owner":"hdfs","group":"hadoop","permission":"755","accessTime":1628162611089,"modificationTime":1628162611113,"blockSize":134217728,"replication":3}]}}

Проверка HDFS после керберизации кластера

HDFS CLI

 
Пример HDFS-команды:

$ sudo -u hdfs hdfs dfs -ls /tmp

Результат (ошибка доступа):

2022-02-05 11:34:14,753 WARN ipc.Client: Exception encountered while connecting to the server : org.apache.hadoop.security.AccessControlException: Client cannot authenticate via:[TOKEN, KERBEROS]
2022-02-05 11:34:14,765 WARN ipc.Client: Exception encountered while connecting to the server : org.apache.hadoop.security.AccessControlException: Client cannot authenticate via:[TOKEN, KERBEROS]
2022-02-05 11:34:14,767 INFO retry.RetryInvocationHandler: java.io.IOException: DestHost:destPort namenode_host:8020 , LocalHost:localPort namenode_host/namenode_ip:0. Failed on local exception: java.io.IOException: org.apache.hadoop.security.AccessControlException: Client cannot authenticate via:[TOKEN, KERBEROS], while invoking ClientNamenodeProtocolTranslatorPB.getFileInfo over namenode_host/namenode_ip:8020 after 1 failover attempts. Trying to failover after sleeping for 1087ms.

Создание тикета:

$ sudo -u hdfs kinit -k -t /etc/security/keytabs/hdfs.service.keytab hdfs/node_hostname@REALM

Результат (успешный):

Found 1 items
-rw-r--r--   3 hdfs hadoop          0 2022-02-05 11:17 /tmp/arenadata_test.txt
HDFS HttpFS

 
HDFS-запрос:

$ sudo -u hdfs curl -H "Content-Type:application/json" -X GET 'http://httpfs_hostname:14000/webhdfs/v1/tmp?op=LISTSTATUS&user.name=hdfs'

Результат (ошибка доступа):

<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title>Error 401 Authentication required</title>
</head>
<body><h2>HTTP ERROR 401</h2>
<p>Problem accessing /webhdfs/v1/tmp. Reason:
<pre>    Authentication required</pre></p>
</body>
</html>

Создание тикета:

$ sudo -u hdfs kinit -k -t /etc/security/keytabs/HTTP.service.keytab HTTP/node_hostname@REALM

HDFS-запрос:

$ sudo -u hdfs curl -sfSIL -I -H "Content-Type:application/octet-stream" -X PUT --negotiate -u : 'http://httpfs_hostname:14000/webhdfs/v1/tmp/arenadata_httpfs_test.txt?op=CREATE&data=true&user.name=hdfs'

Результат (успешный):

HTTP/1.1 201 Created
Date: Sat, 05 Feb 2022 11:23:31 GMT
Cache-Control: no-cache
Expires: Sat, 05 Feb 2022 11:23:31 GMT
Date: Sat, 05 Feb 2022 11:23:31 GMT
Pragma: no-cache
Set-Cookie: hadoop.auth="u=hdfs&p=hdfs&t=simple-dt&e=1628198611064&s=gS6tylp5MZw+aiHs1EzuNfd1qqbJpFAGeGLxTtXxZfg="; Path=/; HttpOnly
Content-Type: application/json;charset=utf-8
Content-Length: 0
Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней