Credential audit n8n: ревизия доступов и секретов ¶
Обновлено: 2026-05-29
Короткий ответ ¶
Credential audit в n8n нужен, чтобы понять, какие API keys, OAuth tokens, database passwords и service accounts реально используются workflow, кому они принадлежат и какие права имеют. Хороший аудит не сводится к «поменять все пароли»: сначала строят инвентарь, находят личные аккаунты сотрудников, лишние scopes, неиспользуемые credentials и критичные write-доступы, затем планируют ротацию без остановки production.
Почему credentials становятся риском ¶
n8n часто подключает CRM, платежи, почту, таблицы, AI-провайдеров, базы данных и внутренние API. Один workflow может иметь больше прав, чем отдельный сотрудник: читать клиентов, менять сделки, отправлять письма, создавать платежи или выгружать персональные данные. Если credential создан на личный аккаунт сотрудника или имеет лишние scopes, автоматизация становится слабым местом.
Аудит особенно нужен после:
- ухода сотрудника;
- перехода workflow в production;
- подключения платежей или CRM;
- добавления AI-сервисов;
- миграции на self-hosted;
- инцидента с 401/403 или подозрением на утечку;
- массового копирования workflow между окружениями.
1. Инвентарь credentials ¶
Начните не с ротации, а с таблицы. Нужно понять, что вообще существует.
| Поле | Что записать | Зачем |
|---|---|---|
| Credential name | понятное имя без секрета | найти зависимые workflow |
| Тип | OAuth, API key, DB, SMTP, Basic Auth | выбрать способ проверки |
| Владелец | команда или сервисный аккаунт | убрать личные доступы |
| Используется где | workflow и nodes | оценить риск отключения |
| Права/scopes | read, write, admin, billing | найти лишние привилегии |
| Последняя проверка | дата smoke test | не держать мёртвые ключи |
| Дата ротации | плановая или аварийная | не забыть обновление |
Не называйте credential Google или CRM. Лучше: prod-bitrix24-leads-write-service, staging-google-sheets-readonly, prod-openai-support-drafts. По имени должно быть понятно окружение, сервис, действие и владелец.
2. Найти личные аккаунты ¶
Самая частая проблема — production workflow работает через аккаунт конкретного сотрудника: его Google, CRM, Telegram bot, email или OAuth app. Когда человек увольняется, меняет пароль или теряет права, workflow ломается.
Проверьте:
- чей email указан в OAuth consent или connected account;
- кто владелец API key в CRM;
- есть ли сервисный аккаунт или shared mailbox;
- что произойдёт при удалении пользователя;
- кто может сделать reauth, если token истёк;
- есть ли второй администратор приложения.
Для production лучше использовать сервисные аккаунты, app owner или team-owned credentials, а не личные токены.
3. Scopes и принцип минимальных прав ¶
Credential должен иметь ровно те права, которые нужны workflow. Если workflow только читает строки из Google Sheets, ему не нужен доступ ко всей почте. Если workflow создаёт лиды, ему не обязательно удалять сделки.
| Сценарий | Хорошо | Плохо |
|---|---|---|
| Чтение справочника | read-only scope | полный admin доступ |
| Создание лидов | create/update lead | delete/export all data |
| AI-обработка тикета | доступ к нужному тексту | весь mailbox без фильтра |
| База данных | отдельный user для нужных таблиц | superuser/password от админа |
| Webhook validation | secret для подписи | общий секрет во всех проектах |
Если сервис не поддерживает тонкие scopes, компенсируйте ограничениями на уровне workflow: allowlist действий, IF-фильтры, отдельная staging/prod credential, журнал write-операций.
4. Проверка секретов в workflow ¶
Даже если n8n credentials настроены правильно, секреты могут оказаться в других местах: Code node, Set node, prompt для AI, примеры payload, документация, HTML-страницы, exports, screenshots.
Ищите:
- строки вида
sk-,token,secret,apikey,password; - Authorization headers в HTTP Request node;
- Basic Auth, сохранённый как текст;
- приватные URL с embedded token;
- webhook secret в открытом примере;
- ключи в AI prompt или system message;
- payload-файлы в репозитории.
Хорошая практика: секреты живут в credentials или secret manager, а workflow содержит только ссылки на них и безопасные placeholder-значения.
5. План ротации без простоя ¶
Не меняйте все credentials одновременно. Ротация должна быть похожа на deploy: подготовка, тест, переключение, rollback.
Порядок:
- Выбрать один credential и список зависимых workflows.
- Создать новый ключ или OAuth app рядом со старым.
- Проверить новый credential на staging или read-only операции.
- Переключить один workflow с низким риском.
- Выполнить smoke test.
- Переключить остальные workflow.
- Отозвать старый ключ.
- Записать дату, owner и результат.
Для OAuth учитывайте reauth: иногда нельзя просто заменить secret, нужно заново пройти авторизацию. Для внешних API проверьте, можно ли временно держать два активных ключа.
6. Что делать при подозрении на утечку ¶
Если есть шанс, что ключ попал наружу, не ждите полного расследования.
| Шаг | Действие |
|---|---|
| 1 | определить сервис, credential, права и затронутые workflows |
| 2 | временно остановить опасные write-действия |
| 3 | отозвать или ограничить ключ у провайдера |
| 4 | создать новый credential и smoke test |
| 5 | проверить логи внешнего сервиса на подозрительные действия |
| 6 | обновить incident log и postmortem |
Если credential имел доступ к персональным данным или деньгам, подключайте юридическую/безопасностную процедуру компании, а не только n8n-команду.
7. Особенности AI credentials ¶
AI-ключи часто недооценивают: «это же просто генерация текста». На практике они могут привести к большим расходам, утечке контента или отправке чувствительных данных внешней модели.
Проверьте:
- лимиты бюджета и rate limit;
- кто может использовать ключ;
- какие workflow отправляют персональные данные;
- есть ли redaction до AI node;
- логируется ли prompt целиком;
- есть ли отдельные ключи для dev/staging/prod;
- как быстро ключ можно отозвать.
Метрики аудита ¶
После первого аудита полезно вести простые показатели:
- доля credentials с назначенным owner;
- доля личных аккаунтов в production;
- количество credentials без даты проверки;
- количество write credentials без smoke test;
- количество секретов, найденных вне credentials;
- средний возраст ключа;
- количество workflow с admin-level scopes.
Контрольный чеклист ¶
- У каждого credential есть владелец и окружение.
- Личные аккаунты в production заменены или имеют план замены.
- Scopes соответствуют реальным действиям workflow.
- Секреты убраны из Code, Set, prompt и экспортов.
- Для критичных credentials есть дата ротации.
- Ротация проверена smoke test, а не только сохранением формы.
- Старые ключи отозваны после переключения.
- При утечке есть короткий runbook.
FAQ ¶
Как часто проводить credential audit?
Для production-инстанса — минимум ежеквартально и после кадровых изменений, инцидентов, новых платежных/CRM-интеграций или миграций.
Можно ли просто пересоздать все credentials за один день?
Можно, но рискованно. Лучше идти по критичности и зависимости workflow, иначе легко получить массовый простой.
Что хуже: старый ключ или лишние scopes?
Оба риска важны. Старый ключ повышает вероятность компрометации, а лишние scopes увеличивают ущерб, если компрометация произойдёт.
Нужно ли хранить owner внутри имени credential?
Можно частично: окружение и назначение — да. Имя человека лучше хранить в реестре, чтобы не переименовывать credential при смене ответственного.
Как проверять credentials, которые пишут данные?
Через staging, read-only endpoint, тестовый объект или безопасный dry-run. Не делайте smoke test записью в реальную CRM без уникальной тестовой метки.
Как применять playbook в команде ¶
Playbook «/playbooks/credential-audit/» должен быть понятен человеку, который не писал workflow. Поэтому в нём нужны входной сигнал, частота запуска, критерий тревоги, ответственный и ожидаемое действие после срабатывания.
Используйте этот материал как операционную инструкцию: что проверить, где посмотреть логи, как понять масштаб проблемы и когда эскалировать.
| Слой | Что зафиксировать | Зачем |
|---|---|---|
| Вход | входной item по теме «/playbooks/credential-audit/»: источник события, внешний ID, время получения и нормализованные поля | позволяет повторить проблему без доступа к production-секретам |
| Контроль | successful_executions, skipped_items, retry_count, error_branch_usage, manual_override_count | показывает деградацию раньше, чем пользователи начинают писать в поддержку |
| Безопасность | случайно расширить права credentials, сохранить секреты в логах или отдать действие без approval | снижает риск скрытых дублей, утечки данных и неконтролируемых write-действий |
| Готовность | есть тест на happy path, пустой вход, повтор и сбой внешнего сервиса для «/playbooks/credential-audit/» | делает статью пригодной для runbook, а не только для чтения |
Пример безопасного входного контракта ¶
{
"source": "manual|webhook|schedule|api",
"external_id": "stable-id-from-source",
"received_at": "2026-05-29T10:00:00Z",
"payload_version": "v1",
"dry_run": true,
"audit": {"workflow_id": "...", "execution_id": "..."}
}
Критерий готовности ¶
- есть понятный вход, выход и владелец процесса
- проверены пустой input, повтор события и ошибка внешнего сервиса
- результат логируется без секретов и персональных данных
- страница связана с соседними рецептами, ошибками или playbook по теме