Установка#
Введение#
В разделе описывается установка IAM Proxy на виртуальную машину.
Установка IAM Proxy в среду контейнеризации OpenShift описана в разделе IAM Proxy в контейнере.
Установка сервиса состоит из следующих основных этапов:
Подготовка окружения.
Создание или изменение профиля развертывания.
Подготовка и заполнение конфигурационных артефактов.
Развертывание job на сервере CI Jenkins.
Непосредственно выполнение развертывания.
Проверка результатов развертывания.
Подготовка окружения#
Получить сервера на базе ОС RHEL 8 или Alt Linux Sp8. На серверах должны быть настроены и доступны базовые репозитории
пакетов для пакетного менеджера (в зависимости от ОС это yum или apt).
При необходимости, получить новые проектные области или доступ к существующим областям инструментов DevOps (Git, Jenkins). Обеспечить чтобы на используемых Jenkins агентах был установлен Ansible 2.9+.
Подготовка дистрибутива#
Получите архив, содержащий файлы поставки дистрибутива. Текущая поставка предусматривает несколько файлов:
ownedдистрибутив - архив оригинальных частей дистрибутива AUTH, включая зависимости на KCSE;partyдистрибутив - архив зависимостей дистрибутива AUTH, включая зависимости на KCSE;vendorдистрибутив - архив полного дистрибутива компонента AUTH, включая зависимые модули KCSE.
Перед установкой, получите необходимые дистрибутивы, затем разархивируйте их в локальный каталог. В случае получения и
использования party+owned дистрибутивов, их необходимо предварительно «объединить» специальной утилитой,
использование которой подробно описано в подразделе «Объединение разделенного дистрибутива».
Описание установщика#
Основные операции по развертыванию выполняются запуском ansible-playbook, содержимое которого находится в дистрибутиве
в файле ansible/platformauth-deploy-playbook.yml. Версия дистрибутива сервиса указывается при запуске
ansible-playbook через переменную deploy_platformauth_version.
Пример запуска playbook:
ansible-playbook platformauth-deploy-playbook.yml -i inventories/DemoProfile/hosts --extra-vars "deploy_platformauth_version=1.0.1 tmp_clear=True"
Подготовка базовой конфигурации развертывания#
Здесь и далее под профилем подразумевается совокупность элементов конфигурации и окружения, свойственную определенному стенду.
Рекомендуется использовать систему версионного контроля кода для хранения конфигурации развертывания. Если подготовленные файлы конфигурации уже находятся в такой системе, выполните клонирование репозитория на локальную машину для внесения правок, и сделайте копию шаблонного каталога профиля конфигурации под новый стенд. Пример команды клонирования репозитория, которую необходимо выполнить в терминале:
git clone ssh://git@bitbucket.mycompany.ru:7999/Project/CI_platformauth.git
git checkout develop
При отсутствии шаблона конфигурационных файлов в системе версионного контроля, используйте пример из дистрибутива
(примеры профилей расположены по пути deploy\ansible\inventories\).
Заполнение конфигурационных файлов#
Создание или изменение профиля развертывания#
Скопируйте профиль DemoProfile из дистрибутива, как шаблонный для нового профиля StendX.
ansible/inventories/DemoProfile -> ansible/inventories/StendX
Внесение изменений в конфигурационные файлы профиля стенда#
Необходимо внести изменения в параметры профиля StendX. В данной документации приводится описание и назначение
определенных параметров. Поставляемые YAML-файлы могут содержать дополнительные комментарии к заполняемым параметрам.
Например, дополнительные примеры и уточнения.
Заполнение файла ansible/inventories/StendX/hosts#
С примерами профилей развертывания можно ознакомиться в каталоге дистрибутива deploy/ansible/inventories.
Параметр |
Описание |
Пример |
|---|---|---|
|
KeyCloak, модуль аутентификации ( |
node1.platformauth-devb.mycompany.mycompany.ru |
|
Proxy, модуль проксирования ( |
node1.platform-devb.mycompany.mycompany.ru |
|
Syslog-ng, модуль событий аудита ( |
10.x.x.99 |
|
soft-балансировщик для Proxy, обычно необходим на стендах тестирования, и может быть заменен на hw-балансировщик ( |
10.x.x.10 |
|
soft-балансировщик для KeyCloak, обычно необходим на стендах тестирования, и может быть заменен на hw-балансировщик ( |
10.x.x.11 |
|
|
node1.platform-rds-devb.mycompany.mycompany.ru |
Вместо IP\DNS в файле hosts используйте псевдонимы, с заданием для них в отдельных параметрах
ansible_host\ipaddr\dns_name.
Пример: keycloak_1 ansible_host=10.x.x.147 ipaddr=10.x.x.147 dns_name=node1.platformauth.mycompany.ru
Шаблон DNS-имени для серверов#
Описание DNS-имени по шаблону вызвано удобством при использовании понятных имен, и тем, что иногда сервера DNS
ограничивают максимальную длину FQDN. Как правило, ограничение установлено в 63 символа. Также, имя с самого верхнего
уровня домена используется как имя узла при организации распределенного cache в кластере Keycloak, длинна имени узла
(node-id), также имеет ограничение по длине (обычно в 23 символа).
DNS-имя формируется по шаблону: <node_name>.<component_name>.<product_code>.<stand_code>.<dns_zone>
Где значения в <...> описаны ниже:
Значение |
Пример |
Описание |
|---|---|---|
|
node1 |
Опционально. Используется при количестве серверов более одного. Наименование и порядковый номер node на стенде (включает в себя наименование структурного компонента) |
|
rds |
Наименование компонента/сервиса IAM для которого создается dns-имя |
|
cfge |
Код продукта (название продукта/компонента в котором развертывается IAM Proxy) |
|
dev3 |
Код и номер стенда |
|
my.company.ru |
Наименование зоны в которой планируется создание записи |
Пример: node1.rds.cfge-dev3.my.company.ru
Шаблон является необязательным и носит рекомендательный характер.
Заполнение файла ansible/inventories/StendX/group_vars/all/main.yml#
Здесь описываются основные параметры развертываемого сервиса.
Параметр |
Описание |
Пример |
|---|---|---|
|
Задать репозиторий в котором размещен дистрибутив сервиса |
пример для Nexus - |
|
Задать имя артефакта дистрибутива |
для Nexus - |
|
Задать класс артефакта (необязательный параметр, задается значение |
|
|
|
|
|
Задать пользователя, под которым будут выполняться задачи по установке на целевых серверах |
|
|
Задать тип стенда. Допустимы следующие значения: |
|
|
Префикс для технических названий (например используется в шаблоне DNS-имен) |
|
|
Понятное название стенда для отображения в UI |
|
|
Понятное название АС установленной на стенде для отображения в UI (по умолчанию |
|
|
DNS-имя балансировщика для frontend KeyCloak. Данный параметр может вычисляться по шаблону |
|
|
DNS-имя балансировщика для frontend Proxy. Данный параметр вычисляется пошаблону ( |
|
|
Логин системного пользователя, под которым будут работать процессы прокси и балансировщика |
|
|
Получать конфигурацию ответвлений из |
|
|
Id клиента/системы на провайдере Open ID Connect, и в случае использования Keycloak обычно равно "PlatformAuth-Proxy" |
|
|
Опциональный, пароль для аутентификации на провайдере |
|
|
Указывается список URL rds-серверов через «;» по которым отдается активная конфигурация, используется клиентская failover-балансировка |
|
|
Алиас клиентского сертификата для rds-client из файла |
|
|
Параметры отправки событий в Platform V Audit (java опции) |
Пример задания audit2_options: |
Заполнение раздела с описанием параметров ответвлений(junction) в "proxy_jct_list"#
В этой группе параметров необходимо задать описание параметров маршрутизации запросов на защищаемые сервисы, на который/которые будет осуществляться проксирование. Данный раздел - это список с произвольным количеством элементов/объектов, где каждый элемент описывает параметры проксирования на конкретный backend (указываются все backend с front-UI, имеющиеся на стенде).
Параметр |
Описание |
Пример |
|---|---|---|
|
Задать понятное описание для отображения ответвления сервиса на технической странице IAM Proxy. На стартовой странице IAM Proxy возможно объединить сервисы в раскрывающиеся группы, путем использования |
junctionName: |
|
Задать расширенное описание проксируемой подсистемы/сервиса на технической странице IAM Proxy |
|
|
Корневой контекст запросов, по которому будет определяться принадлежность запроса к конкретной подсистеме/backend, и в какой backend будет проксироваться запрос |
junctionPoint: |
|
URL относительно корня на backend, по которому осуществляется основной вход в UI подсистемы. Пустое значение или |
indexUrl: |
|
"Прозрачность" url (необязателен, |
transparent: |
|
Использование SSL на серверах backend (необязателен, |
|
|
Шаблон/значение имени из CN сертификата backend-серверов, используется при соединении с backend по HTTPs. Значение "*" - отключает проверку SSL. (необязателен, |
sslCommonName: |
|
Список серверов (сервер:порт), на которые будут проксироваться/балансироваться запросы для данного контекста |
Пример: |
|
Указание дополнительных опций или конфигурационных файлов, применяемые к данному |
"common/rds-ssl-sni-on.server.conf" - включаем передачу имени сервера из sslCommonName через SNI |
|
Шаблон (регулярное выражение) авторизации ролей пользователя. Пул ролей по которым осуществляется доступ к junction формируется из ID токена общими ролями (роли Realm. Атрибуты: |
|
|
Опциональный. По умолчанию 0. Лимит в количестве запросов в секунду (rps), действующий по конкретному ответвлению, в случае превышении запрос будет задерживаться до соблюдения лимита, но если требуется задержка более 10 секунд, запрос будет отклонен с ошибкой. Лимит применяется в рамках каждого сервера IAM Proxy автономно. При установке параметра |
20 |
|
Опциональный. По умолчанию ''. Имя зоны действия лимита |
my_zone_20rps |
Пример прохождения запроса по "непрозрачному" ответвлению
Когда
transparent=falseиjunctionPoint=/jct-point, то URL будет меняться следующим образом:
Запрос: Browser (URLhttps://my.com/jct-point/myindex.html) -> IAM.Proxy -> BackEnd (URLhttps://my.com/myindex.html)
Ответ: BackEnd (bodyhtml:href: https://my.com/mysubpage.html) -> IAM.Proxy -> Browser (bodyhtml:href: https://my.com/jct-point/mysubpage.html)
Пример заполненного раздела для нескольких ответвлений:
proxy_jct_list:
- junctionName: Мое приложение
description: Расширенное описание проксируемой подсистемы/сервиса
junctionPoint: /my-app
indexUrl: /my-app/start-page
sslCommonName: ".my.server.ru" # шаблон имени в SAN сертификата backend-серверов
#https: False # default True
transparent: True
serverAddresses: [ "node1.my.server.ru:443" , "node2.my.server.ru:8443" ]
applyJctRequestFilter: "common/rds-set-header-host-to-backend.location.conf"
- junctionName: ФП SPAS
description: Расширенное описание функциональной подсиситемы SPAS
junctionPoint: /spas-dev
indexUrl: /spas/admin/index
sslCommonName: "*" # шаблон имени из CN сертификата backend-серверов (default .mycompany.ru)
#https: False # default True
#transparent: False # default False
serverAddresses: [ "127.0.0.1:8443" ]
В параметре applyJctRequestFilter можно задать набор из следующих значений (через запятую):
common/oidc-unauth-access.location.conf- отключение функциональности по аутентификации\авторизации на ответвлении;common/rds-set-header-host-to-backend.location.conf- переопределение заголовка Host в сторону backend с указанием первого сервера из пула балансировки (необходимо использовать при проксировании в сторону OpenShift);common/rds-ssl-sni-on.server.conf- разрешаем передачу имени сервера по SNI, fqdn-имя сервера обязательно задается вproxy_ssl_name(необходимо использовать при проксировании в сторону OpenShift при routes с типомpassthrough);
Для значений параметров применяются следующие ограничения:
при использовании DNS-имен в
serverAddressesони должны успешно разрешаться в IP на DNS-сервере, который используется на IAM Proxy (иначе конфигурация не будет применена);
applyJctRequestFilterдолжен содержать пути к существующим файлам на IAM Proxy;при
https = trueнеобходимо обеспечить наличие сертификатов ЦС вTrustStore IAM Proxy;параметр
junctionPointдолжен быть уникален и не должен заканчиваться на/;в случае наличия у всех запросов на приложение одного базового корневого контекста, рекомендуется использовать
transparent = true;использовать в
applyJctRequestFilterопцииcommon/rds-set-header-host-to-backend.location.confи\илиcommon/rds-ssl-sni-on.server.confпри проксировании вk8s\OS.
Заполнение файла ansible/inventories/StendX/group_vars/keycloak.yml#
В этом файле задаются параметры настройки KeyCloak, модуль аутентификации:
keycloak_db_address, keycloak_db_name, keycloak_db_user_name- задать реквизиты подключения к БД KeyCloak (чистая БД, при отсутствии таблиц они автоматически будут созданы). Вkeycloak_db_addressможно указать несколько серверов ( пример10.x.x.104:5432,10.x.x.105:5432). Вkeycloak_db_nameможно указать дополнительный параметры для jdbc драйвера(примерkeycloak?targetServerType=master&prepareThreshold=0).keycloak_system_user- логин системного пользователя, под которым будет работать служба keycloak.keycloak_force_install-True/False, принудительная полная установка keycloak, с предварительным удалением всех старых каталогов/файлов KeyCloak на целевом сервере (устанавливается вTrueпри проблемах первоначальной установки, а после успешной установки необходимо выставить вFalse, чтобы при следующем обновлении случайно не потерять файлы размещенные вручную).keycloak_alternative_redirect_uri- задаем дополнительные разрешенныеredirect_uri(обычно не требуется задавать, если не используются дополнительные DNS-имена до прокси), https://* - разрешает redirect на любые хосты (не рекомендуется использовать при развертывании на Пром).keycloak_saml_enabled-True/False, опциональный, по умолчаниюFalse, включение endpoint SAML на Keycloakkeycloak_deploy_custom_modules- установить дополнительные модули на сервер (указывается имя файла из дистрибутива по пути\keycloak\config\deployments-custom).Пример
["custom1.jar","custom2.ear"]keycloak_undeploy_modules- удалить модули если они есть на сервере (указывается имя файла, может потребоваться при отключении функциональности или для удаления устаревших модулей).Пример
["old1.jar","deprecated2.ear"]proxy_oidc_client_jwt_signed_cert- сертификат в формате PEM для аутентификации на OIDC-endpoint методомSigned Jwt. Если определен этот параметр, то метод аутентификации на KeyСloak.SE будет выставлен вSigned Jwt(и будет использован сертификат, вместоclient_secret). Значение задается текстом из открытой части сертификата прокси\oidc-клиента (текст между---BEGIN CERTIFICATE---и---END CERTIFICATE---, с исключением перевода строк и пробелов). Закрытый ключ сертификата при этом указывается в параметреoidc_client_rsa_private_key( для подписания запроса от прокси\oidc-клиента).Пример значения: "MIIKmDCCCICgAwIBAgITGAAAAAS5RQdwBbAYQAAAAAAABDANBgkqhkiG9w0BAQsF … JB9bF2BQ=="
wsSyncSpas- опциональный, настройки для синхронизации\получения справочников из функциональной подсистемы Объединенный сервис авторизации (ОСА).url- endpoint по которому опубликован SOAP интерфейс функциональной подсистемы Объединенный сервис авторизации (ОСА).user, password- логин/пароль для доступа к SOAP интерфейсу (параметр влияющий на безопасность).roleOwnerType- куда сохранять роли полученные из подсистемы Объединенный сервис авторизации (ОСА) (CLIENT,REALM).roleOwnerName- имя существующего клиента для сохранения ролей (используется приroleOwnerType = CLIENT).Пример: "PlatformAuth-Proxy"
scheduleTrigger- опциональный, задать периодический запуск синхронизации.Пример: "0 0 4 ? * *" запускать по расписанию каждый день в 4 утра
keycloak
smtpServer- задать параметры подключения к почтовому серверу по SMTP и пользователя, которые будут использоваться KeyCloak при отсылке уведомлений по email.realms- опциональный, задает список realms для пользователей, создаваемых развертыванием. По умолчанию создается один пользовательский realm -PlatformAuth.Пример:
realms: # опциональный, создание и обновление дополнительных realms - "CustomersAuth" - "TestRealm"userRealmOptions.afterCreateUserSendEmail- задатьTrue/False.True- при создании польз. отправлять уведомление по email и одноразовый временный токен на смену пароля.userRealmOptions.actionTokenGeneratedByAdminLifespan- задать время жизни токена на смену пароля (в часах).userRealmOptions.ssoSessionIdleTimeout- опциональный, время жизни сессии Keycloak по не активности (в минутах).userRealmOptions.displayName,userRealmOptions.displayNameHtml- отображаемое название сервиса на форме входа.soapApi.verifyCN- SOAP API по управлению УЗ требует аутентификации по клиентскому сертификату, в данном параметре указывается список допустимых CN клиентского сертификата (при mTLS) через|,*- отключить проверку.soapApi.rolesFilter- фильтр по скоупу ролей, подпадающих под синхронизацию через API. Можно указать несколько префиксов ролей через запятую. Если в имени есть/то, считается что это роль клиента (пример, фильтрPlatformAuth-Proxy/подходит под любую роль клиентаPlatformAuth-Proxy).Пример:
platformauth, EFS, PlatformAuth-Proxy/realm_options- опциональный, список пар значений name+value которые будут установлены как опции для realm ( список доступных опций необходимо смотреть в документации компонента KCSE) Пример:realm_options: - { name: "accessTokenLifespan", value: "{{ 5*60 }}" } # время действия access-token, задается в секундах - { name: "ssoSessionMaxLifespan", value: "{{ 10*60*60 }}" } # максимальное время жизни сессии, задается в секундахrealm_attributes- опциональный, список пар значенийname+valueкоторые будут установлены как атрибуты для realm (список доступных служебных атрибутов необходимо смотреть в документации компонента KCSE, возможно указывать свои произвольные атрибуты)Пример:
realm_attributes: - { name: "failureFactor", value: "10" } # количество неуспешных попыток входа до установки временной блокировкиinfinispan- опциональный, настройки работыinfinispan.bind_port- опциональный, порт по которому будет подключение к кластеруinfinispan.tcp_send_buf_size- опциональный, размер буфера на отправку.tcp_recv_buf_size- опциональный, размер буфера на получение.thread_pool_keep_alive_time- опциональный, время жизни подключения при отсутствии активности.thread_pool_min_threads- опциональный, минимальный размер пула потоков.thread_pool_max_threads- опциональный, максимальный размер пула подключений.
Заполнение файла ansible/inventories/StendX/group_vars/proxy.yml#
Заполнение параметров IAM Proxy - модуль проксирования:
proxy_dns_servers- DNS-сервера (через пробел) актуальные для текущего стенда, используемые для определения ip адресов по DNS-именам, из модулей прокси;proxy_session_idletime- время таймаута сессии прокси по не активности (в секундах) - устанавливаем значение в 30 минут;proxy_session_name- опциональный, по умолчаниюPLATFORM_SESSION, задает имя сессионной cookieproxy_session_domain- имя домена для сессионной cookie (значение '…' позволяет задать родительский домен от фронтового fqdn);proxy_session_check_addr- включаем привязку сессии к клиентскому IP-адресу (True/False,default False);proxy_mtls_key_file- файл ключа сертификата прокси, для организации mTLS между прокси и проксируемой подсистемой/backend. Не обязательный;proxy_mtls_cert_file- файл сертификата прокси, для организации mTLS между прокси и проксируемой подсистемой/backend. Не обязательный;proxy_session_secret- Секрет используемый для шифрования сессии IAM Proxy (длина должна быть > 100 символом, и НЕ должно содержать символов'\$;proxy_jct_ssl_name- по умолчанию при проверке сертификата на проксируемом сервере считаем валидные CN/SAN(из сертификатов backend) c таким доменом/host;proxy_to_backend_access_token- опциональный,True- передавать в backendaccess_tokenвместоid_token;proxy_to_syslog_server- удаленное логирование событий из IAM Proxy;proxy_healtcheck_enable-True/False, опциональный,default False,True- включение активного healtcheck до серверов backend (ответвления в которых есть строка/rds-healthcheckвapplyJctRequestFilter), будет вызовGET /healtcheckкаждые 10 сек., и ожидается в ответе HTTP-код 200/302 для живого узла (статус доступен по urlhttp://127.0.0.1:10080/status-healtcheck/);proxy_keepalive_timeout-timeout [header_timeout], опциональный, default180 170, параметр (timeout) ограничивающий время клиентских keepalive соединений, второй параметр (header_timeout) попадет в заголовок ответа в формате:Keep-Alive: timeout=header_timeout(по умолчанию будет заголовокKeep-Alive: timeout=170);proxy_ssl_session_cache- опциональный, defaultnone, настройка использования cache SSL сессий клиентских подключений, в параметре указывается объем памяти выделенный под cache в мегабайтах (в 1 мегабайте может поместиться около 4000 SSL сессий), так же можно указатьnone(разрешение использования cache на клиенте) илиoff(запрет использования cache);proxy_support_isam_headers- опциональный,default True,True- добавлять в запросы HTTP-заголовки аналогичноISAM/WebSeal(iv-user,iv-groups,iv-remote-address). Функциональность доступна с версии (IAM Proxy) 4.2.2.
Параметры
authz_spasуказываются если необходимо использовать функциональность авторизации по URL на разрешениях которые предоставляет ОСА:
authz_spas_url- опциональный, url для вызова API SPAS функциональной подсистемы ОСА.
authz_spas_secret- опциональный, секрет для вызова API SPAS функциональной подсистемы ОСА.
authz_spas_ticket_lifetime- опциональный, частота обновления тикета SPAS функциональной подсистемы ОСА, в секундах.
authz_spas_ticket_failed_lifetime- опциональный, частота получения тикета SPAS функциональной подсистемы ОСА, если ранее попытка была неуспешной, в секундах.
authz_spas_rights_lifetime- опциональный, частота обновления полномочий из SPAS функциональной подсистемы ОСА, в секундах.
authz_spas_rights_failed_lifetime- опциональный, частота обновления полномочий из SPAS функциональной подсистемы ОСА, если ранее попытка была неуспешной, в секундах.
authz_spas_ssl_verify- опциональный, проверять сертификат на endpointauthz_spas_url.
oidc_discovery_url- опциональный, задание URL метаданных OIDC IDP.oidc_logout_uri- опциональный, задание URL на который делатьredirectприlogout.oidc_use_idp_provider- опциональный, вход на Keycloak через заранее указанного внешнего провайдера.oidc_scope- опциональный, задание дополнительных скоупов OIDC при аутентификации.oidc_ssl_verify- опциональный, проверять сертификат на endpoint OIDC.oidc_use_client_cert- опциональный, использовать клиентский сертификат на endpoint OIDC.oidc_host_gray- использовать для подключения к OIDC IDP отдельный ip:port, а не тот который в URL из$oidc_discovery_url(может потребоваться при необходимости использовании серых адресов IDP).oidc_post_logon_by_token_call_uri- вызвать endpoint на IDP после восстановления по токену сессии на прокси.oidc_access_token_expires_leeway_rand- опциональный, за сколько секунд до истечения access-токена обновить токены ( реальное количество секунд будет выбрано случайным образом от этого числа, а ошибка обновления будет проигнорирована если access-токен действителен). Можно указать проценты от времени действия access-токена, например 20% или 0.2.oidc_reuse_refresh_count- опциональный, default -1, определяет количество повторных использований одного refresh токена (значение менее 0 снимает ограничение)
Заполнение файла ansible/inventories/StendX/group_vars/syslogng.yml#
Необходимо задать/проверить параметры модуля событий аудита (Syslog-ng)
syslogng_audit2_options- параметры для отправки событий в Platform V Audit (обычно равно{{ audit2_options }}).syslogng_system_user- логин системного пользователя, под которым будут работать процессы Syslog-ng (должно быть равноsyslog-ng).syslogng_acccepted_ip_adresses- список(тип list), c каких ip-адресов разрешено принимать сообщения в Syslog-ng для отправки в ТС Аудит (обычно уже задан, и заполняется автоматически адресами серверов из группkeycloakиproxy, смотрите демо профиль, при этом сам ip-адрес обязательно указывается в переменнойipaddrу каждого сервера данных групп, в файлеhosts)
Заполнение файла ansible/inventories/StendX/group_vars/rds_server.yml#
Задать параметры модуля RDS-Server из профиля, для веток указанных ниже, передаются в конфигурацию приложения(конфигурация springboot application) полностью как будет задано в профиле (корневой узел rds не передается), и их состав не ограничен развертыванием:
rds.logging.*
rds.configStore.*
rds.audit.*
rds.standin.*
rds.server.*
rds.configStore.config-store-jdbc-login- логин к БД компонента PACMAN (CFGA) продукта Platform V Configuration ( CFG).rds.configStore.config-store-jdbc-url- url для подключения к БД Platform V Configuration компонента PACMAN ( примерjdbc:postgresql://10.x.x.3:5432/config).rds.configStore.configStoreCryptoPas- пароль для шифрования в Platform V Configuration компонента PACMAN (параметр, влияющий на безопасность).rds.audit.kafka-servers- сервера для подключения к kafka Platform V Audit (пример10.x.x.48:9092,10.x.x.179:9092) .rds.audit.mockMode- true/false, включение режима заглушки Platform V Audit.rds.audit.runWithoutAudit-true/false,true- продолжить работу приложения при проблемах подключения к Platform V Audit.rds.standin.cloud.client- параметры КМ Standin для получения состояния платформенного Standin в Прикладном Журнале.rds.server.port- порт на котором будет поднят сервер по HTTPs.rds.server.http.enable-true/false,true- включить работу по HTTP.rds.server.http.port- порт на котором будет поднят сервер по HTTP.rds.server.ssl.client-auth-none/need, использовать аутентификацию по клиентскому сертификату при обращении к API.
Примечание: Список параметров развертывания указанный выше не исчерпывающий, указаны параметры на которые стоит обратить внимание.
Заполнение конфиденциальных параметров, влияющих на безопасность#
Параметры задать в
ansible/inventories/StendX/group_vars/all/vault_main_decrypted.yml(игнорируется git, и хранится только локально).Список приведен для примера, и может быть как расширен, так и уменьшен по необходимости. Все переменные
vault_*используются исключительно на уровне yaml-файлов ansible профиля развертывания.vault_deployer_pass- пароль пользователя которым заходим при развертывании по ssh.vault_keycloak_admin_password- пароль технического администратора (используется только при развертывании).vault_keycloak_db_password- пароль к БД keycloak (параметр, влияющий на безопасность).vault_keycloak_keystore_password- пароль к базе сертификатов/ключей keycloak (файлkeycloak-keystore.p12).vault_keycloak_smtpServer_user_password- пароль пользователя под которым отправляются email-уведомления.vault_proxy_session_secret- Секрет используемый для шифрования сессии IAM Proxy (длина должна быть > 100 символом, и НЕ должно содержать символов'\$").Содержимое параметра - это случайный набор символов, который можно сгенерировать как вручную, так и какими-то утилитами. Необходимо учесть, что сгенерированная последовательность должна состоять из печатных символов ASCII (за исключением символов
'\$"), не должна содержать невидимых символов или символов управления(например, символов переноса строк). Одним из возможных вариантов генерации подобной последовательности на Unix-совместимой станции является использование следующей команды в терминале (или консоли bash):
head /dev/urandom | LC_ALL=C tr -dc "(-[]-~" | head -c 512vault_rds_config_store_jdbc_pas- пароль к БД Platform V Configuration компонента PACMAN.
Зашифровать файл с помощью ansible-vault, для этого:
Ниже только рекомендация, но необязательный подход к шифрованию секретов. Допустимо шифровать как файлы целиком, так и переменные по отдельности, используя отдельно утилиту ansible-vault.
записать vault-пароль в
ansible/inventories/StendX/group_vars/all/vault-password.txt(игнорируется git, и хранится только локально).скопировать файлы из
ansible/inventories/StendX/group_vars/all/на ПК с установленным ansible(linux).выполнить команду из каталога с файлами
chmod a+x encrypt_vaults.sh && ./encrypt_vaults.sh.в результате файл
vault_main_decrypted.ymlбудет зашифрован и записан вvault_main_encrypted.yml.скопировать файл
vault_main_encrypted.ymlв каталог профиляansible/inventories/StendX/group_vars/all/.
Заполнение файлов-секретов#
Тут используются сертификаты, описание получения которых описано далее в разделе "Выпуск сертификатов"
Файлы размещаются в каталоге
ansible/inventories/StendX/files/. Описание файлов:keycloak-keystore.p12- база сертификатов/ключей keycloak в которой содержится сертификат для организации HTTPs на keycloak (смотрите ниже описание выпуска сертификатов в ЦС).proxy-server.crt.pem- открытый ключ для организации HTTPs на прокси.proxy-server.key.pem- закрытый ключ для организации HTTPs на прокси.proxy-server.p12- из этой базы rds-client берет клиентский сертификат для mTLS при подключении по HTTPs к rds-server (обычно там тот же сертификат, что и вproxy-server.*.pem, но в формате PKCS12).syslogng-server.crt.pem- открытый ключ для организацииtls+syslog keycloak→syslog-ng.syslogng-server.key.pem- закрытый ключ для организацииtls+syslog keycloak→syslog-ng.rds-server-keystore.p12- база сертификатов/ключей keycloak в которой содержится сертификат для организации HTTPs на rds-server.trusted_ca_*.cer- доверенные центры сертификации в формате DER, которые выдали сертификаты нам и/или смежным серверам (это как минимум корневой и промежуточный ЦС).trusted_ca_*.crt.pem- доверенные центры сертификации в формате PEM, которые выдали сертификаты нам и/или смежным серверам (это как минимум корневой и промежуточный ЦС).trusted_keycloak_*.cer- доверенные центры сертификации в формате DER, для аутентификации на keycloak по клиентскому сертификату (нужен, еслиkeycloak_funcadmin_required_auth_cert: True).client_trusted_chain.crt.pem- доверенные центры сертификации в формате PEM, для аутентификации на proxy по клиентскому сертификату (нужен, если заданproxy_mtls_front_verify_dn_regex).keycloak/*- файлы и подкаталоги из этого каталога будут доставлены до серверов keycloak, в каталог/opt/keycloak/(переменнаяkeycloak_home). Файлы*.j2будут обработаны как шаблоны, и попадут на сервера без расширения.j2.keycloak/post-deploy/*.sh- файлы из этого каталога будут запущены на серверах keycloak в конце развертывания ( если расширение будет.sh.j2, то предварительно файл будет обработан как шаблон, и.j2будет отброшено).proxy/*- файлы и подкаталоги из этого каталога будут доставлены до серверов proxy, в каталог/opt/iamproxy/. Файлы*.j2будут обработаны как шаблоны, и попадут на сервера без расширения j2.
Для конфиденциальных файлов добавляется расширение
.decrypted(эти файлы игнорируется git, и хранятся только локально), они будут позже шифроваться.Зашифровать конфиденциальные файлы с помощью ansible-vault, для этого можно использовать такой подход:
записать vault-пароль в
ansible/inventories/StendX/files/vault-password.txt(игнорируется git, и хранится только локально) (параметр, влияющий на безопасность).скопировать файлы из
ansible/inventories/StendX/files/на ПК с установленным ansible(linux).выполнить команду из каталога с файлами
chmod a+x encrypt_vaults.sh && ./encrypt_vaults.sh.в результате файлы
file_name.xxxxx.decryptedбудут зашифрованы и записаны вfile_name.xxxxx.скопировать зашифрованные файлы
file_name.xxxxxв каталог профиляansible/inventories/StendX/files/.
В случае необходимости использования SecMan, ознакомьтесь с инструкцией по настройке интеграции с Vault на ВМ или Vault в OSE.
Сохранение профиля в GIT#
После внесения всех изменений, наш каталог с профилем сохраняется в GIT, и размещается под версионный контроль. Сохранение лучше делать в отдельной ветке, соответствующей типу среды или конкретному стенду.
git branch StendX
git checkout StendX
git commit -a -m "init StendX"
git push origin
Примечание: Для хранения профилей развертывания и установки, использование версионного хранилища необязательно. Данный подход приведен как рекомендация.
Выпуск сертификатов#
Для работы HTTPS по фронтовым DNS-именам потребуются сертификаты, выпущенные Центром Сертификации.
Так же потребуются сертификаты для межмодульного взаимодействия по TLS.
Создайте сертификаты на используемые в сервисах DNS-имена(должны быть в поле SAN сертификата), с использованием доверенных ЦС (ниже указаны рекомендуемые CN):
platform-stendx.my.company.ru(значение из параметраproxy_dnsname, для промplatform.my.company.ru).platformauth-stendx.my.company.ru(значение из параметраkeycloak_dnsname, для промplatformauth.my.company.ru).platform-syslogng-stendx.my.company.ru(обмен по TLS между Keycloak и Syslog-ng, для промplatform-syslogng.my.company.ru).platform-rds-stendx.my.company.ru(значения из параметраrds_server_urls, для промplatform-rds.my.company.ru).
Для каждого сертификата нужно будет ОБЯЗАТЕЛЬНО в альтернативных DNS-псевдонимах (Subject Alternative Names)
указать все используемые под сервис DNS-имена (fqdn всех nodes и под балансировщик при его наличии,
например platform-stendx.my.company.ru, node1.platform-stendx.my.company.ru), и желательно(но не обязательно)
указать IP всех конечных серверов включая балансировщик (нужно в случе если планируется обращаться к серверам по IP).
Регистрация DNS-имен в службе DNS#
Доменные имена IAM Proxy и Keycloak.SE platform-stendx.my.company.ru , platformauth-stendx.my.company.ru
необходимо зарегистрировать в DNS, указав для них IP-адреса балансировщиков (или IP самого сервера если он один)
для IAM Proxy и Keycloak.SE соответственно. Для корректного функционирования решения достаточно заведения в DNS
записи с типом A или B.
Если имеется несколько серверов у компонента, то для каждого отдельного сервера рекомендуется зарегистрировать во
внутреннем DNS отдельное имя, прибавив к основному DNS-имени приставку node1., node2. и так далее.
Пример имен двух серверов Keycloak: node1.platformauth-stendx.my.company.ru, node2.platformauth-stendx.my.company.ru
Создание в Jenkins задачи по установке#
При использовании Jenkins для установки, необходимо в нем создать задачу с типом pipeline, которая будет запускать
ansible-playbook установщика.
Создание задачи:
Найти Jenkins-файл в дистрибутиве:
deploy/jenkins/PlatformAuth_CDL.jenkinsfile.Скопировать Jenkins-файл в тот же Git-репозиторий (например в папку
jenkins/), где размещаются профили развертывания. В Jenkins-файл правим по желанию значения вdefaultValueсекцииparameters{}под свой стенд, чтобы не вводить их потом каждый раз.Перейти в Jenkins и создать Jenkins job c типом
Pipeline\<img height="300px" src="resources/new_item.png" /><img height="300px" src="resources/pipeline.png"/>.В блоке
Pipeline, в полеDefinitionнеобходимо выбратьPipeline script from SCS, затем в полеSCMвыбратьGIT.В поле
Repository URLуказываем ссылку на Git-репозиторий из п.2.В поле
Credentialsуказываем учетную запись которая имеет доступ на чтение к Git-репозиторию.Прописываем git-ветку в поле
Branch Specifier, вScript Pathотносительный путь до Jenkins-файла ( напримерjenkins/PlatformAuth_CDL.jenkinsfile) и нажимаемСохранить.
Нажимаем кнопку
Собрать сейчас. Сборка возможно будет с ошибкой, но это нормально. На этом этапе Jenkins job добавит необходимые параметры запуска из Jenkins-файла, и при следующем запуске они появятся в job.После обновления страницы появится кнопка
Собрать с параметрами, по которой можно будет запустить сборку с параметрами:STAND- наименование стенда, то естьinventoryдляansible(это имя папки вansible/inventories/, напримерStendX);PLATFORMAUTH_VERSION- версия артефакта дистрибутива размещенного в Nexus;EMAIL_RECIPIENTS- опциональный параметр, email для уведомлений о результате выполнения job;PLAYBOOK- имя файла с playbook;SSH_USER- опциональный параметр, учетная запись ssh-пользователя для подключения к хостам, ее необходимо указывать только при запуске подготовки серверов, когда необходимы привилегииsudo root;LIMIT- опциональный параметр, задать ansible параметрlimitдля ограничения установки на выбранные хосты\группы которые расположены файле hosts (например когда мы хотим установить новую версию на часть серверов);
STAGE_DEPLOY- включить выполнение запуска указанного playbook;DEBUG- включение подробного уровня логирования в ansible (-vvv);USE_SECMAN- включить использование хранилища секретов Hashicorp Vault;
Дополнительно, для нормальной работы может потребоваться создать credentials в Jenkins с ID:
VAULT_PASSWD- с типомSecret text, в нем сохраняется секрет, на котором зашифрованы в ansible-vault параметры профиля развертывания (в нем сохраняется содержимое из файлаansible/inventories/StendX/files/vault-password.txtиспользуемого в разделах "Заполнение файлов-секретов" и "Заполнение конфиденциальных параметров, влияющих на безопасность");SSH_USER- с типомSSH Username with private key, в нем сохраняется закрытый ssh-ключ, который потом выбирается при запуске подготовки серверов;Secman_app_role- с типомVault App Role Credential, в нем сохраняется информация о роли и секретах хранимых в Hashicorp Vault.
Установка сервиса на сервера стенда#
Выполнение скриптов подготовки серверов#
Все действия, требующие прав суперпользователя (root) вынесены в отдельные shell-скрипты, которые необходимо предварительно выполнить на серверах, предназначенных для развертывания.
Скрипты подготовки, включенные в дистрибутив (список в порядке очередности запуска):
prep-deployers.sh- выполняется на всех серверах в первую очередь. При запуске скрипта необходимо будет задать пароль для ssh-пользователя (deployer) под которым будет производиться развертывание (значение из переменной профиляvault_deployer_pass). Так же пароль можно указать при запускеprep-deployers.shв первом параметре или в переменной окруженияdeployer_pass(параметр, влияющий на безопасность), если пароль не указан при запуске он будет запрошен в терминале;prep-keycloak.sh- выполняется на всех серверах группыkeycloak;prep-iamproxy.sh- выполняется на всех серверах группыproxy;prep-rds-client.sh- выполняется на всех серверах группы nginx, при использовании конфигурирования через rds-server и компонент PACMAN (CFGA) продукта Platform V Configuration (CFG);prep-rds-server.sh- выполняется на всех серверах группыrds_server, при использовании конфигурирования через rds-server и компонент PACMAN (CFGA) продукта Platform V Configuration (CFG);prep-syslog-ng.sh- выполняется на всех серверах группыsyslogng;prep-lb-iamproxy.sh- выполняется на всех серверах группыproxy;prep-vault-agent.sh- выполняется на всех серверах группыloadbalancer;unprep-all.sh- удалить все установленные ранее компоненты сервиса, и все преднастройки;
Примечания:
Файл дистрибутива
system-prepare.zipсодержит все файлы необходимые для подготовки серверов к установке (файлы, скрипты, пакеты необходимые для установки), и для подготовки серверов необходимо использовать его.При ручной установке важен порядок запуска скриптов.
При установке на Alt Linux необходимо использовать скрипты с расширением .alt.sh (при отсутствии в дистрибутиве скрипта
под конкретную ОС
Описание прав linux-пользователей, которые создаются скриптами подготовки - prep-syslog-ng.sh, prep-rds-server.sh
, prep-keycloak.sh, prep-iamproxy.sh, prep-deployers-dev.sh,prep-deployers.sh,prep-fluent-bit.sh
, prep-vault-agent.sh.
Учетная запись |
Описание полномочий и функциональности |
Объекты доступа |
|---|---|---|
syslog-ng |
Чтение и запись объектов, управление службой syslog-ng |
/etc/syslog-ng |
/var/log/syslog-ng |
||
/var/lib/syslog-ng |
||
/var/run/syslog-ng |
||
/usr/share/syslog-ng |
||
/tmp/audit2" |
||
rds-server |
Чтение и запись объектов, управление службой rds-server |
/opt/rds-server |
keycloak |
Чтение и запись объектов, управление службой keycloak |
/opt/keycloak-se |
iamproxy |
Чтение и запись объектов, управление службой iamproxy |
/opt/iamproxy |
deployer |
Права запуска команд под пользователем службы |
users: syslog-ng, rds-server, keycloak, nginx, fluent-bit, vault |
fluent-bit |
Чтение и запись объектов, управление службой syslog-ng |
/etc/fluent-bit |
/etc/fluent-bit/ssl |
||
/var/log/fluent-bit |
||
vault |
Чтение и запись объектов, управление службой vault-agent и подключением tmpFS в каталог /opt/vault/secrets |
/opt/vault |
Запуск скриптов используя ansible-playbook#
Необходимо подготовить job в Jenkins, как описано выше в разделе "Создание в Jenkins задачи по установке".
При запуске подготовки все параметры указываем так же, как и при основном развертывании, за исключением параметров:
в
PLAYBOOKвыбирается значениеplatformauth-system-prepare-playbook.yml;в
SSH_USERвыбираетсяJenkins credentialс закрытым ssh-ключом учетной записи для подключения к хостам по ssh, данная учетная запись должна иметь привилегииsudo rootна всех серверах на которые будет производиться установка.
Если нет потребности использовать Jenkins, то можно запустить и без него. Пример запуска playbook из командной строки:
cd ansible
ANSIBLE_STDOUT_CALLBACK="debug" && \
ansible-playbook platformauth-deploy-playbook.yml \
-i inventories/StendX/hosts \
--vault-password-file ~/vault-password.txt \
--extra-vars "deploy_platformauth_version=D-01.000.03-1.0.1 tmp_clear=True ansible_user=myusername ansible_password= ansible_ssh_private_key_file=~/.ssh/mykey.pem"
Запуск скриптов вручную#
В случае невозможности использовать ansible для запуска скриптов под привилегированным пользователем, их можно выполнить вручную на каждом сервере из консоли.
Пример установки скриптов:
# На сервера из списка(на все сервера сервиса) скопировать из дистрибутива файл system-prepare.zip и из каталога с этим архивом
# выполнить следующие команды (под пользователем root):
sudo yum -y install unzip
unzip system-prepare.zip -d /tmp && cd /tmp/system-prepare
chmod a+x *.sh
sudo ./prep-deployers.sh
# сервера keycloak:
# На данных серверах выполнить
sudo ./prep-keycloak.sh
# сервера iamproxy, syslog-ng:
# На данных серверах выполнить
sudo ./prep-iamproxy.sh
sudo ./prep-rds-client.sh
sudo ./prep-syslog-ng
Запуск развертывания сервиса на стенд#
Необходимо подготовить job в Jenkins, как описано выше в разделе "Создание в Jenkins задачи по установке".
Откройте job по установке, и нажимаем "Собрать с параметрами".
Заполните параметры сборки:
STAND, наименование стенда, то естьinventoryдляansible(это имя папки вansible/inventories/, напримерStendX);PLATFORMAUTH_VERSION, версия устанавливаемого артефакта дистрибутива компонента AUTH размещенного в Nexus;PLAYBOOK, выбираем playbookplatformauth-deploy-playbook.yml;
Нажать "Собрать" и ожидать завершения задачи.
Если выполнение задачи завершилось успешно, то проверьте работоспособность развернутого стенда.
Для проверки работоспособности можно пойти на корневую страницу IAM Proxy по ссылке
https://<iam_proxy_hostname>:<proxy_https_port>/,
где:iam_proxy_hostname - FQDN IAM Proxy (параметр профиля
proxy_dnsname);proxy_https_port - порт, определенный в профиле развертывания (параметр
lb_https_port).
Если все успешно, то должны получить примерно такую страницу:

Обратите внимание, что при развертывании IAM Proxy с использованием аутентификации на Identity Provider, необходимо будет пройти аутентификацию и ввести учетные данные на IDP, а потом уже можно будет попасть на корневую страницу.
Развертывание так же возможно из командной строки вручную, пример:
cd ansible ansible-playbook platformauth-deploy-playbook.yml \ -i inventories/StendX/hosts \ --vault-password-file ~/vault-password.txt \ --extra-vars "deploy_platformauth_version=D-01.000.03-1.0.1 tmp_clear=True"
Загрузка ролевой модели сервиса в Объединенный сервис авторизации (ОСА)#
Для того чтобы назначать пользователю роли (в частности роль функционального администратора сервиса аутентификации) необходимо добавить их в ролевую модель Объединенного сервиса авторизации (ОСА), для этого выполните следующие шаги:
Создайте в Объединенном сервисе авторизации (ОСА) модуль с именем
platformauth.Импортируйте в модуль ролевую модель из файла (файл из дистрибутива
keycloak\config\roleModel_platformauth.xml).
Полный переход на работу через сервис аутентификации платформы#
Работая с платформой с доступом к ресурсам приложений используйте проксирование через сервис аутентификации
(компонент IAM Proxy), а в приложениях используйте прямую интеграцию с Open ID Connect провайдером платформы (
компонент KeyCloak.SE).
Объединение разделенного дистрибутива#
В случае получения поставки в виде разделенного дистрибутива, и если потребуется восстановить дистрибутив из
разделенного на owned и 3rd-party части, необходимо для объединения использовать job jenkins, идущую в поставке.
Данный job загружает из Nexus\URL две части (owned и 3rd-party), объединяет их, и выгружает объединенный
дистрибутив в Nexus\URL.
Файл ее конфигурации находится в дистрибутиве по
пути: deploy/tools/import-job-to-jenkins/config_Inject3rdParty_Job.xml
Параметры job#
Параметр |
Описание |
|---|---|
NEXUS_DOWNLOAD_CREDS |
Credentials для скачивания разделенного дистрибутив |
OWNED_PART_DOWNLOAD_URL |
Полный URL к owned-части разделенного дистрибутива |
NEXUS_UPLOAD_CREDS |
Credentials для закачивания восстановленного дистрибутива |
NEXUS_UPLOAD_URL |
Корневой URL NEXUS, куда закачиваем дистрибутив (часть до groupId) |
UPLOAD_ARTIFACT_GROUP_ID |
groupId полного восстановленного дистрибутива |
UPLOAD_ARTIFACT_ID |
artifactId восстановленного дистрибутива |
UPLOAD_DISTRIB_VERSION |
Версия восстановленного дистрибутива |
UPLOAD_CLASSIFIER |
classifier восстановленного дистрибутива |
CLEANUP |
Очистить директорию после выполнения job |
Описание работы job#
По переданному URL (OWNED_PART_DOWNLOAD_URL), в коде job за счет замены подстроки
owned-distrib.zipнаparty-distrib.zipи наowned.pom, произойдет скачивание owned-части, party-части и pom-файлов.Запустится процесс слияния owned-части и party-части дистрибутива средствами утилиты inject3rdParty. Далее запустится процесс дополнительного слияния owned-части и party-части дистрибутива с помощью отдельного sh-скрипта.
Выполнится выгрузка восстановленного дистрибутива по указанным параметрам в Nexus.
Соответствие имен параметров для разных сред и инструментов установки#
Для определения параметров в дистрибутиве присутствуют файлы примеров настроек, которые требуется заполнить необходимыми
значениями под конкретный стенд, с учетом требований к системе и используемой инфраструктуры. Файлы примера настроек для
установки IAM Proxy на VM(профиль для ansible)
располагаются в файлах bin-дистрибутива в папке package/deploy/ansible/inventories/DemoProfile/group_vars.
Файлы примера настроек для установки IAM Proxy в OpenShift (с использованием утилит Platform V DevOps Tools CDJE)
располагаются в файле cfg-дистрибутива в папке package/conf/config/parameters.
Описание и соответствие параметров настройки приведены в таблице ниже.
Параметры для контейнера (переменные environment) |
Параметры для Platform V DevOps Tools CDJE (установка в OpenShift) |
Параметры для профиля ansible (установка на VM) |
Описание параметра |
|---|---|---|---|
STEND_NAME |
auth.k8s.stand_name |
stend_name |
Название стенда\сервиса для отображения в UI |
STEND_ABBR |
auth.k8s.stand_abbr |
stend_abbr |
Используется для обозначения стенда в тех.названиях (латиница в нижнем регистре) |
STEND_TYPE |
auth.k8s.stand_type |
stend_type |
Тип стенда. Допустимы следующие значения: |
PROXY_SESSION_SECRET |
iamproxy.k8s.secret.PROXY_SESSION_SECRET |
proxy_session_secret |
Секретный ключ для шифрования сессий прокси (произвольный набор символов или мнемофраза на латинице, рекомендуется длина не менее 512 символов) |
PROXY_SESSION_IDLETIME |
iamproxy.k8s.session_idletime |
proxy_session_idletime |
Опциональный. Время жизни сессии прокси по не активности в минутах (по умолчанию 180 минут) |
PROXY_SESSION_CHECK_ADDR |
iamproxy.k8s.session_check_addr |
proxy_session_check_addr |
Включаем привязку сессии к клиентскому IP |
PROXY_SESSION_NAME |
iamproxy.k8s.session_name |
proxy_session_name |
Опциональный. По умолчанию имеет значение ``. Имя домена для сессионной cookie (может потребоваться при CORS запросах). Значение '…' позволяет задать родительский домен от фронтового fqdn. Применяется только если в |
PROXY_SESSION_DOMAIN |
iamproxy.k8s.session_domain |
proxy_session_domain |
Опциональный. По умолчанию имеет значение ``. Имя домена для сессионной cookie (может потребоваться при CORS запросах). Значение '…' позволяет задать родительский домен от фронтового fqdn. Применяется только если в |
CORS_HEADER_CONTENT_SECURITY_POLICY |
iamproxy.k8s.cors.header_content_security_policy |
cors_header_content_security_policy |
Опция определяющая содержимое заголовка |
PROXY_WORKER_PROCESSES |
iamproxy.k8s.worker_processes |
proxy_worker_processes |
Сколько worker-процессов прокси(Nginx) запустить для обработки соединений (по умолчанию auto, и будет равно кол-ву CPU) |
SYSLOG_SERVER |
auth.k8s.syslogng.enabled |
proxy_to_syslog_server |
Сервер:порт для отправки событий аудита по протоколу syslog (в IAM это syslog-ng) |
PROXY_JCT_SSL_NAME |
iamproxy.k8s.jct_ssl_name |
proxy_jct_ssl_name |
По умолчанию при проверке сертификата на проксируемом сервере считаем валидные CN\SAN (из сертификатов backend) c |
DEBUG |
auth.k8s.debug.enabled |
debug |
Включает отладку |
PROXY_METRICS_ENABLE |
auth.k8s.monitoring.enabled |
proxy_metrics_enable |
Опциональный. |
PROXY_HEALTCHECK_ENABLE |
iamproxy.k8s.healthcheck_enable |
proxy_healtcheck_enable |
Опциональный. |
PROXY_SUPPORT_ISAM_HEADERS |
iamproxy.k8s.support_isam_headers |
proxy_support_isam_headers |
Опциональный. |
PROXY_SUPPORT_CUSTOM_CONFIGS |
iamproxy.k8s.support_custom_configs |
proxy_support_custom_configs |
Опциональный. |
PROXY_X_FORWARDED_PORT |
iamproxy.k8s.x_forwarded_port |
proxy_x_forwarded_port |
Опциональный. |
PROXY_X_FORWARDED_PROTO |
iamproxy.k8s.x_forwarded_proto |
proxy_x_forwarded_proto |
Опциональный. |
WAIT_EXIST_FILES |
Опциональный. Список файлов через пробел, появления которых необходимо дождаться перед запуском прокси. К примеру это может понадобиться, когда файлы сертификатов доставляются до pod отдельным процессом\контейнером\sidecar, и на момент запуска IAM Proxy файлов еще не будет, и нужно будет дождаться их появления, а потом начать старт IAM Proxy |
||
PROXY_LIMIT_PER_IP_ENABLE |
iamproxy.k8s.limit_per_ip_enable |
proxy_limit_per_ip_enable |
Опциональный. |
PROXY_LIMIT_PER_SESSION_ENABLE |
iamproxy.k8s.limit_per_session_enable |
proxy_limit_per_session_enable |
Опциональный. |
PROXY_LIMIT_REQ_PER_SEC |
iamproxy.k8s.limit_req_per_sec |
proxy_limit_req_per_sec |
Опциональный. Количество запросов в секунду, по умолчанию равен 60. Ограничение скорости запросов на backend в количестве запросов допустимых в секунду (допускается всплеск запросов по кол-ву в 4 раза превышающий заданный лимит по r/s, запросы в пределах всплеска будут на время задерживаться, чтобы соблюсти заданную скорость, а по превышению всплеска запросы будут отклоняться с HTTP-кодом 509) |
PROXY_LIMIT_REQ_OIDC_PER_MIN |
iamproxy.k8s.limit_req_oidc_per_min |
proxy_limit_req_oidc_per_min |
Запросов/минуту, опциональный, default 2, ограничение скорости запросов по сессии прокси к функциональности OIDC(обращения к провайдеру Open ID Connect) в максимально допустимом количестве запросов в минуту (допускается всплеск в кол-ве 10 запросов, по превышению всплеска запросы будут отклоняться с HTTP-кодом 509) |
PROXY_OIDC_CLIENT_ID |
iamproxy.k8s.secret.PROXY_OIDC_CLIENT_ID |
proxy_oidc_client_id |
Используемый на прокси |
PROXY_OIDC_CLIENT_SECRET |
iamproxy.k8s.secret.PROXY_OIDC_CLIENT_SECRET |
proxy_oidc_client_secret |
Секрет OIDC-клиента |
PROXY_TO_BACKEND_ACCESS_TOKEN |
iamproxy.k8s.backend_access_token |
proxy_to_backend_access_token |
|
PROXY_SSL_SESSION_CACHE |
iamproxy.k8s.proxy_ssl_session_cache |
proxy_ssl_session_cache |
Опциональный. По умолчанию имеет значение |
PROXY_KEEPALIVE_TIMEOUT |
iamproxy.k8s.proxy_keepalive_timeout |
proxy_keepalive_timeout |
Опциональный. По умолчанию имеет значение 180 170, параметр |
PROXY_DNSNAME |
iamproxy.k8s.front.https.host |
proxy_dnsname |
DNS-имя сервиса IAM Proxy, используемое с front-end\браузера\LB при обращении к прокси |
LB_HTTPS_PORT |
iamproxy.k8s.lb_https_port |
lb_https_port |
Порт, используемый с front-end\браузера\LB при обращении к прокси по PROXY_DNSNAME |
KEYCLOAK_ADMIN_DNS_NAME |
iamproxy.k8s.keycloak.admin_dns_name |
DNS-имя сервиса Keycloak для административного интерфейса, используемое с front-end\браузера\LB при обращении к прокси |
|
KEYCLOAK_HTTPS_ADMIN_PORT |
iamproxy.k8s.keycloak.https_admin_port |
keycloak_https_admin_port |
Порт к |
OIDC_SSL_VERIFY |
auth.k8s.ssl.verify.enabled |
oidc_ssl_verify |
Определяет необходимость верификации сертификата сервисов OIDC на IDP провайдере. |
OIDC_DISCOVERY_URL |
iamproxy.k8s.oidc.discoveryUrl |
oidc_discovery_url |
Задание URL метаданных OIDC IDP (например, |
OIDC_LOGOUT_URI |
iamproxy.k8s.oidc.logoutUri |
oidc_logout_uri |
Задание URL на который делать redirect при logout (например, |
OIDC_CLIENT_RSA_PRIVATE_KEY |
iamproxy.k8s.oidc.client_rsa_private_key |
oidc_client_rsa_private_key |
Аутентификация на IDP методом |
OIDC_POST_LOGON_BY_TOKEN_CALL_URI |
iamproxy.k8s.oidc.post_logon_by_token_call_uri |
oidc_post_logon_by_token_call_uri |
Вызвать endpoint на IDP после восстановления по токену сессии на прокси |
OIDC_POST_LOGOUT_REDIRECT_PATH |
iamproxy.k8s.oidc.post_logout_redirect_path |
oidc_post_logout_redirect_path |
По умолчанию |
OIDC_SCOPE |
iamproxy.k8s.oidc.scope |
oidc_scope |
Задание дополнительных скоупов OIDC при аутентификации |
OIDC_USE_IDP_PROVIDER |
iamproxy.k8s.use_idp_provider |
oidc_use_idp_provider |
Вход на Keycloak через заранее указанного внешнего провайдера |
OIDC_USE_CLIENT_CERT |
iamproxy.k8s.use_client_cert |
oidc_use_client_cert |
|
OIDC_HOST_GRAY |
iamproxy.k8s.oidc.host_gray |
oidc_host_gray |
Использовать для подключения к OIDC IDP отдельный ip:port, а не тот который в URL из OIDC_DISCOVERY_URL (может потребоваться при необходимости использовании серых адресов IDP, для включения также необходимо выставить |
OIDC_USE_PKCE |
iamproxy.k8s.oidc.use_pkce |
oidc_use_pkce |
|
OIDC_USERNAME_ATTR |
iamproxy.k8s.oidc.username_attr |
oidc_username_attr |
Какой атрибут из jwt-токена использовать в качестве имени\логина пользователя, и будет использоваться в логах, в header |
OIDC_CHANGE_ORG_ENDPOINT |
iamproxy.k8s.oidc.change_org_endpoint |
oidc_change_org_endpoint |
Ссылка на endpoint смены организации на IDP (реализован на KCSE в провайдере ЕСИА). При его вызове передаются параметры |
OIDC_POST_CHANGE_ORG_ENDPOINT |
iamproxy.k8s.oidc.post_change_org_endpoint |
oidc_post_change_org_endpoint |
Ссылка, на которую будет перенаправление после успешной смены организации на IDP. Пример: |
OIDC_MAP_HEADERS |
iamproxy.k8s.oidc.map_headers |
oidc_map_headers |
Добавить HTTP-заголовки по токену, пример: |
OIDC_MAP_ROLES |
iamproxy.k8s.oidc.map_roles |
oidc_map_roles |
Задать мапинг получения ролей из токена, пример: |
OIDC_USERINFO_MAP |
iamproxy.k8s.oidc.userinfo_map |
oidc_userinfo_map |
Задать мапинг получения части |
OIDC_ACCESS_TOKEN_EXPIRES_LEEWAY_RAND |
iamproxy.k8s.oidc.acces_token_expires_leeway_rand |
oidc_access_token_expires_leeway_rand |
За сколько секунд до истечения access-токена обновить токены (реальное количество секунд будет выбрано случайным образом от этого числа, а ошибка обновления будет проигнорирована если access-токен действителен). Можно указать проценты от времени действия access-токена, например 20% или 0.2 |
OIDC_REVOKE_TOKENS_ON_LOGOUT |
iamproxy.k8s.oidc.revoke_tokens_on_logout |
oidc_revoke_tokens_on_logout |
|
OIDC_DISABLE_LOGOUT_IN_IDP |
iamproxy.k8s.oidc.disable_logout_in_idp |
oidc_disable_logout_in_idp |
|
OIDC_IGNORE_SSO_ON_IDP |
iamproxy.k8s.oidc.ignore_sso_on_idp |
oidc_ignore_sso_on_idp |
|
OIDC_REUSE_REFRESH_COUNT |
iamproxy.k8s.oidc.reuse_refresh_count |
oidc_reuse_refresh_count |
Опциональный, по умолчанию |
AUTHZ_SPAS_URL |
iamproxy.k8s.authz.spas_url |
authz_spas_url |
URL для обращения в API SPAS/ОСА. Пример: |
AUTHZ_SPAS_SECRET |
iamproxy.k8s.authz.spas_secret |
authz_spas_secret |
Псевдосекрет для вызова API SPAS. Пример: 123456 |
AUTHZ_SPAS_TICKET_LIFETIME |
iamproxy.k8s.authz.spas_tickeet_lifetime |
authz_spas_ticket_lifetime |
Частота обновления тикета ОСА/SPAS, в сек. Пример: 3600 |
AUTHZ_SPAS_TICKET_FAILED_LIFETIME |
iamproxy.k8s.authz.spas_tickeet_failed_lifetime |
authz_spas_ticket_failed_lifetime |
Частота получения тикета ОСА/SPAS, если ранее попытка была неуспешной, в сек. Пример: 5 |
AUTHZ_SPAS_RIGHTS_LIFETIME |
iamproxy.k8s.authz.spas_tickeet_rights_lifetime |
authz_spas_rights_lifetime |
Частота обновления полномочий из ОСА/SPAS, в сек. Пример: 60 |
AUTHZ_SPAS_RIGHTS_FAILED_LIFETIME |
iamproxy.k8s.authz.spas_tickeet_rights_filed_lifetime |
authz_spas_rights_failed_lifetime |
Частота обновления полномочий из ОСА/SPAS, если ранее попытка была неуспешной, в сек. Пример: 5 |
AUTHZ_SPAS_SSL_VERIFY |
iamproxy.k8s.authz.spas_ssl_verify |
authz_spas_ssl_verify |
Проверять сертификат на |
AUTHZ_OPA_URL |
iamproxy.k8s.authz.opa_url |
authz_opa_url |
URL для вызова API OPA. Пример |
AUTHZ_OPA_SSL_VERIFY |
iamproxy.k8s.authz.opa_ssl_verify |
authz_opa_ssl_verify |
Проверять сертификат на endpoint |
READ_DATA_FROM_RDS_TIME_IN_SEC |
iamproxy.k8s.rdsserver.read_data_from_rds_time_in_sec |
read_data_from_rds_time_in_sec |
Частота опроса RDS-серверов на наличие изменений. Пример: 10 |
PROXY_LOG_TO_FLUENT_BIT_ACCESS_LOG |
logger_options.proxy_access_log |
Опциональный. путь до файла access-логов отправляемых через fluent-bit (можноуказать сервер-syslog, например |
|
PROXY_LOG_TO_FLUENT_BIT_ERROR_LOG |
logger_options.proxy_error_log |
Опциональный. путь до файла error-логов отправляемых через fluent-bit (можно указать сервер-syslog, например |
|
logger_options.rds_client_log_dir |
Опциональный. По умолчанию |
||
PROXY_ROTATE_FILES |
proxy_rotate_files |
Опциональный. Полные пути до файлов логов (через запятую), которые надо ротировать |
|
PROXY_ROTATE_FILE_SIZE |
proxy_rotate_file_size |
Опциональный. По умолчанию |
|
PROXY_ROTATE_TOTAL_SIZE |
proxy_rotate_total_size |
Опциональный. По умолчанию |
|
PROXY_REQUEST_TO_UI_REGEX |
iamproxy.k8s.request_to_ui_regex |
proxy_request_to_ui_regex |
Опциональный. По умолчанию |
PROXY_REQUEST_TO_API_REGEX |
iamproxy.k8s.request_to_api_regex |
proxy_request_to_api_regex |
Опциональный. По умолчанию |
CORS_ALLOW_ORIGINS |
iamproxy.k8s.cors.allow_origins |
cors_allow_origins |
Опциональный. По умолчанию разрешены источники дочерние от fqdn IAM Proxy. Опция задает регулярное выражение определяющее разрешенные источники запроса при CORS (проверка на точное совпадение с заголовком |
CORS_ALLOW_METHODS |
iamproxy.k8s.cors.allow_methods |
cors_allow_methods |
Опциональный. По умолчанию значения |
CORS_ALLOW_HEADERS |
iamproxy.k8s.cors.allow_headers |
cors_allow_headers |
Опциональный. По умолчанию значения |
PROXY_LIMIT_REQ_JCT_IS_PER_SESSION |
proxy_limit_req_jct_is_per_session |
По умолчанию |
Примечания#
Параметры влияющие на безопасность отмечены по тексту примечанием - (параметр, влияющий на безопасность).