Перейти к основному содержимому
Версия: Indeed Access Manager 9.7

Ручное распределение компонентов по хостам

Информация

Установку Access Manager на нескольких хостах рекомендуется выполнять автоматически с помощью мастера конфигурации.

  1. После успешной установки на одном хосте создайте архивную копию каталога с установленным Access Manager и переместите архив на все хосты, где планируется установка компонентов продукта.

  2. Распакуйте архив и на каждом хосте внесите все изменения, описанные далее.

    Важно

    Если конфигурационные файлы в архиве зашифрованы, перед внесением изменений расшифруйте их.

  3. Перед запуском скриптов ограничьте права запуска для всех пользователей системы, не имеющих прав sudo. Для этого, находясь в каталоге ssl, выполните команду sudo chmod 400 *.sh.

  4. Выполните запуск скриптов convertPfxForReverseProxy.sh и prepareCaFile.sh с использованием сертификата <серверный сертификат>.pfx, выписанного на DNS-имя текущего хоста:

    •  sudo bash ./convertPfxForReverseProxy.sh -f <серверный сертификат>.pfx -p <пароль>
    • (Опционально) При установке Indeed Key Server выполните запуск следующего скрипта:

       sudo bash ./convertPfxForReverseProxy_ik_external.sh -f <серверный сертификат>.pfx -p <пароль>

      В результате запуска создается серверный сертификат am/ssl/https/reverse_proxy_server_ik.pem, предоставляющий HAProxy для внешних клиентов к Indeed Key Server.

    • Перезапустите скрипт:

       sudo bash ./prepareCaFile.sh
  1. Откройте файл am/.env и внесите следующие изменения в переменные окружения:

    • В переменной COMPOSE_PROFILES укажите провайдеры аутентификации, которые вы планируете установить на текущем хосте. Список обозначений для провайдеров смотрите в таблице Переменные окружения.

      Важно

      Установка провайдеров возможна только на одном хосте с серверным компонентом Core Server.

    • Измените значение переменной ENDPOINT_NAME_THIS_HOST. При установке Access Manager на нескольких хостах компонент HAProxy устанавливается на каждом хосте, поэтому в переменной ENDPOINT_NAME_THIS_HOST необходимо указать DNS-имя текущего хоста.

    • На каждом используемом хосте измените значения всех переменных ENDPOINT_NAME_<компонент> в зависимости от того, на каких хостах установлены компоненты.

    • (Опционально) При установке Indeed Key Server задайте значения переменных на каждом используемом хосте:

      • INDEED_KEY_EXTERNAL_ENDPOINT_NAME — внешний адрес, по которому будет доступно приложение Indeed Key
      • INDEED_KEY_HTTPS_PORT — внутренний порт
      • INDEED_KEY_HTTPS_PORT_EXTERNAL — внешний порт
  2. (Опционально) При установке Indeed Key Server откройте конфигурационный файл am/indeed-key/app-settings.json на хосте с Key Server и задайте параметры:

    • ConnectionString — строка подключения к базе данных
    • Url — внешний адрес Key Server
    • TrustedClients — произвольный уникальный идентификатор. Этот идентификатор необходим для подтверждения удаления аутентификатора Indeed Key. Значение идентификатора должно совпадать со значением, указанным в серверных настройках аутентификатора Indeed Key в Management Console
  3. Внесите изменения в файл am/haproxy.docker-compose.yml. Необходимо удалить или закомментировать зависимость от сервисов, которые не будут установлены на текущем хосте.

    Пример
     depends_on:
    - core
    - idp
    #- mc
    #- uc
    - ls
    #- indeed-key # Remove if Indeed Key server not needed
  4. Внесите изменения в конфигурационный файл am/haproxy/haproxy.cfg.

    Удалите или закомментируйте строки с параметрами, относящимися к серверным компонентам, которые вы не планируете устанавливать на текущем хосте:

    • Строки с параметром acl, в которых упоминаются серверные компоненты.

       acl path-ls         path_beg -i /ls
      acl path-idp path_beg -i /am/idp
      acl path-mc path_beg -i /am/mc
      acl path-uc path_beg -i /am/uc
      acl path-core path_beg -i /am/core
      acl path-sms-proxy path_beg -i /am/proxies/sms
    • В параметре http-request reject unless удалите не используемые на данном хосте компоненты и лишние разделители ||.

      http-request reject unless path-core || path-idp || path-mc || path-uc || path-ls || path-sms-proxy
    • Строки с параметром use_backend.

       use_backend LS_Backend         if path-ls
      use_backend IDP_Backend if path-idp
      use_backend MC_Backend if path-mc
      use_backend UC_Backend if path-uc
      use_backend CORE_Backend if path-core
      use_backend Sms_Proxy_Backend if path-sms-proxy
    • Строки с адресами компонентов в параметре backend <серверный_компонент>_Backend.

      backend CORE_Backend
      server docker core:5443 check inter 5000ms ssl verify required ca-file trusted_ca.crt

      backend MC_Backend
      server docker mc:5443 check inter 5000ms ssl verify required ca-file trusted_ca.crt

      backend UC_Backend
      server docker uc:5443 check inter 5000ms ssl verify required ca-file trusted_ca.crt

      backend IDP_Backend
      server docker idp:5443 check inter 5000ms ssl verify required ca-file trusted_ca.crt

    Выберите режим обработки клиентского сертификата. Раскомментируйте строки с параметрами, относящимися к выбранному режиму:

    • Режим DIRECT mTLS — основной режим прямой mTLS-аунтентификации. По умолчанию включен.

      В этом режиме HAProxy сам принимает mTLS-соединение от клиента и проверяет его сертификат. Входящий заголовок x-indeedam-clientcert удаляется и формируется заново — если клиент предъявил сертификат в TLS-соединении и сертификат прошел проверку.

      # [DIRECT mTLS] Use when HAProxy terminates mTLS; enabled by default. To switch to it,
      # comment out [LEGACY COMPATIBILITY] and [EXTERNAL LB], then uncomment the 4 rules below.
      http-request del-header x-indeedam-clientcert
      acl client_cert_present ssl_c_used
      acl client_cert_valid ssl_c_verify 0
      http-request set-header x-indeedam-clientcert %{+Q}[ssl_c_der,base64] if client_cert_present client_cert_valid
    • Режим LEGACY COMPATIBILITY — режим обратной совместимости. По умолчанию выключен.

      В этом режиме HAProxy принимает mTLS-соединение от клиентов, которые не владеют закрытым ключом клиентского сертификата. Режим небезопасен и не рекомендуется для продуктовых сред.

      # [LEGACY COMPATIBILITY] Uses the legacy header-preserving behavior. To enable this
      # block, comment out [DIRECT mTLS] and [EXTERNAL LB], then uncomment the 2 rules below.
      #acl client-hdr-exists req.hdr(x-indeedam-clientcert) -m found
      #http-request set-header x-indeedam-clientcert %{+Q}[ssl_c_der,base64] unless client-hdr-exists
    • Режим EXTERNAL LB — режим доверенного внешнего балансировщика. По умолчанию выключен.

      В этом режиме mTLS-соединение принимает и проверяет внешний доверенный балансировщик. HAProxy доверяет заголовку только из источников, которые указаны в trusted_lb в параметрах <TRUSTED_LB_IP_OR_HOSTNAME_№>. Заголовок из других источников удаляется.

      # [EXTERNAL LB] Use when mTLS terminates at a trusted load balancer. To enable this
      # block, comment out [DIRECT mTLS] and [LEGACY COMPATIBILITY], set its IP(s) or hostname(s),
      # and uncomment the 2 rules below.
      #acl trusted_lb src <TRUSTED_LB_IP_OR_HOSTNAME_1> <TRUSTED_LB_IP_OR_HOSTNAME_2>
      #http-request del-header x-indeedam-clientcert unless trusted_lb
  5. Выполните настройку прав пользователя.

  6. (Опционально) После внесения всех изменений зашифруйте конфигурационные файлы.

  7. Для создания и запуска контейнера с серверными компонентами, выполните следующую команду:

    sudo docker compose up -d

Опциональные настройки безопасности​

В некоторых сценариях можно ограничить доступ к любому серверному компоненту Access Manager, оставив только доступ в пределах Docker-сети. Для этого удалите соответствующие строки в конфигурационном файле am/haproxy/haproxy.cfg (шаг 8).

В таком случае этот компонент должен быть доступен в пределах Docker-сети для остальных компонентов, которые требуют соединения. При таком сценарии в переменных ENDPOINT_NAME_<компонент> следует задать имя контейнера с указанием порта 5443.

Пример
ENDPOINT_NAME_CORE=core:5443
ENDPOINT_NAME_LS=ls:5443