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:
- Импортируйте образ Docker.
- Сгенерируйте служебные сертификаты.
- Внесите изменения в конфигурационные файлы.
- Выполните настройку прав пользователя.
- Запустите контейнер с приложением Key Server.
Импорт образа Docker
Скачайте архив am-<номер версии>.tar.gz, загрузите его на целевой хост в необходимый каталог.
Перейдите в каталог с архивом и распакуйте его с помощью команды:
sudo tar -xf <имя архива>.tar.gz
Перейдите в каталог, в который распаковался архив, и импортируйте образ Docker с помощью команды:
sudo docker load -i <имя архива>.tar
Ограничьте права запуска для всех пользователей системы, не имеющих прав
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
.
Запустите скрипт convertPfxForReverseProxy.sh с использованием сертификата <серверный сертификат>.pfx, выписанного на DNS-имя текущего хоста:
sudo bash ./convertPfxForReverseProxy.sh -f <серверный сертификат>.pfx -p <пароль>
Запустите скрипт 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.
Сгенерируйте служебный сертификат, который используются при SAML-соединении
sudo bash ./generateSamlCerts.sh
Сгенерируйте сертификат, которому будут доверять контейнеры.
sudo bash ./prepareCaFile.sh
Редактирование конфигурационных файлов
Редактирование файла am/.env
COMPOSE_PROFILES
— добавьте значениеindeed-key-server
и удалите значения компонентов, которые установлены на других машинах.ENDPOINT_NAME_THIS_HOST
— DNS-имя машины, на которой вы устанавливаете Key Server.INDEED_KEY_EXTERNAL_ENDPOINT_NAME
— внешний адрес для подключения мобильного приложения к Key Server.INDEED_KEY_HTTPS_PORT
иINDEED_KEY_HTTPS_PORT_EXTERNAL
— внутренний и внешний порты.
Редактирование конфигурационного файла am/haproxy.docker-compose.yml
В блоке
depends_on
раскомментируйте строкуindeed-key
и закомментируйте строки с остальными компонентами, установленными на других машинах.Пример
depends_on:
# - core
# - idp
# - mc
# - uc
# - ls
- indeed-key # Uncomment if you need an Indeed Key serverВ блоке
ports
раскомментируйте строки с указанием портов:"${INDEED_KEY_HTTPS_PORT}:7443"
"${INDEED_KEY_HTTPS_PORT_EXTERNAL}:8443"
Редактирование конфигурационного файла am/haproxy/haproxy.cfg
Раскомментируйте строку
default_backend IK_Backend
.Раскомментируйте следующие строки с параметром
backend IK_Backend
.backend IK_Backend
server docker indeed-key:5443 check inter 5000ms ssl verify required ca-file trusted_ca.crtЗакомментируйте строки, связанные с компонентами, которые установлены на других машинах.
Строки с параметром
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
В разделе
Storage
в параметреConnectionString
укажите строку подключения к базе данных.Пример
{
"Storage": {
"Provider": {
"Type": "PostgreSql",
"ConnectionString": "server=192.168.80.30;port=5432;user id=amservice;password=Q1w2e3r4;database=IndeedKey"
},В разделе
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 должен быть доступен с мобильного телефона.
В параметре
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
Откройте файл am/ls/clientApps.config и найдите строчку
<Target Id="DbTargetSqlIndeedKey" Type="pgsql" />
, гдеDbTargetSqlIndeedKey
— это название конфигурационного файла в папке am/ls/targets.Откройте файл 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>Откройте конфигурационный файл сервера Log Server am/ls/clientApps.config.
Раскомментируйте блок
<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.
- В тегах
При необходимости использовать дополнительное хранилище данных, укажите его в секции
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 , false | true | Отсутствует |
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 минут) |
Включить/Отключить шифрование конфигурационного файла
В терминале перейдите в каталог с утилитой для шифрования am/protection.
cd /am/protection
Выдайте права для запуска скрипта
protector.sh
.sudo chmod 500 protector.sh
Чтобы зашифровать конфигурационные файлы, запустите скрипт
protector.sh
с параметромprotect
.sudo bash ./protector.sh protect
Чтобы расшифровать конфигурационные файлы, запустите скрипт
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 находится в разделе Сбор логов серверных компонентов.