Установка#

Введение#

В разделе описывается установка IAM Proxy на виртуальную машину.

Установка IAM Proxy в среду контейнеризации OpenShift описана в разделе IAM Proxy в контейнере.

Установка сервиса состоит из следующих основных этапов:

  1. Подготовка окружения.

  2. Создание или изменение профиля развертывания.

  3. Подготовка и заполнение конфигурационных артефактов.

  4. Развертывание job на сервере CI Jenkins.

  5. Непосредственно выполнение развертывания.

  6. Проверка результатов развертывания.

Подготовка окружения#

Получить сервера на базе ОС 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_geo1, keycloak_geo2

KeyCloak, модуль аутентификации (keycloak_geo1 min 1 ip)

node1.platformauth-devb.mycompany.mycompany.ru

proxy_geo1, proxy_geo2

Proxy, модуль проксирования (proxy_geo1 min 1 ip)

node1.platform-devb.mycompany.mycompany.ru

syslogng_geo1, syslogng_geo2

Syslog-ng, модуль событий аудита (syslogng_geo1 min 1 ip, syslogng_geo* max 1 ip)

10.x.x.99

loadbalancer_for_proxy

soft-балансировщик для Proxy, обычно необходим на стендах тестирования, и может быть заменен на hw-балансировщик (min 0 ip, max 1 ip)

10.x.x.10

loadbalancer_for_keycloak

soft-балансировщик для KeyCloak, обычно необходим на стендах тестирования, и может быть заменен на hw-балансировщик (min 0 ip, max 1 ip)

10.x.x.11

rds_server_geo1, rds_server_geo2

Route Discovery Service, модуль управления маршрутами для прокси (min 0 ip)

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> Где значения в <...> описаны ниже:

Значение

Пример

Описание

node_name

node1

Опционально. Используется при количестве серверов более одного. Наименование и порядковый номер node на стенде (включает в себя наименование структурного компонента)

component_name

rds

Наименование компонента/сервиса IAM для которого создается dns-имя

product_code

cfge

Код продукта (название продукта/компонента в котором развертывается IAM Proxy)

stand_code

dev3

Код и номер стенда

dns_zone

my.company.ru

Наименование зоны в которой планируется создание записи

Пример: node1.rds.cfge-dev3.my.company.ru

Шаблон является необязательным и носит рекомендательный характер.

Заполнение файла ansible/inventories/StendX/group_vars/all/main.yml#

Здесь описываются основные параметры развертываемого сервиса.

Параметр

Описание

Пример

nexus_repo_url

Задать репозиторий в котором размещен дистрибутив сервиса

пример для Nexus - <https://nexus.my.company.ru/nexus/content/repositories/Nexus_PROD> )

nexus_artifact_id

Задать имя артефакта дистрибутива

для Nexus - 0000000000_PLATFORMAUTH

nexus_classifier

Задать класс артефакта (необязательный параметр, задается значение distrib при получении дистрибутива из Nexus MYCOMP)

nexus_url_username

nexus_url_password - задать под кем аутентифицироваться в Nexus (если данные конфиденциальны, вынести их в файл ansible/inventories/StendX/group_vars/all/vault_main_decrypted.yml)

ansible_user

Задать пользователя, под которым будут выполняться задачи по установке на целевых серверах

stend_type

Задать тип стенда. Допустимы следующие значения: dev, ift, psi, prom, nt (по умолчанию psi)

stend_abbr

Префикс для технических названий (например используется в шаблоне DNS-имен)

stend_name

Понятное название стенда для отображения в UI

stend_display_name

Понятное название АС установленной на стенде для отображения в UI (по умолчанию Platform V, используется при регистрации событий аудита для заполнения поля АС)

keycloak_dnsname

DNS-имя балансировщика для frontend KeyCloak. Данный параметр может вычисляться по шаблону

proxy_dnsname

DNS-имя балансировщика для frontend Proxy. Данный параметр вычисляется пошаблону (platform-stendx.my.company.ru, для пром platform.my.company.ru), и менять в нем может понадобиться толькосуффикс .my.company.ru. Для PCI DSS например это будет .pcidss.my.company.ru

proxy_system_user

Логин системного пользователя, под которым будут работать процессы прокси и балансировщика

proxy_use_configuration_from_rds

Получать конфигурацию ответвлений из RouteDiscoveryService (установкаrds-client рядом с прокси)

proxy_oidc_client_id

Id клиента/системы на провайдере Open ID Connect, и в случае использования Keycloak обычно равно "PlatformAuth-Proxy"

proxy_oidc_client_secret

Опциональный, пароль для аутентификации на провайдере Open ID Connect, в случае настройки Keycloak развертыванием, этот параметр не задается и будет получен автоматически развертыванием из Keycloak. :warning: Влияет на безопасность

rds_server_urls

Указывается список URL rds-серверов через «;» по которым отдается активная конфигурация, используется клиентская failover-балансировка

rds_client_keyAlias

Алиас клиентского сертификата для rds-client из файла proxy-server.p12 (из rds_client_keyStore)

audit2_options

Параметры отправки событий в Platform V Audit (java опции)


Пример задания audit2_options:
audit2_options:
- { name: "zookeeper.connecting.string", value: "10.x.x.260:2181,10.x.x.262:2181" }
- { name: "kafka.producer.bootstrap.servers", value: "10.x.x.252:19092,10.x.x.256:19092" }
- { name: "kafka.producer.acks", value: "1" }
- { name: "buffer.maxSize", value: "1000000" } - { name: "buffer.directory", value: "/tmp/audit2" }

Заполнение раздела с описанием параметров ответвлений(junction) в "proxy_jct_list"#

В этой группе параметров необходимо задать описание параметров маршрутизации запросов на защищаемые сервисы, на который/которые будет осуществляться проксирование. Данный раздел - это список с произвольным количеством элементов/объектов, где каждый элемент описывает параметры проксирования на конкретный backend (указываются все backend с front-UI, имеющиеся на стенде).

Параметр

Описание

Пример

junctionName

Задать понятное описание для отображения ответвления сервиса на технической странице IAM Proxy. На стартовой странице IAM Proxy возможно объединить сервисы в раскрывающиеся группы, путем использования /

junctionName: MyGroup/Example, где MyGroup имя группы, а Example имя ответвления

description

Задать расширенное описание проксируемой подсистемы/сервиса на технической странице IAM Proxy

junctionPoint

Корневой контекст запросов, по которому будет определяться принадлежность запроса к конкретной подсистеме/backend, и в какой backend будет проксироваться запрос

junctionPoint: /company

indexUrl

URL относительно корня на backend, по которому осуществляется основной вход в UI подсистемы. Пустое значение или - позволяет не показывать ссылку/ответвление на стартовой странице IAM Proxy. Данный параметр используется исключительно для формирования ссылки на стартовой странице IAM Proxy, и не оказывает влияния на функциональность проксирования

indexUrl: /admin

transparent

"Прозрачность" url (необязателен, default False). True - при проксировании запросы будут проходить без изменения URL. URL введенный в адресной строке браузера будет совпадать с URL который придет в HTTP-запросе на backend(на сервер приложения). False - значение из junctionPoint будет вырезано из URL запросов, и вставлено в URL-ы контента ответов

transparent: True

https, True

Использование SSL на серверах backend (необязателен,default True)

sslCommonName

Шаблон/значение имени из CN сертификата backend-серверов, используется при соединении с backend по HTTPS. Значение "*" - отключает проверку SSL. (необязателен, default .mycompany.ru)

sslCommonName: .ourcompany.ru

serverAddresses

Список серверов (сервер:порт), на которые будут проксироваться/балансироваться запросы для данного контекста junctionPoint

Пример: [ "test-host.mycompany.ru:8080" , "test-host.mycompany.mycompany.ru:8080"]

applyJctRequestFilter

Указание дополнительных опций или конфигурационных файлов, применяемые к данному junctionPoint, которые необходимо применить к данному контексту. Варианты значений опций можно посмотреть в разделе настройки через компонент PACMAN (CFGA) продукта Platform V Configuration (CFG)

"common/rds-ssl-sni-on.server.conf" - включаем передачу имени сервера из sslCommonName через SNI

authorizeByRoleTemplate

Шаблон (регулярное выражение) авторизации ролей пользователя. Пул ролей по которым осуществляется доступ к junction формируется из ID токена общими ролями (роли Realm. Атрибуты: id_token.realm_access.roles или id_token.roles или id_token.groups) и ролью client (атрибут:id_token.resource_access[текущий client].roles)

EFS_.*

Пример прохождения запроса по "непрозрачному" ответвлению

Когда transparent=false и junctionPoint=/jct-point, то URL будет меняться следующим образом:
Запрос: Browser (URL https://my.com/jct-point/myindex.html) -> IAM.Proxy -> BackEnd (URL https://my.com/myindex.html)
Ответ: BackEnd (body html:href: https://my.com/mysubpage.html) -> IAM.Proxy -> Browser (body html: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 на Keycloak

  • keycloak_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_autoload_trusted_certificates - выставить необходимость автоматически загружать trusted-сертификаты с HTTPS-серверов backend при развертывании. При False нужно вручную для всех серверов backend размещать их сертификаты в папке ansible/inventories/StendX/files с префиксом trusted_ и расширением crt.pem (сертификаты д.б. в формате PEM).

  • proxy_session_idletime - время таймаута сессии прокси по не активности (в секундах) - устанавливаем значение в 30 минут.

  • proxy_session_name - опциональный, по умолчанию PLATFORM_SESSION, задает имя сессионной cookie

  • proxy_session_check_addr - включаем привязку сессии к IP (True/False, default False).

  • proxy_to_backend_access_token - опциональный, True - передавать в backend access_token вместо id_token.

  • proxy_mtls_key_file - файл ключа сертификата прокси, для организации mTLS между прокси и проксируемой подсистемой/backend. Не обязательный.

  • proxy_mtls_cert_file - файл сертификата прокси, для организации mTLS между прокси и проксируемой подсистемой/backend. Не обязательный.

  • proxy_session_secret- Секрет используемый для шифрования сессии nginx (длинна д.б. > 100 символом, и НЕ должно содержать символов '\$

  • proxy_jct_ssl_name - по умолчанию при проверке сертификата на проксируемом сервере считаем валидные CN/SAN(из сертификатов backend) c таким доменом/host.

  • proxy_session_check_addr: True - опциональный, умолчание False, привязка сессии прокси к клиентскому IP.

  • proxy_to_backend_access_token - опциональный, True - передавать в backend access_token вместо id_token.

  • proxy_jct_ssl_name - по умолчанию при проверке сертификата на проксируемом сервере считаем валидные CN\SAN(из сертификатов backend) c таким доменом/host.

  • proxy_to_syslog_server - удаленное логгирование событий из Nginx.

  • proxy_healtcheck_enable - True/False, опциональный, default False, True - включение активного healtcheck до серверов backend (ответвления в которых есть строка /rds-healthcheck в applyJctRequestFilter), будет вызов GET /healtcheck каждые 10 сек., и ожидается в ответе HTTP-код 200/302 для живого узла (статус доступен по url http://127.0.0.1:10080/status-healtcheck/)

  • proxy_keepalive_timeout - timeout [header_timeout], опциональный, default 180 170, параметр (timeout) ограничивающий время клиентских keepalive соединений, второй параметр (header_timeout) попадет в заголовок ответа в формате: Keep-Alive: timeout=header_timeout (по умолчанию будет заголовок Keep-Alive: timeout=170)

  • proxy_ssl_session_cache - опциональный, default none, настройка использования 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 - опциональный, проверять сертификат на endpoint authz_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_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_ansible_ssh_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 - Секрет используемый для шифрования сессии nginx (длинна д.б. > 100 символом, и НЕ должно содержать символов '\$" ).

      Содержимое параметра - это случайный набор символов, который можно сгенерировать как вручную, так и какими-то утилитами. Необходимо учесть, что сгенерированная последовательность должна состоять из печатных символов ASCII (за исключением символов '\$"), не должна содержать невидимых символов или символов управления(например, символов переноса строк). Одним из возможных вариантов генерации подобной последовательности на Unix-совместимой станции является использование следующей команды в терминале (или консоли bash):
      head /dev/urandom | LC_ALL=C tr -dc "(-[]-~" | head -c 512

    • vault_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, в каталог /usr/local/openresty/. Файлы *.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#

Доменные имена прокси и провайдера идентификации platform-stendx.my.company.ru , platformauth-stendx.my.company.ru необходимо зарегистрировать в вашем DNS, указав для них IP-адреса балансировщиков(или IP самого сервера если он один) для прокси и провайдера идентификации(keycloak) соответственно. Для корректного функционирования решения достаточно заведения в 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 установщика.

Создание задачи:

  1. Найти Jenkins-файл в дистрибутиве: deploy/jenkins/PlatformAuth_CDL.jenkinsfile.

  2. Скопировать Jenkins-файл в тот же Git-репозиторий (например в папку jenkins/), где размещаются профили развертывания. В Jenkins-файл правим по желанию значения в defaultValue секции parameters{} под свой стенд, чтобы не вводить их потом каждый раз.

  3. Перейти в Jenkins и создать Jenkins job c типом Pipeline\<img height="300px" src="resources/new_item.png" /><img height="300px" src="resources/pipeline.png"/>.

  4. В блоке Pipeline, в поле Definition необходимо выбрать Pipeline script from SCS, затем в поле SCM выбрать GIT.

  5. В поле Repository URL указываем ссылку на Git-репозиторий из п.2.

  6. В поле Credentials указываем учетную запись которая имеет доступ на чтение к Git-репозиторию.

  7. Прописываем git-ветку в поле Branch Specifier, в Script Path относительный путь до Jenkins-файла ( например jenkins/PlatformAuth_CDL.jenkinsfile) и нажимаем Сохранить.

  8. Нажимаем кнопку Собрать сейчас. Сборка возможно будет с ошибкой, но это нормально. На этом этапе Jenkins job добавит необходимые параметры запуска из Jenkins-файла, и при следующем запуске они появятся в job.

  9. После обновления страницы появится кнопка Собрать с параметрами, по которой можно будет запустить сборку с параметрами:

    • 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_ansible_ssh_pass). Так же пароль можно указать при запуске prep-deployers.sh в первом параметре или в переменной окружения deployer_pass (параметр, влияющий на безопасность), если пароль не указан при запуске он будет запрошен в терминале;

  • prep-keycloak.sh - выполняется на всех серверах группы keycloak;

  • prep-nginx.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-nginx.sh - выполняется на всех серверах группы proxy;

  • prep-vault-agent.sh - выполняется на всех серверах группы loadbalancer;

  • unprep-all.sh - удалить все установленные ранее компоненты сервиса, и все преднастройки;

Примечания:

Файл дистрибутива system-prepare.zip содержит все файлы необходимые для подготовки серверов к установке (файлы, скрипты, пакеты необходимые для установки), и для подготовки серверов необходимо использовать его.

При ручной установке важен порядок запуска скриптов.

Описание прав linux-пользователей, которые создаются скриптами подготовки - prep-syslog-ng.sh, prep-rds-server.sh , prep-keycloak.sh, prep-nginx.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

nginx

Чтение и запись объектов, управление службой nginx

/usr/local/openresty

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

# сервера nginx, syslog-ng:
# На данных серверах выполнить
sudo ./prep-nginx.sh
sudo ./prep-rds-client.sh
sudo ./prep-syslog-ng

Запуск развертывания сервиса на стенд#

Необходимо подготовить job в Jenkins, как описано выше в разделе "Создание в Jenkins задачи по установке".

  1. Откройте job по установке, и нажимаем "Собрать с параметрами".

  2. Заполните параметры сборки:

    • STAND, наименование стенда, то есть inventory для ansible (это имя папки в ansible/inventories/, например StendX);

    • PLATFORMAUTH_VERSION, версия устанавливаемого артефакта дистрибутива компонента AUTH размещенного в Nexus;

    • PLAYBOOK, выбираем playbook platformauth-deploy-playbook.yml;

  3. Нажать "Собрать" и ожидать завершения задачи.

  4. Если выполнение задачи завершилось успешно, то проверьте работоспособность развернутого стенда.

    Для проверки работоспособности можно пойти на корневую страницу 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"

Загрузка ролевой модели сервиса в Объединенный сервис авторизации (ОСА)#

Для того чтобы назначать пользователю роли (в частности роль функционального администратора сервиса аутентификации) необходимо добавить их в ролевую модель Объединенного сервиса авторизации (ОСА), для этого выполните следующие шаги:

  1. Создайте в Объединенном сервисе авторизации (ОСА) модуль с именем platformauth.

  2. Импортируйте в модуль ролевую модель из файла (файл из дистрибутива 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#

  1. По переданному URL (OWNED_PART_DOWNLOAD_URL), в коде job за счет замены подстроки owned-distrib.zip на party-distrib.zip и на owned.pom, произойдет скачивание owned-части, party-части и pom-файлов.

  2. Запустится процесс слияния owned-части и party-части дистрибутива средствами утилиты inject3rdParty. Далее запустится процесс дополнительного слияния owned-части и party-части дистрибутива с помощью отдельного sh-скрипта.

  3. Выполнится выгрузка восстановленного дистрибутива по указанным параметрам в 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

Тип стенда. Допустимы следующие значения: dev, ift, psi, prom, nt (по умолчанию psi)

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 True\ False (по умолчанию False)

PROXY_WORKER_PROCESSES

iamproxy.k8s.worker_processes

proxy_worker_processes

Сколько процессов прокси запустить для обработки соединений (по умолчанию 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 .ru доменом\host

DEBUG

auth.k8s.debug.enabled

debug

Включает отладку

PROXY_METRICS_ENABLE

auth.k8s.monitoring.enabled

proxy_metrics_enable

Опциональный. True/False , по умолчанию False. True - собирать метрики и опубликовать их в формате Prometheus на http://127.0.0.1:10080/metrics/

PROXY_HEALTCHECK_ENABLE

iamproxy.k8s.healthcheck_enable

proxy_healtcheck_enable

Опциональный. True/False, по умолчанию False. True - включение активного healtcheck до серверов backend (ответвления в которых есть строка /rds-healthcheck в applyJctRequestFilter), будет производиться вызов GET /healthcheck каждые 10 секунд, в ответе ожидается HTTP-код 200\302 для живого узла (статус доступен по url http://127.0.0.1:10080/status-healtcheck/)

PROXY_SUPPORT_ISAM_HEADERS

iamproxy.k8s.support_isam_headers

proxy_support_isam_headers

Опциональный. True/False, по умолчанию False. True - добавлять в запросы HTTP-заголовки аналогично ISAM/WebSeal (iv-user, iv-groups, iv-remote-address). Для точечного отключения на ответвлении используйте опцию common/rds-disable-support-isam-headers.location.conf в applyJctRequestFilter.

PROXY_SUPPORT_CUSTOM_CONFIGS

iamproxy.k8s.support_custom_configs

proxy_support_custom_configs

Опциональный. True/False, по умолчанию False. True - разрешить подключение/include файлов конфигурации из каталога custom.d

PROXY_X_FORWARDED_PORT

iamproxy.k8s.x_forwarded_port

proxy_x_forwarded_port

Опциональный. auto/номер порта, gо умолчанию auto. auto - получить номер порта из заголовка X-Forwarded-Port или из $proxy_protocol_port или из заголовка Host или из $scheme (указано в порядке получения)

PROXY_X_FORWARDED_PROTO

iamproxy.k8s.x_forwarded_proto

proxy_x_forwarded_proto

Опциональный. https/http, по умолчанию будет scheme из listener

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

Опциональный. True/False, по умолчанию False. Включение ограничения скорости запросов, определение источника\клиента производится по его IP (на основе нескольких источников - X-Forwaded-For, PROXY Protocol, TCP ip.src)

PROXY_LIMIT_PER_SESSION_ENABLE

iamproxy.k8s.limit_per_session_enable

proxy_limit_per_session_enable

Опциональный. True/False, по умолчанию False. Включение ограничения скорости запросов, определение источника\клиента производится по его сессии аутентификации

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

Используемый на прокси CLIENT_ID для аутентификации по OIDC на IDP

PROXY_OIDC_CLIENT_SECRET

iamproxy.k8s.secret.PROXY_OIDC_CLIENT_SECRET

proxy_oidc_client_secret

Секрет к CLIENT_ID

PROXY_TO_BACKEND_ACCESS_TOKEN

iamproxy.k8s.backend_access_token

proxy_to_backend_access_token

True/False, True - использовать access token при отправке в backend, вместо id_token

PROXY_SSL_SESSION_CACHE

iamproxy.k8s.proxy_ssl_session_cache

proxy_ssl_session_cache

Опциональный. По умолчанию имеет значение none, настройка использования cache SSL сессий клиентских подключений, в параметре указывается объем памяти выделенный под cache в мегабайтах (в 1 мегабайте может поместиться около 4000 SSL сессий), так же можно указать none(разрешение использования cache на клиенте) или off(запрет использования cache)

PROXY_KEEPALIVE_TIMEOUT

iamproxy.k8s.proxy_keepalive_timeout

proxy_keepalive_timeout

Опциональный. По умолчанию имеет значение 180 170, параметр timeout ограничивающий время клиентских keepalive соединений, второй параметр header_timeout попадет в заголовок ответа в формате: Keep-Alive: timeout=header_timeout (по умолчанию будет заголовок Keep-Alive: timeout=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

Порт к 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

Порт к KEYCLOAK_HTTPS_ADMIN_PORT

OIDC_SSL_VERIFY

auth.k8s.ssl.verify.enabled

oidc_ssl_verify

True/False, True - проверять сертификат на endpoint OIDC

OIDC_DISCOVERY_URL

iamproxy.k8s.oidc.discoveryUrl

oidc_discovery_url

Задание URL метаданных OIDC IDP (https://all-sh-mycompany.mycompany.mycompany.ru/mga/sps/oauth/oauth20)

OIDC_LOGOUT_URI

iamproxy.k8s.oidc.logoutUri

oidc_logout_uri

Задание URL на который делать redirect при logout (https://all-sh-mycompany.mycompany.mycompany.ru/pkmslogout)

OIDC_CLIENT_RSA_PRIVATE_KEY

iamproxy.k8s.oidc.client_rsa_private_key

oidc_client_rsa_private_key

Аутентификация на IDP методом private_key_jwt где указывается "закрытый клиентский ключ"

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

По умолчанию /openid-connect-auth/logoutSuccessful.html, относительный путь, на который будет перенаправление после успешного logout

OIDC_SCOPE

iamproxy.k8s.oidc.scope

oidc_scope

Задание дополнительных скоупов OIDC при аутентификации basic access

OIDC_USE_IDP_PROVIDER

iamproxy.k8s.use_idp_provider

oidc_use_idp_provider

Вход на Keycloak через заранее указанного внешнего провайдера esia

OIDC_USE_CLIENT_CERT

iamproxy.k8s.use_client_cert

oidc_use_client_cert

True/False, использовать клиентский сертификат на endpoints OIDC

OIDC_HOST_GRAY

iamproxy.k8s.oidc.host_gray

oidc_host_gray

Использовать для подключения к OIDC IDP отдельный ip:port, а не тот который в URL из OIDC_DISCOVERY_URL (может потребоваться при необходимости использовании серых адресов IDP, для включения также необходимо выставить OIDC_USE_CLIENT_CERT в True). Пример 1.1.1.1:8443

OIDC_USE_PKCE

iamproxy.k8s.oidc.use_pkce

oidc_use_pkce

True/False, по умолчанию False, использовать PKCE при аутентификации по OIDC

OIDC_USERNAME_ATTR

iamproxy.k8s.oidc.username_attr

oidc_username_attr

Какой атрибут из jwt-токена использовать в качестве имени\логина пользователя, и будет использоваться в логах, в хидере iv-user и т.п. По умолчанию preferred_username

OIDC_CHANGE_ORG_ENDPOINT

iamproxy.k8s.oidc.change_org_endpoint

oidc_change_org_endpoint

Ссылка на endpoint смены организации на IDP (реализован на KCSE в провайдере ЕСИА). При его вызове передаются параметры client_uuid, redirect_uri, org_id. По умолчанию keycloak_base_url

OIDC_POST_CHANGE_ORG_ENDPOINT

iamproxy.k8s.oidc.post_change_org_endpoint

oidc_post_change_org_endpoint

Ссылка, на которую будет перенаправление после успешной смены организации на IDP. Пример: /portal/start-page

OIDC_MAP_HEADERS

iamproxy.k8s.oidc.map_headers

oidc_map_headers

Добавить HTTP заголовки по токену, пример: header-with-user-id=sub, user_roles=realm_access.roles , user.audiences=aud, User-FIO=name, user-access-systems=resource_access

OIDC_MAP_ROLES

iamproxy.k8s.oidc.map_roles

oidc_map_roles

Задать мапинг получения ролей из токена, пример: realm_roles=realm_access.roles, root_roles=roles, client_roles=resource_access.${client_id}.roles, esia.roles.from_userinfo=userinfo@esia.roles

OIDC_USERINFO_MAP

iamproxy.k8s.oidc.userinfo_map

oidc_userinfo_map

Задать мапинг получения части userinfo из токена для сохранения\кеширования в сессии, пример: esia.roles=esia.roles, org=upper@organization.org_name, client_roles=resource_access.${client_id}.role. После задания маппинга, к сохраненной части можно будет обратиться через модификатор userinfo в мапингах, пример: org_from_userinfo=userinfo@org

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

True/False, по умолчанию False. Включить процедуру отзыва токенов при logout (отзываются токены refresh и\или access при их наличии, и при условии что IDP поддерживает отзыв/revoke токенов)

OIDC_DISABLE_LOGOUT_IN_IDP

iamproxy.k8s.oidc.disable_logout_in_idp

oidc_disable_logout_in_idp

True/False, по умолчанию False. Не производить logout сессии пользователя на IDP (logout на IDP обычно закрывает сессии всех клиентов\АС, созданных на данном IDP от имени пользователя)

OIDC_IGNORE_SSO_ON_IDP

iamproxy.k8s.oidc.ignore_sso_on_idp

oidc_ignore_sso_on_idp

True/False, по умолчанию False. Включить принудительный запрос логин/пароля при каждой аутентификации на IDP (игнорируем SSO)

OIDC_REUSE_REFRESH_COUNT

iamproxy.k8s.oidc.reuse_refresh_count

oidc_reuse_refresh_count

Опциональный, по умолчанию -1, определяет количество повторных использований одного refresh токена (значение менее 0 снимает ограничение)

AUTHZ_SPAS_URL

iamproxy.k8s.authz.spas_url

authz_spas_url

URL для обращения в API SPAS/ОСА. Пример: https://10.x.x.10:8443/spas/rest, 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

Проверять сертификат на endpoint authz_spas_url. Пример: False

AUTHZ_OPA_URL

iamproxy.k8s.authz.opa_url

authz_opa_url

URL для вызова API OPA. Пример https://10.x.x.10:8443/ssp-portal/rm/api/v1/check

AUTHZ_OPA_SSL_VERIFY

iamproxy.k8s.authz.opa_ssl_verify

authz_opa_ssl_verify

Проверять сертификат на endpoint authz_spas_url. Пример: False

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, например syslog:server=127.x.x.1:15140)

PROXY_LOG_TO_FLUENT_BIT_ERROR_LOG

logger_options.proxy_error_log

Опциональный. путь до файла error-логов отправляемых через fluent-bit (можно указать сервер-syslog, например syslog:server=127.x.x.1:15141)

logger_options.rds_client_log_dir

Опциональный. По умолчанию logs, путь до каталога логов RDS Client, отправляемых через fluent-bit

PROXY_ROTATE_FILES

proxy_rotate_files

Опциональный. Полные пути до файлов логов (через запятую), которые надо ротировать

PROXY_ROTATE_FILE_SIZE

proxy_rotate_file_size

Опциональный. По умолчанию 4000, максимальный размер одного файла в кб

PROXY_ROTATE_TOTAL_SIZE

proxy_rotate_total_size

Опциональный. По умолчанию 40000, максимальный размер всех файлов в кб, которые под ротацией

PROXY_REQUEST_TO_UI_REGEX

iamproxy.k8s.request_to_ui_regex

proxy_request_to_ui_regex

Опциональный. По умолчанию /$, регулярное выражение применяемое к URI запроса, при совпадении считается что тип запроса - запрос к UI

PROXY_REQUEST_TO_API_REGEX

iamproxy.k8s.request_to_api_regex

proxy_request_to_api_regex

Опциональный. По умолчанию /api/, регулярное выражение применяемое к URI запроса, при совпадении считается что тип запроса - запрос к API

Примечания#

Параметры влияющие на безопасность отмечены по тексту примечанием - (параметр, влияющий на безопасность).