ArchMapДокументация

Настроить безопасность установки

Что защищено по умолчанию#

ArchMap защищён по умолчанию:

  • самостоятельной регистрации нет, учётные записи заводит администратор;
  • неудачные попытки входа ограничены (10 в минуту с одного адреса);
  • описание API (Swagger) наружу не отдаётся;
  • токены ИИ-агентов хранятся только в виде хэша, а сам токен показывается один раз при выпуске. Токеном нельзя ничего удалить, управлять проектами и пользователями, сменить пароль или выпустить новый токен;
  • у каждого ответа есть заголовки безопасности, и ArchMap нельзя встроить в чужую страницу;
  • в Kubernetes под работает без прав root и привилегий и проходит профиль Pod Security «restricted»;
  • на сервере служба работает от отдельного пользователя archmap в песочнице systemd, а система для неё доступна только для чтения.

Без TLS пароли и токены передаются по сети открытым текстом. Работайте с ArchMap без TLS только в доверенном тестовом сегменте сети.

Задать свой ключ подписи входа#

Примечание

Ключ подписи защищает токены входа пользователей. При установке ArchMap создаёт случайный ключ сам. Свой ключ стоит задать, если прежний мог стать известен посторонним.

Чтобы задать свой ключ подписи, выполните следующие действия:

  1. Сгенерируйте случайный ключ длиной не меньше 32 символов:

    openssl rand -hex 32
    
  2. Укажите ключ в настройках для своего способа установки:

    • сервер: в файле /etc/archmap/archmap.env в переменной SECRET_KEY;
    • Docker Compose: в файле compose.yaml в разделе environment сервиса archmap в переменной SECRET_KEY;
    • Kubernetes: в Secret с ключом secret-key, имя которого указано в значении secretKey.existingSecret.
  3. Перезапустите ArchMap:

    • сервер: sudo systemctl restart archmap;
    • Docker Compose: docker compose up -d;
    • Kubernetes: kubectl -n archmap rollout restart deploy/archmap.

Примечание

После смены ключа всем пользователям придётся войти заново. Токены ИИ-агентов продолжат работать, потому что они от ключа подписи не зависят.

Ограничения запросов#

Пределы запросов задаются переменными окружения (см. Справочник переменных окружения):

Переменная Что ограничивает По умолчанию
LOGIN_ATTEMPTS_PER_MINUTE Неудачные попытки входа в минуту с одного адреса. На сервере попытки входа ограничивает nginx, и предел задан параметром rate в файле /etc/nginx/conf.d/archmap.conf. 10
MCP_REQUESTS_PER_MINUTE Запросы ИИ-агента в минуту по одному токену. Кроме того, с одного адреса принимается не больше 30 неудачных проверок токена в минуту. 300
MCP_ALLOWED_ORIGINS Адреса страниц, с которых браузер может обращаться к …/mcp. ИИ-агенты заголовок Origin не отправляют, поэтому настройка нужна, только если к ArchMap обращается веб-приложение. пусто

Значение 0 у LOGIN_ATTEMPTS_PER_MINUTE и MCP_REQUESTS_PER_MINUTE снимает ограничение.

Каждый рабочий процесс ArchMap считает запросы сам, поэтому фактический предел равен заданному, умноженному на число процессов (а в Kubernetes ещё и на число подов).

ArchMap определяет адрес пользователя по заголовку X-Forwarded-For, который дописывает прокси перед ним. Если прокси нет, выключите доверие к этому заголовку (TRUST_FORWARDED_FOR=false), иначе пользователь сможет подделать свой адрес и обойти ограничения.

Ослабить песочницу службы на сервере#

Примечание

Если программам вашей среды (например, средствам защиты) нужен доступ, который песочница systemd закрывает, меняйте ограничения через дополнительный файл службы, а не в самом юните, потому что юнит перезаписывается при обновлении.

Чтобы изменить ограничения службы, выполните следующие действия:

  1. Откройте редактор дополнительных настроек службы:

    sudo systemctl edit archmap
    
  2. Впишите нужные параметры systemd и сохраните файл.

  3. Перезапустите службу:

    sudo systemctl restart archmap
    

Примечание

Насколько служба изолирована, показывает команда systemd-analyze security archmap: для ArchMap она выдаёт оценку около 1,5 («OK»).