RussiaAPI

Техническое руководство

MCP server: allowlist инструментов и минимальные права

MCP server с allowlist инструментов нужен не для того, чтобы «доверять модели больше», а чтобы уменьшить последствия ошибки, вредного документа или неверной конфигурации. Начните с одной задачи, одного владельца и небольшого набора разрешённых действий. Модель, клиент и подключённый контент остаются недоверенными входами; решение о вызове инструмента, правах и данных принимает ваш сервер.

Опубликовано 13 сентября 2026 · 10 минут чтения · Ключевой запрос: MCP server allowlist tools права доступа

Короткий ответ: разрешайте действие, а не целый сервер

Полезная allowlist описывает не абстрактное «доверенное подключение», а конкретное действие: кто может вызвать его, с какими полями, над каким проектом и с каким пределом результата. Например, чтение агрегированного статуса и создание production-задачи имеют разный риск, даже если находятся в одном MCP server. Отдельно задайте environment, tenant, максимальный объём, таймаут и необходимость подтверждения человека.

Не публикуйте все доступные методы в надежде, что клиент выберет правильный. Сначала включите один read-only инструмент на synthetic данных, затем проверьте журнал и отрицательные сценарии. Вновь появившийся метод не должен автоматически становиться доступным в production. Его добавляют в allowlist после владельца, описания входов, теста ошибок и понятного rollback. Такой процесс медленнее одного переключателя, но заметно проще для расследования и отзыва.

Минимальные права начинаются с карты ресурсов

Для каждого инструмента выпишите ресурс, операцию и границу: какой проект он видит, может ли он писать, какие поля возвращает и кто утверждает изменение. Принцип минимальных прав означает, что инструмент чтения не получает право удаления, а тестовый контур не видит production-данные. Не используйте общий технический аккаунт для всех интеграций: при ошибке невозможно быстро отключить один маршрут и понять владельца действия.

Права должны проверяться server-side для каждого вызова, а не только при открытии MCP-сессии. Пользователь, инструмент и ресурс могут меняться между сообщениями. Сверяйте внутренний actor ID, проект, тип операции и разрешённый набор параметров. Если контекст неполный, возвращайте контролируемый отказ. Не пытайтесь «угадать» нужный tenant по тексту prompt и не передавайте модели список чужих проектов ради удобства выбора.

Проверяйте аргументы независимо от вывода модели

Tool call — это предложение выполнить действие, а не готовая команда. Сервер обязан проверить JSON Schema, типы, диапазоны, идентификатор проекта и бизнес-условия. Для операций с побочным эффектом полезно требовать идемпотентный operation ID и короткое подтверждение в приложении. Строка из retrieved-документа или ответ модели не может стать SQL, shell-командой, URL для внутренней сети или правом расширить доступ.

Составьте тестовый набор из корректных и неправильных вызовов: лишнее поле, неизвестный инструмент, чужой project ID, слишком большой лимит, просроченное подтверждение и повтор той же операции. Проверяйте, что каждый случай завершается безопасно, не раскрывает внутреннюю схему и не записывает секреты в лог. Если формат поставщика или SDK меняется, повторите контрактный тест; совместимость протокола не доказывает совместимость конкретного инструмента или модели.

Секреты, сеть и журнал действий — отдельные границы

Не передавайте MCP server upstream-ключи, пароль, cookie, export из секретного хранилища или полный Authorization header. Инструмент получает только тот short-lived server-side контекст, который нужен для одной разрешённой операции. Ограничьте исходящие сети и запретите доступ к metadata endpoint, локальным сокетам и произвольным URL, если задача этого не требует. Внешний текст может просить сделать исключение; это не является полномочием.

В журнал записывайте время, внутренний actor ID, имя инструмента, project ID, результат, correlation ID и причину отказа. Не записывайте prompt, полный ответ, вложение или параметры, если они могут содержать персональные данные и секреты. Регулярно проверяйте выборку журналов и маскирование аварийных веток. Журнал нужен, чтобы связать решение с владельцем и быстро отключить доступ, а не чтобы накопить содержимое разговоров.

Запускайте через staging и измеримый rollback

Начните с отдельного тестового MCP server или feature flag, synthetic ресурса и ограниченного числа сотрудников. До rollout определите стоп-условия: неожиданный инструмент, ошибка проверки прав, увеличение отказов, несоответствие schema или подозрительный экспорт данных. Назначьте человека, который может выключить интеграцию без ожидания следующего релиза. Не включайте одновременно новые tools, новую модель и новый источник документов: иначе причина проблемы останется неясной.

После пилота сравните разрешённые и фактические вызовы, время выполнения, отказы валидации и полезность результата. Уберите неиспользуемые разрешения, уточните ограничения и задокументируйте владельца. MCP — это протокол, а не подтверждение доступа к конкретной модели или данным. RussiaAPI не заменяет проверку возможностей, политики и условий у вашей организации и поставщиков. Безопасный итог пилота может быть и таким: инструмент остаётся выключенным, пока контракт не станет яснее.

Server-side пример

Пример показывает локальную проверку на сервере. Ключи берутся только из окружения; до запуска подтвердите маршрут, model ID и параметры в текущем каталоге RussiaAPI.

const TOOL_POLICY = {
  get_project_status: { verbs: ['read'], maxItems: 20 },
  create_review_request: { verbs: ['write'], maxItems: 1 },
};

export function authorizeTool({ tool, actor, projectId, args }) {
  const policy = TOOL_POLICY[tool];
  if (!policy || !actor.projects.includes(projectId)) throw new Error('tool_not_allowed');
  if (!Number.isInteger(args.limit ?? 1) || (args.limit ?? 1) > policy.maxItems) throw new Error('invalid_input');
  return { tool, projectId, actorId: actor.id }; // no credentials or prompt in the audit event
}

Проверьте синтаксис через node --check, добавьте аутентификацию своего маршрута и негативные тесты. Не логируйте тело запроса или заголовки только ради отладки.

Границы и безопасный запуск

Это инженерное руководство, а не юридическое заключение и не инструкция по обходу законов, санкций, региональных, платёжных или платформенных ограничений. Не передавайте в тесты персональные данные, коммерческие секреты, upstream-ключи, cookie, пароли или полный заголовок Authorization. Для чувствительных данных подтвердите цель, минимизацию, срок хранения и договорные условия с ответственными специалистами.

Ключ RussiaAPI хранится только в server-side secret store. Разделяйте development, staging и production, ограничивайте доступ и журналируйте лишь безопасные метаданные. Неизвестную функцию, модель, квоту, подпись callback или поле ответа считайте неподтверждёнными, пока не проверите их в текущем разрешённом тестовом контуре.

Проверьте сценарий в RussiaAPI

Создайте собственный тестовый ключ в консоли, сверьте текущий каталог моделей и выполните обезличенный server-side smoke test. Расширяйте нагрузку и доступ только после измеримой проверки.

Открыть консоль RussiaAPI · Документы · Каталог моделей

FAQ

Нужна ли allowlist, если MCP server внутренний?

Да. Внутреннее размещение не делает модель, документ, пользовательский ввод или ошибочную конфигурацию доверенными. Allowlist задаёт проверяемую границу действий и помогает отключить один инструмент без остановки всего приложения.

Можно ли выдавать модели доступ на запись?

Только для заранее определённой операции с server-side проверкой прав, строгой схемой, пределами и, когда риск оправдывает, подтверждением человека. Вывод модели не является доказательством полномочия и не должен сам расширять доступ.

Хранит ли RussiaAPI права MCP server?

Нет, права и ресурсы определяет ваше приложение и его серверная политика. Проверьте актуальный каталог и договор для доступных API-возможностей; протокольная совместимость не гарантирует доступ к конкретным инструментам или моделям.

Читайте также