Агент с полным доступом к системе — это стажёр с ключами от сейфа. Он не злой, просто однажды перепутает кнопку.

Что это

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

Когда в систему приходят ИИ-агенты и автоматизации, вопрос прав становится не административным, а инженерным. Агент — это программа, которая выполняет инструкции. Он может ошибиться, неверно истолковать контекст, сработать на новых данных неожиданным образом. Если у него есть доступ ко всему — одна ошибка затронет всё.

Ключевое понятие — принцип минимальных привилегий (least privilege). Каждый участник системы получает только те права, которые нужны для его конкретной задачи. Не больше. Если агенту нужно читать базу знаний и писать в одну таблицу — он получает чтение из базы и запись в таблицу. Доступ к настройкам, удалению, административным функциям — закрыт.

Важно: по умолчанию всё закрыто. Доступ открывают точечно — только то, что нужно для задачи, ничего сверх.

Зачем нужно

Ограничение прав решает четыре конкретные проблемы, которые возникают когда агент работает с реальными данными.

  • Защита от случайного удаления. Агент может удалить нужные записи, решив, что они неактуальны. Без права на удаление — не сможет.
  • Предотвращение утечки ключей. API-ключ с полным доступом, попавший в логи или публичный репозиторий, открывает всю систему. Ключ с минимальными правами — открывает только одну функцию.
  • Локализация каскадных ошибок. Каскадная ошибка — сбой, при котором изменение в одном месте ломает другие процессы. Если агент не может менять настройки, каскад не запустится.
  • Ограничение ущерба при компрометации. Если злоумышленник перехватит контроль над агентом, он получит только те права, которые есть у агента. Минимальные привилегии = минимальный ущерб.

Как устроено

Система прав строится из трёх слоёв: роли, ключи и системные разрешения. Каждый слой работает независимо, но вместе они образуют контур доступа.

Типы ролей

Роль — это именованный набор прав. Пять базовых типов покрывают большинство сценариев с агентами и интеграциями:

РольЧто можетПример
АдминВсё: создание, удаление, настройка правВладелец проекта
РедакторСоздание и редактирование контентаАвтор блога
Агент / БотЧтение + запись в определённых базахКонтент-агент в Notion
ИнтеграцияТолько нужные операцииWebhook-обработчик
ЧитательТолько просмотрПосетитель сайта

API-ключи

Каждый API-ключ — удостоверение, которое система предъявляет при каждом запросе. По нему сервис понимает, какие ресурсы доступны, а какие — нет. На практике работает простое правило: для каждой интеграции создают свой ключ и обрезают права до минимума. Один ключ на бота, отдельный на агента, третий на сайт. Если один скомпрометируют — другие продолжают работать.

Права в Notion

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

Уровень гранулярности — страница или база целиком. Отдельные записи внутри базы недоступны для точечного шеринга: расшариваете базу — открываете все строки. Это ограничение Notion, его нельзя обойти настройками.

Права в базах данных

В PostgreSQL и Supabase granularity доступа выше: каждая таблица и каждая операция (SELECT, INSERT, UPDATE, DELETE) управляются отдельно. Можно выдать агенту чтение из таблицы пользователей и запись в таблицу логов — и всё, ничего сверх этого. В отличие от Notion, где минимальная единица — страница, здесь минимальная единица — строка с правами на конкретное действие над конкретной таблицей.

Когда использовать

Принцип минимальных привилегий применяется всегда, но есть сценарии, где он критичен:

СитуацияПодходит / не подходитПочему
Агент пишет контент в NotionПодходитДоступ только к нужным базам, без административных страниц
Бот обрабатывает webhookПодходитТолько нужные операции, без чтения пользовательских данных
Агент анализирует базу клиентовПодходитТолько чтение, без права на изменение или удаление
Одна интеграция для всегоНе подходитОдин ключ на бота, агента и сайт — компрометация открывает всё
Агент с правами админа «на всякий случай»Не подходитЕсли агенту нужна одна операция — давать все — избыточный риск

Пример

Настройка прав для агента в Notion — пять шагов от создания интеграции до проверки:

# 1. Создайте отдельную интеграцию для каждого агента
#    Notion → Settings → Connections → Develop integrations

# 2. Расшарьте интеграции только нужные страницы и базы
#    Страница → ... → Add connections → выбрать интеграцию

# 3. Приватные страницы, настройки и личные
#    пространства — не расшаривать интеграции

# 4. Проверяйте периодически, какие страницы расшарены
#    Settings → Connections → выбрать интеграцию → список страниц

# 5. Ротация: перевыпускайте ключ при смене подрядчика
#    или подозрении на утечку

Внимание: Notion не умеет давать доступ к отдельным строкам базы. Расшариваете базу — открываете всё содержимое. Если часть записей секретная — выносите их в отдельную базу.

Пять правил работы с ключами

  • Один ключ — одна интеграция. Бот, агент и сайт — три разных ключа. Если один утёк, два других продолжают работать, и сервис не падает целиком.
  • Минимальные права. Задача агента — читать базу знаний и писать в одну таблицу? Вот это и нужно дать. Настройки, приватные заметки, административные разделы — лишнее. Права должны зеркально повторять задачу, не покрывать её «с запасом».
  • Ротация ключей. Сотрудник уволился, подрядчик сменился, ключ мог утечь — перевыпускайте. Старую интеграцию удаляете, новую создаёте с тем же набором прав, переменные окружения обновляете. Регулярная смена ключей — даже без подозрений — снижает риск незамеченной утечки.
  • Логирование доступа. Каждый запрос к данным — кто, когда, какую операцию — должен попадать в журнал. Когда что-то сломается, лог покажет цепочку вызовов от первого триггера до последствий.
  • Запрет на деструктивные операции. Удаление записей, изменение прав доступа, отзыв ключей — за это отвечает человек, не программа. Агент с правом DELETE — агент, который однажды сотрёт нужное, потому что контекст показался ему неактуальным.

Ограничения

Ограничения

Доступ на уровне страниц, не записей — В Notion права настраиваются на уровне страниц и баз данных, а не отдельных записей.

Если расшарить базу данных — интеграция получит доступ ко всем записям внутри. Разделить доступ по строкам нельзя. Если агент должен видеть только свои задачи — придётся использовать отдельные базы или фильтровать на стороне приложения, а не средствами прав Notion.

Необходимость ручного аудита расшаренных страниц — Notion не показывает уведомлений, когда интеграция получает доступ к новым страницам.

Список расшаренных страниц нужно проверять вручную: Settings → Connections → выбрать интеграцию. Без периодической проверки список расшаренных страниц разрастается — агент получает доступ к страницам, которые ему не нужны.

Нет встроенной ротации ключей — Notion не требует ротации API-ключей автоматически и не предупреждает о старых ключах.

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

Права в БД требуют отдельной настройки — Если агент работает не только с Notion, но и с реляционной базой (PostgreSQL, Supabase), права настраиваются отдельно — на уровне таблиц и операций.

Notion-ключ не покрывает доступ к БД, и наоборот. Нужно настраивать оба контура независимо.

Антипаттерны

Антипаттерны

Один ключ на все интеграции — Использование одного API-ключа для бота, агента и сайта одновременно.

Компрометация одного ключа открывает злоумышленнику доступ ко всем сервисам сразу. Каждый сервис должен иметь свой ключ с минимальными правами. Если ключ утёк — ротация затрагивает только один сервис, остальные продолжают работать.

Права админа «чтобы наверняка работало» — Выдача агенту административных прав на всякий случай — «вдруг понадобится что-то настроить».

Агент не должен настраивать систему, он должен выполнять свою задачу. Если агенту нужна одна операция — давать все — это избыточный риск. Правильный подход: запросить конкретную операцию, проверить её, добавить только её.

Деструктивные операции в правах агента — Если в правах агента есть DELETE, admin или manage — это бомба с часовым механизмом.

Программа не различает «устаревшая запись» и «важная запись, которую кто-то забыл обновить». Человек различает. Поэтому удаление, изменение прав и отзыв ключей — исключительно ручные операции. Запрет — не рекомендация, а правило по умолчанию.

Хранение ключей в коде или репозитории — API-ключи в исходном коде, в конфигурационных файлах репозитория или в логах.

Ключ в репозитории — ключ в открытом доступе. Все ключи должны храниться в переменных окружения или секрет-менеджере, не в коде. Попадание ключа в лог — тоже утечка: логи часто доступны шире, чем код.

Чеклист

Чеклист

У каждой интеграции свой API-ключ — Проверьте, что бот, агент и сайт используют разные ключи.

Если в коде один и тот же ключ используется в нескольких местах — разделите. Создайте отдельную интеграцию для каждого сервиса, перешарьте только нужные страницы, обновите переменные окружения.

Агент не имеет доступа к административным страницам — Откройте Settings

→ Connections → выберите интеграцию. В списке расшаренных страниц не должно быть настроек, приватных пространств и административных разделов. Если есть — уберите доступ. Агент должен видеть только те страницы, которые нужны для его задачи.

Права соответствуют принципу минимальных привилегий — Для каждого агента выпишите список операций, которые он реально выполняет.

Сравните с правами, которые у него есть. Если прав больше, чем операций — избыточные нужно убрать. Права = задача, не права = «на всякий случай».

Деструктивные операции запрещены — Проверьте, что агент не может удалять данные, менять права доступа или отзывать ключи.

Эти операции — только у человека. Если в правах агента есть DELETE, admin или manage — убрать.

Ключи хранятся в переменных окружения — Проверьте, что ни один API-ключ не встречается в исходном коде, конфигурационных файлах репозитория или логах.

Все ключи — в переменных окружения или секрет-менеджере. Запустите поиск по репозиторию: grep -r ‘ntn_’ . — не должно найти ничего кроме .env (который в .gitignore).

Настроена ротация ключей — Проверьте, когда последний раз менялись API-ключи.

Если ключу больше шести месяцев — пора ротировать. После увольнения сотрудника, смены подрядчика или подозрения на утечку — ротация обязательна, не отложенная.

Доступ логируется — Проверьте, что обращения к данным фиксируются — кто, когда и какие операции выполнял.

Без логов разбор инцидента превращается в гадание. Если система не пишет логи доступа — включите или добавьте на стороне приложения.

Есть план действий при утечке ключа — Опишите шаги: перевыпустить ключ, обновить переменные окружения, удалить старую интеграцию, проверить логи на предмет несанкционированных запросов.

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

Ссылки

Ссылки