ClickHouse/docs/ru/operations/external-authenticators/kerberos.md

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

124 lines
7.3 KiB
Markdown
Raw Normal View History

2022-08-26 17:37:11 +00:00
---
slug: /ru/operations/external-authenticators/kerberos
---
2021-02-24 10:10:37 +00:00
# Kerberos {#external-authenticators-kerberos}
2021-02-28 19:11:29 +00:00
ClickHouse предоставляет возможность аутентификации существующих (и правильно сконфигурированных) пользователей с использованием Kerberos.
2021-02-24 10:10:37 +00:00
2021-02-28 19:11:29 +00:00
В настоящее время возможно использование Kerberos только как внешнего аутентификатора, то есть для аутентификации уже существующих пользователей с помощью Kerberos. Пользователи, настроенные для Kerberos-аутентификации, могут работать с ClickHouse только через HTTP-интерфейс, причём сами клиенты должны иметь возможность аутентификации с использованием механизма GSS-SPNEGO.
2021-02-24 10:10:37 +00:00
2021-02-28 19:11:29 +00:00
::: Для Kerberos-аутентификации необходимо предварительно корректно настроить Kerberos на стороне клиента, на сервере и в конфигурационных файлах самого ClickHouse. Ниже описана лишь конфигурация ClickHouse.
:::
2021-02-24 10:10:37 +00:00
## Настройка Kerberos в ClickHouse {#enabling-kerberos-in-clickhouse}
2021-02-28 19:11:29 +00:00
Для того, чтобы задействовать Kerberos-аутентификацию в ClickHouse, в первую очередь необходимо добавить одну-единственную секцию `kerberos` в `config.xml`.
В секции могут быть указаны дополнительные параметры:
- `principal` — задаёт имя принципала (canonical service principal name, SPN), используемое при авторизации ClickHouse на Kerberos-сервере.
- Это опциональный параметр, при его отсутствии будет использовано стандартное имя.
- `realm` — обеспечивает фильтрацию по реалм (realm). Пользователям, чей реалм не совпадает с указанным, будет отказано в аутентификации.
- Это опциональный параметр, при его отсутствии фильтр по реалм применяться не будет.
2021-02-24 10:10:37 +00:00
2022-12-26 12:22:29 +00:00
- `keytab` — задаёт путь к файлу keytab.
- Это опциональный параметр, при его отсутствии путь к файлу keytab должен быть задан в переменной окружения `KRB5_KTNAME`.
2021-02-24 10:10:37 +00:00
Примеры, как должен выглядеть файл `config.xml`:
```xml
2021-10-26 05:50:15 +00:00
<clickhouse>
2021-02-24 10:10:37 +00:00
<!- ... -->
<kerberos />
2021-10-26 05:50:15 +00:00
</clickhouse>
2021-02-24 10:10:37 +00:00
```
2021-02-28 19:11:29 +00:00
Или, с указанием принципала:
2021-02-24 10:10:37 +00:00
```xml
2021-10-26 05:50:15 +00:00
<clickhouse>
2021-02-24 10:10:37 +00:00
<!- ... -->
<kerberos>
<principal>HTTP/clickhouse.example.com@EXAMPLE.COM</principal>
</kerberos>
2021-10-26 05:50:15 +00:00
</clickhouse>
2021-02-24 10:10:37 +00:00
```
2021-02-28 19:11:29 +00:00
Или, с фильтрацией по реалм:
2021-02-24 10:10:37 +00:00
```xml
2021-10-26 05:50:15 +00:00
<clickhouse>
2021-02-24 10:10:37 +00:00
<!- ... -->
<kerberos>
<realm>EXAMPLE.COM</realm>
</kerberos>
2021-10-26 05:50:15 +00:00
</clickhouse>
2021-02-24 10:10:37 +00:00
```
:::danger "Важно"
2021-02-28 19:11:29 +00:00
В конфигурационном файле не могут быть указаны одновременно оба параметра. В противном случае, аутентификация с помощью Kerberos будет недоступна для всех пользователей.
2021-02-24 10:10:37 +00:00
:::danger "Важно"
2021-07-29 15:27:50 +00:00
В конфигурационном файле может быть не более одной секции `kerberos`. В противном случае, аутентификация с помощью Kerberos будет отключена для всех пользователей.
2021-02-24 10:10:37 +00:00
## Аутентификация пользователей с помощью Kerberos {#kerberos-as-an-external-authenticator-for-existing-users}
Уже существующие пользователи могут воспользоваться аутентификацией с помощью Kerberos. Однако, Kerberos-аутентификация возможна только при использовании HTTP-интерфейса.
Имя принципала (principal name) обычно имеет вид:
- *primary/instance@REALM*
2021-02-28 19:11:29 +00:00
Для успешной аутентификации необходимо, чтобы *primary* совпало с именем пользователя ClickHouse, настроенного для использования Kerberos.
2021-02-24 10:10:37 +00:00
### Настройка Kerberos в `users.xml` {#enabling-kerberos-in-users-xml}
2021-02-28 19:11:29 +00:00
Для того, чтобы пользователь имел возможность производить аутентификацию с помощью Kerberos, достаточно включить секцию `kerberos` в описание пользователя в `users.xml` (например, вместо секции `password` или аналогичной ей).
В секции могут быть указаны дополнительные параметры:
2021-02-24 10:10:37 +00:00
2021-02-28 19:11:29 +00:00
- `realm` &mdash; обеспечивает фильтрацию по реалм (realm): аутентификация будет возможна только при совпадении реалм клиента с указанным.
- Этот параметр является опциональным, при его отсутствии фильтрация применяться не будет.
2021-02-24 10:10:37 +00:00
Пример, как выглядит конфигурация Kerberos в `users.xml`:
```xml
2021-10-26 05:50:15 +00:00
<clickhouse>
2021-02-24 10:10:37 +00:00
<!- ... -->
<users>
<!- ... -->
<my_user>
<!- ... -->
<kerberos>
<realm>EXAMPLE.COM</realm>
</kerberos>
</my_user>
</users>
2021-10-26 05:50:15 +00:00
</clickhouse>
2021-02-24 10:10:37 +00:00
```
:::danger "Важно"
2022-11-23 09:33:25 +00:00
Если пользователь настроен для Kerberos-аутентификации, другие виды аутентификации будут для него недоступны. Если наряду с `kerberos` в определении пользователя будет указан какой-либо другой способ аутентификации, ClickHouse завершит работу.
2021-02-24 10:10:37 +00:00
:::info ""
2021-02-28 19:11:29 +00:00
Ещё раз отметим, что кроме `users.xml`, необходимо также включить Kerberos в `config.xml`.
:::
2021-02-24 10:10:37 +00:00
### Настройка Kerberos через SQL {#enabling-kerberos-using-sql}
2021-02-28 19:11:29 +00:00
Пользователей, использующих Kerberos-аутентификацию, можно создать не только с помощью изменения конфигурационных файлов.
2021-02-24 10:10:37 +00:00
Если SQL-ориентированное управление доступом включено в ClickHouse, можно также создать пользователя, работающего через Kerberos, с помощью SQL.
```sql
CREATE USER my_user IDENTIFIED WITH kerberos REALM 'EXAMPLE.COM'
```
2021-02-28 19:11:29 +00:00
Или, без фильтрации по реалм:
2021-02-24 10:10:37 +00:00
```sql
CREATE USER my_user IDENTIFIED WITH kerberos
```