Skip to main content
Version: Indeed Access Manager 9.2

Indeed Key Server

Indeed Key Server (Key Server) — это сервер, необходимый для работы мобильного приложения Indeed Key. С помощью Key Server отправляются push-уведомления и устанавливается связь с Core Server.

Связь с мобильным приложением Indeed Key осуществляется по протоколу HTTP или HTTPS.

Создание базы данных и сервисной учетной записи

Key Server поддерживает работу с базой PostgreSQL. Для записи событий сервера необходима отдельная база данных PostgreSQL.

Подробнее о создании базы данных и сервисной учетной записи вы можете узнать в разделе Хранилище данных.

Примечание

После создания базы данных (после первого запроса) можно уменьшить права для пользователя. Достаточно права db_owner для созданной базы данных.

Установка и настройка Indeed Key Server

Прежде чем перейти к установке и настройке Key Server, ознакомьтесь с системными требованиями.

Чтобы установить Key Server на отдельном сервере с операционной системой Linux:

  1. Импортируйте образ Docker.
  2. Сгенерируйте служебные сертификаты.
  3. Внесите изменения в конфигурационные файлы.
  4. Выполните настройку прав пользователя.
  5. Запустите контейнер с приложением Key Server.

Импорт образа Docker

  1. Скачайте архив am-<номер версии>.tar.gz, загрузите его на целевой хост в необходимый каталог.

  2. Перейдите в каталог с архивом и распакуйте его с помощью команды:

    sudo tar -xf <имя архива>.tar.gz
  3. Перейдите в каталог, в который распаковался архив, и импортируйте образ Docker с помощью команды:

    sudo docker load -i <имя архива>.tar
  4. Ограничьте права запуска для всех пользователей системы, не имеющих прав sudo. Для этого, находясь в каталоге ssl, выполните команду sudo chmod 400 *.sh.

Генерация служебных сертификатов

Добавьте следующие сертификаты в каталог ssl/:

  • ssl/<серверный сертификат>.pfx — сертификат веб-сервера, выписанный доменным удостоверяющим центром (УЦ) на внутреннее DNS-имя машины, на которой будет установлен Key Server.
  • ssl/ca/<публичный сертификат>.cer — публичный сертификат в формате Base64 вашего доменного УЦ.
  • ssl/<сертификат стороннего УЦ>.pfx — глобальный сертификат веб-сервера, выписанный сторонним УЦ на внешнее DNS-имя машины, на которой будет установлен Key Server.
  • ssl/ca/<сертификат стороннего УЦ>.cer — публичный сертификат домена в формате Base64 стороннего УЦ.
Информация

Требования к сертификату стороннего удостоверяющего центра смотрите в разделе Системные требования.

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

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

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

  2. Запустите скрипт convertPfxForReverseProxy_ik_external.sh с использованием сертификата <сертификат стороннего УЦ>.pfx:

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

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

  3. Сгенерируйте служебный сертификат, который используются при SAML-соединении

    sudo bash ./generateSamlCerts.sh
  4. Сгенерируйте сертификат, которому будут доверять контейнеры.

    sudo bash ./prepareCaFile.sh

Редактирование конфигурационных файлов

Редактирование файла am/.env

  1. COMPOSE_PROFILES — добавьте значение indeed-key-server и удалите значения компонентов, которые установлены на других машинах.
  2. ENDPOINT_NAME_THIS_HOST — DNS-имя машины, на которой вы устанавливаете Key Server.
  3. INDEED_KEY_EXTERNAL_ENDPOINT_NAME — внешний адрес для подключения мобильного приложения к Key Server.
  4. INDEED_KEY_HTTPS_PORT и INDEED_KEY_HTTPS_PORT_EXTERNAL — внутренний и внешний порты.

Редактирование конфигурационного файла am/haproxy.docker-compose.yml

  1. В блоке depends_on раскомментируйте строку indeed-key и закомментируйте строки с остальными компонентами, установленными на других машинах.

    Пример
         depends_on:
    # - core
    # - idp
    # - mc
    # - uc
    # - ls
    - indeed-key # Uncomment if you need an Indeed Key server
  2. В блоке ports раскомментируйте строки с указанием портов:

    "${INDEED_KEY_HTTPS_PORT}:7443" 
    "${INDEED_KEY_HTTPS_PORT_EXTERNAL}:8443"

Редактирование конфигурационного файла am/haproxy/haproxy.cfg

  1. Раскомментируйте строку default_backend IK_Backend.

  2. Раскомментируйте следующие строки с параметром backend IK_Backend.

    backend IK_Backend
    server docker indeed-key:5443 check inter 5000ms ssl verify required ca-file trusted_ca.crt
  3. Закомментируйте строки, связанные с компонентами, которые установлены на других машинах.

    • Строки с параметром acl, в которых упоминаются компоненты. Пример: acl path-mc path_beg -i /am/mc.

    • В параметре http-request reject unless удалите компоненты, которые установлены на других машинах, и лишние разделители ||.

    • Строки с параметром use_backend. Пример: use_backend MC_Backend if path-mc.

    • Строки с адресом компонента в параметре backend <серверный_компонент>_Backend.

Редактирование конфигурационного файла am/indeed-key/app-settings.json

  1. В разделе Storage в параметре ConnectionString укажите строку подключения к базе данных.

    Пример
    {
    "Storage": {
    "Provider": {
    "Type": "PostgreSql",
    "ConnectionString": "server=192.168.80.30;port=5432;user id=amservice;password=Q1w2e3r4;database=IndeedKey"
    },
  2. В разделе Server в параметре Url укажите URL-адрес для подключения к Key Server.

    Пример
      "Server": {
    "Url": "http(s)://[Server address]:{port}",
    "Logon": {
    "Delay": "00:05:00"
    },

    Где:

    • [Server address] — значение переменной INDEED_KEY_EXTERNAL_ENDPOINT_NAME, заданное в файле am/.env.

    • {port} — значение переменной INDEED_KEY_HTTPS_PORT_EXTERNAL, заданное в файле am/.env.

    Информация

    Key Server должен быть доступен с мобильного телефона.

  3. В параметре TrustedClients укажите произвольный уникальный идентификатор. Этот идентификатор необходим для подтверждения удаления аутентификатора.

    Значение идентификатора должно совпадать со значением в настройке Доверенный ID Indeed Key Server в Management Console.

    Подсказка

    На этом этапе рекомендуем перейти в Management Console в раздел Конфигурация→Аутентификаторы→Indeed Key→Серверные настройки и, помимо настройки доверенного ID Indeed Key Server, задать внутренний URL-адрес Indeed Key Server.

    Также в разделе Настройки регистрации при выборе способа регистрации по email заполните обязательные поля и сохраните изменения.

Настройка прав

Выдайте права пользователю, которого вы указали в файле .env в переменных AM_UID и AM_GID, запустив следующую команду:

sudo chown -R <AM_UID>:<AM_GID> ./*

Запуск Key Server

Запустите контейнер с приложением с помощью команды sudo docker-compose up -d.

Настройка событий сервера

Установка и настройка осуществляется на Log Server.

В качестве хранилища можно использовать все способы хранения, которые поддерживает Log Server.

Отслеживать события можно следующими способами: 

  • При хранении в базе данных — сторонними средствами мониторинга или с помощью SQL-запросов.
  • При использовании Syslog — сторонними средствами мониторинга с поддержкой Syslog. 
Важно!

В текущей версии Indeed AM просмотр событий Key Server с помощью Management Console не поддерживается.

Чтобы настроить события Key Server

  1. Откройте файл am/ls/clientApps.config и найдите строчку <Target Id="DbTargetSqlIndeedKey" Type="pgsql" />, где DbTargetSqlIndeedKey — это название конфигурационного файла в папке am/ls/targets.

  2. Откройте файл am/ls/targets/DbTargetSqlIndeedKey.config и в строке ConnectionString укажите следующие данные:

    • Server — DNS/IP-адрес сервера с базой данных PostgreSQL.
    • Database — имя базы данных.
    • Port — порт подключения.
    • User ID — имя пользователя, который имеет полные права для базы данных Database.
    • Password — пароль пользователя. 
    Пример
    <?xml version="1.0" encoding="utf-8"?>
    <Settings>
    <ConnectionString>server=[database host address];port=5432;user id=[database service account];password=[database service password];database=[log server]</ConnectionString>
    </Settings>
  3. Откройте конфигурационный файл сервера Log Server am/ls/clientApps.config.

  4. Раскомментируйте блок <Application Id="akc" SchemaId="akcSchema">.

    Пример
    <Application Id="akc" SchemaId="akcSchema">
    <ReadTargetId>DbTargetSqlIndeedKey</ReadTargetId>
    <WriteTargets>
    <TargetId>DbTargetSqlIndeedKey</TargetId>
    </WriteTargets>
    <AccessControl>
    <CertificateAccessControl CertificateThumbprint="01de449b6f4b49e00d1a5b20ffb5d6605cf6cd2a" Rights="Write" />
    </AccessControl>
    </Application>
    • В тегах ReadTargetId указывается идентификатор хранилища, откуда будет осуществляться чтение событий.
    • В блоке WriteTargets, в тегах TargetId, указывается идентификатор хранилища, куда будет осуществляться запись событий.
    • Идентификаторы заданы в теге Targets, конфигурационные файлы для каждого типа находятся в папке am/ls/targets/ с соответствующим именем.
    • При использовании собственного клиентского сертификата в CertificateThumbprint указывается отпечаток клиентского сертификата Core Server.
  5. При необходимости использовать дополнительное хранилище данных, укажите его в секции Targets:

    Пример
    <Targets>
    ...
    <Target Id="sqlTargetAM" Type="pgsql"/>
    </Targets>

Если в качестве хранилища событий вы используете базу данных, выполните настройку подключения к базе в файле am/ls/targets/DbTargetSqlIndeedKey.config

Важно!

Для событий Key Server необходимо использовать отдельную базу данных. 

Сервис очистки старых данных

В файле am/indeed-key/app-settings.json можно задать параметры сервиса очистки старых данных.

Пример
"CleanAkData": {
"Enabled": true,
"FirstRunTime": "00:00",
"Interval": "1.00:00:00",
"AkDataLifeTime": "1.00:00:00"
}

Описание атрибутов примера

Имя атрибутаОписаниеЗначениеЗначение по умолчаниюМинимально допустимое значение
EnabledФлаг включения сервисаtrue, falsetrueОтсутствует
FirstRunTimeВремя первого запуска сервисаСтрока в формате времени hh:mm (ЧЧ:ММ)00:00 (полночь)Отсутствует
IntervalИнтервал запуска сервисаВременной интервал1.00:00:00 (ДД:ЧЧ:MM:CC)00:10:00 (10 минут)
AkDataLifeTimeВремя жизни данныхВременной интервал1.00:00:00 (ДД:ЧЧ:MM:CC)00:10:00 (10 минут)

Включить/Отключить шифрование конфигурационного файла

  1. В терминале перейдите в каталог с утилитой для шифрования am/protection.

    cd /am/protection
  2. Выдайте права для запуска скрипта protector.sh.

    sudo chmod 500 protector.sh
  3. Чтобы зашифровать конфигурационные файлы, запустите скрипт protector.sh с параметром protect.

    sudo bash ./protector.sh protect
  4. Чтобы расшифровать конфигурационные файлы, запустите скрипт protector.sh с параметром unprotect.

    sudo bash ./protector.sh unprotect

Проверка состояния сервера

Для проверки рабочего состояния контейнера в Docker используйте метод Healthcheck:

http(s)://<dns_имя_сервера>:<порт>/healthcheck/isHealthy

На странице отображается следующая информация о состоянии компонента:

  • статус компонента Key Server, время обработки запроса к нему;
  • статус последнего запроса;
  • список ошибок при наличии.
Пример результата проверки
{
"Entries": {
"Storage": {
"Data": {
"HealthCheckStatus": {
"PreviousCheckSucceeded": true,
"CheckState": "Succeeded",
"CheckStartDate": "2025-03-17T11:07:55.9606294+00:00",
"CheckDuration": "00:00:00.0014040"
}
},
"Description": null,
"Duration": "00:00:00.0000052",
"Exception": null,
"Status": 2,
"Tags": []
}
},
"Status": 2,
"TotalDuration": "00:00:00.0003921"
}

Сбор логов

Информация по включению логирования и сбору логов компонента Key Server находится в разделе Сбор логов серверных компонентов.