- Сопоставление IP-пользователь — пользователь определяется по IP адресу.
- Прокси-авторизация. Предполагается, что установщик работает за прокси-сервером, который занимается авторизацией, а установщик получает данные о пользователе из заголовков.
- Через OIDC сервер. Пользователь перенаправляется к OIDC серверу для авторизации.
Типы авторизации перечислены в порядке убывания приоритета. Все 3 типа авторизации могут быть настроены одновременно. Например, если данные о пользователе будут получены из заголовков, то перенаправления к OIDC серверу не будет. Чтобы отключить какой-то из типов авторизации, достаточно не указывать его в файле конфигурации.
Вся найстрока производится в файле конфигурации deployerParams.yaml. По умолчанию файл находится в папке /home/deployer/. Файл содержит 6 основных блоков:
oidc— блок настройки OIDC сервера.groupsAdmin— список групп для назначения роли admin.groupsViewer— список групп для назначения роли viewer.byIpUsers— блок настройки авторизации по IP. Если пользователь подключится с заданного IP адреса, то ему будет назначено заданное имя пользователя. Сделано для подключения сторонних систем, например, ботов или CI/CD.proxyAuth— блок настройки прокси-авторизации: когда авторизацией занимается вышестоящий сервис, а в установщик приходят только заголовки с уже определенными значениями.overrideUsers— переопределение атрибутов пользователей. Эти значения имеют приоритет перед данными, полученными из OIDC или заголовков.
В установщике есть 2 роли пользователей:
- admin — полный доступ.
- viewer — только чтение.
Содержит следующие поля:
Название поля | Описание | Пример значения |
|---|---|---|
host | URL OIDC сервера |
|
skipTls | Игнорировать ошибку сертификата при подключении к OIDC серверу |
|
clientId | ID OIDC клиента |
|
clientSecret | Секрет OIDC клиента |
|
authPath | Путь API клиентской авторизации |
|
tokenPath | Путь API работы с токенами |
|
infoPath | Путь API информации о пользователе |
|
scope | OAuth-scope OIDC сервера |
|
disableRefresh | Не проверять актуальность OAuth токена по истечении срока действия |
|
infoFields | Маппинг полей в ответе OIDC API информации о пользователе | |
infoFields: email | Содержит email пользователя в ответе OIDC API информации о пользователе |
|
infoFields: username | Обязательное поле — содержит имя пользователя в ответе OIDC API информации о пользователе |
|
infoFields: firstName | Содержит имя в ответе OIDC API информации о пользователе |
|
infoFields: lastName | Содержит фамилию в ответе OIDC API информации о пользователе |
|
infoFields: role | Содержит роль пользователя в ответе OIDC API информации о пользователе. Если окажется пустым, то будет подставлена defaultRole (см. раздел Дополнительные настройки авторизации) |
|
infoFields: groups | Содержит группы пользователя в ответе OIDC API информации о пользователе. Используется для назначения ролей через параметры groupsAdmin и groupsViewer (см. раздел Назначение ролей на основе групп OIDC) |
|
Пример конфигурации:
auth:oidc:host: https://biz.ws.vkwm1.on-premise.ru/auth/realms/EXCH.ON-PREMISE.RU/protocol/openid-connectskipTls: falseclientId: apiclientSecret: otBrIQrxqvXj9VUtOk5iR1TcuBsmDzx8authPath: /authtokenPath: /tokeninfoPath: /userinfoscope: emaildisableRefresh: falseinfoFields:email: emailusername: preferred_usernamefirstName: given_namelastName: family_namerole: deployerAccessgroups: groups
Если в ответе OIDC сервера возвращаются группы пользователя, можно настроить автоматическое назначение ролей.
- Если поле
roleвернулось — используется оно. - Если поле
roleне вернулось — проверяется членство в группах из groupsAdmin. Если пользователь состоит хотя бы в одной из перечисленных групп, ему назначается роль admin. - Если ни одна из групп groupsAdmin не подошла — проверяется членство в группах из groupsViewer. Если пользователь состоит хотя бы в одной из перечисленных групп, ему назначается роль viewer.
- Если ни одно из условий не сработало — используется defaultRole (см. раздел Дополнительные настройки авторизации).
Пример конфигурации:
groupsAdmin:- Engineers- SuperAdminsgroupsViewer:- Mailx
Содержит следующие поля:
cidr— IP/Subnet клиента.username— Обязательное поле. Идентификатор (имя пользователя), который будет назначен клиенту. Атрибуты пользователя будут взяты из блокаoverrideUsers.
Пример конфигурации:
auth:byIpUsers:- cidr: 172.20.70.190username: ivanivanov
Содержит два основных блока:
headers— маппинг заголовков в атрибуты пользователя.allowCIDRs— список IP/подсетей, с которых разрешен прием заголовков авторизации.
В блоке headers содержатся следующие поля:
Название поля | Описание | Пример значения |
|---|---|---|
Содержит email пользователя. |
| |
username | Обязательное поле — содержит идентификатор (имя) пользователя |
|
firstName | Заголовок, содержащий имя |
|
lastName | Заголовок, содержащий фамилию |
|
role | Заголовок, содержащий роль пользователя. Если окажется пустым, то будет подставлена defaultRole (см. раздел Дополнительные настройки авторизации) |
|
Пример конфигурации:
auth:proxyAuth:headers:email: x-emailusername: x-usernamefirstName: x-given-namelastName: x-family-namerole: x-roleallowCIDRs:- 172.20.70.190
Состоит из имен пользователей, атрибуты которых необходимо переопределить. Например у нас есть пользователь ivanivanov:
Название поля | Описание | Пример значения |
|---|---|---|
Содержит email пользователя. |
| |
firstName | Заголовок, содержащий имя |
|
lastName | Заголовок, содержащий фамилию |
|
role | Заголовок, содержащий роль пользователя. Если окажется пустым, то будет подставлена defaultRole (см. раздел Дополнительные настройки авторизации) |
|
Пример конфигурации:
auth:overrideUsers:as:email: ivanivanov@mail.rufirstName: ivanlastName: ivanovrole: admin
Кроме шести блоков описанных выше, есть еще несколько полей для настройки авторизации:
defaultRole— Роль по умолчанию, на случай, если из внешней системы получена пустая роль.auditLogPath— Путь к audit-логу установщика. Если поле пустое, то audit-лог не будет записываться.realIpHeader— Заголовок с реальным IP клиента, если установщик работает за прокси-сервером.realIpFrom— Список IP/посдсетей, с которых разрешен прием заголовка с реальным IP клиента. Если список пуст, то заголовок будет принят с любого адреса.
Пример конфигурации:
auth:...defaultRole: adminauditLogPath: audit.logrealIpHeader: x-real-IPrealIpFrom:- 172.20.70.190
auth:oidc:host: https://biz.ws.vkwm1.on-premise.ru/auth/realms/EXCH.ON-PREMISE.RU/protocol/openid-connectskipTls: falseclientId: apiclientSecret: otBrIQrxqvXj9VUtOk5iR1TcuBsmDzx8authPath: /authtokenPath: /tokeninfoPath: /userinfoscope: emaildisableRefresh: falseinfoFields:email: emailusername: preferred_usernamefirstName: given_namelastName: family_namerole: deployerAccessgroups: groupsgroupsAdmin:- Engineers- SuperAdminsgroupsViewer:- MailxbyIpUsers:- cidr: 172.20.70.190username: asproxyAuth:headers:email: x-emailusername: x-usernamefirstName: x-given-namelastName: x-family-namerole: x-roleallowCIDRs:- 172.20.70.190overrideUsers:as:email: as@mail.rufirstName: alastName: srole: admindefaultRole: adminauditLogPath: audit.logrealIpHeader: x-real-IPrealIpFrom:- 172.20.70.190
Информацию об авторизации можно увидеть в логах установщика:
journalctl -fu deployer
Либо на стороне OIDC-провайдера. Например, на сервере с Keycloak выполнить команду:
journalctl -fu onpremise-container-keycloak1
Добавьте ключ и сертификат в строку запуска установщика:
./onpremise-deployer_linux -tlsCert fullchain.pem -tlsKey privkey.pem
Если установщик запускается через systemd:
-
Откройте для редактирования файл
/etc/systemd/system/deployer.service:vim /etc/systemd/system/deployer.service -
В строчке
Execдобавьте:-tlsCert /etc/certs/fullchain.pem -tlsKey /etc/certs/privkey.pemУказав полный путь до ключей.
-
Выполните команды:
systemctl daemon-reloadsystemctl restart deployer
Технический писатель: Груздев Никита