VIBE CODINGБлок 04 · Интеграции и безопасность4.2

Урок 4.2

Ключи, доступы и безопасность

Как безопасно давать сервисам доступ друг к другу и не терять контроль над ключами.

Когда вы просите агента подключить чужой сервис к проекту, сервис должен понять, кто именно к нему пришел. Иначе кто угодно смог бы тратить ваши деньги или читать ваши данные от вашего имени. Для этого есть два механизма. Одни сервисы выдают API-ключ, другие пускают через кнопку «Подключить». Оба способа несложные, но у обоих есть правила безопасности, и нарушение этих правил стоит денег.

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

У ключа могут быть разные права доступа. Это называется scope или разрешения. Один ключ умеет только читать список заказов, другой может создавать платежи, третий получает полный доступ к аккаунту. Когда сервис дает выбор, выдавайте агенту ключ с минимальными правами под конкретную задачу. Для формы обратной связи не нужен ключ, который может удалять клиентов из CRM.

Главную вещь нужно держать в голове. API-ключ нельзя коммитить в репозиторий. Особенно публичный. Боты сканируют GitHub каждые несколько минут, и если ключ попал в открытый репозиторий, через пару минут с вашего аккаунта может уйти весь баланс. Такое происходит регулярно.

Правильно хранить ключи в специальном файле .env в корне проекта. Этот файл добавляется в .gitignore , и git его в репозиторий не положит.

# .env YOOKASSA_SECRET_KEY=live_3kJh2nMs7BzQ8xR4dGh... TELEGRAM_BOT_TOKEN=7234567890:AAH... UNISENDER_API_KEY=6qadxm...

Код, который написал агент, читает ключи из .env и использует их. Сам файл остается у вас на компьютере и не уезжает на GitHub. Когда вы выкладываете сайт или бота на хостинг, ключи задаются через настройки хостинга (Vercel, Netlify, Reg.ru Cloud, Selectel это поддерживают).

Если вы случайно закоммитили ключ, не пытайтесь вычистить его из истории git. Это сложно и часто оставляет следы. Правильный путь другой. Немедленно идите в сервис, который выдал ключ, и отзовите его. Дальше выпустите новый. Старый ключ может уже быть украден, оставлять его рабочим нельзя.

Claude Code умеет работать с .env-файлами без участия пользователя. Достаточно один раз сказать "сохрани ключ в .env", и агент сам положит туда строку, добавит .env в .gitignore и пропишет чтение из .env в коде.

Когда ключа нет и есть только кнопка «Подключить» Иногда вы идете подключать сервис, ожидая увидеть API-ключ, а никакого поля с ключом в настройках нет. Есть только кнопка «Подключить» или «Connect». Так работают Яндекс ID (через него подключаются Я.Диск, Я.Трекер, Я.Метрика), amoCRM, Bitrix24, Notion, Google (Таблицы, Календарь, Диск) и многие другие.

За кнопкой стоит протокол OAuth. Это второй стандартный способ дать одному сервису доступ к вашему аккаунту в другом сервисе. Выглядит он так.

1. Жмете «Подключить Notion» в сервисе, который настраиваете. 2. Открывается окно самого Notion: «Подключаемый сервис хочет доступ к вашим страницам. Разрешить?» 3. Логинитесь в Notion (если еще не залогинены), нажимаете «Разрешить». 4. Notion отдает сервису токен доступа и закрывает окно. 5. Подключение становится зеленым, все работает.

Технические подробности этого обмена закрыты внутри платформы. Вам не нужно знать, что именно летит между сервисами, что такое redirect_uri и refresh token. Достаточно понимать три вещи.

OAuth и API-ключ заменяют друг друга. Когда сервис дает OAuth-кнопку, ключа в .env не будет, токен хранится внутри платформы, через которую вы подключаетесь (например, Salebot или Claude Desktop). Когда сервис дает ключ, никаких OAuth-окон не открывается.

Отзыв доступа делается в настройках вашего аккаунта в самом сервисе. Файл .env тут ни при чем. У Яндекс ID это раздел в id.yandex.ru . У Google аналогичный раздел в myaccount.google.com → «Безопасность» → «Сторонние приложения с доступом». У Notion и amoCRM это «Интеграции» или «Подключенные приложения» в настройках профиля. Если вы перестали пользоваться подключением, зайдите туда и отзовите доступ, иначе платформа продолжает иметь право читать ваши данные.

При подключении MCP-сервера к Claude вы часто увидите именно OAuth-окно. Это нормально и безопасно, если сервер официальный. Опасно подключать MCP от непроверенных авторов, которые получат через OAuth доступ к вашим документам или CRM от вашего имени.

Безопасность доступов Как только у вас появляются интеграции, появляются и риски. Ключи, OAuth-доступы, чужие MCP-серверы, биллинг по API. Тема не сложная, но проигнорировать ее обходится дорого. Ниже сводный чек-лист, держите его в голове при работе с любыми внешними сервисами.

Ключи и токены кладем в специальные поля для секретов. Все, что выглядит как длинная строка из букв и цифр (API- ключ, токен бота), вводится в настройках проекта, хостинга или подключаемого сервиса. У таких полей обычно есть названия вроде Secrets , Environment variables , API keys , «Переменные окружения» или «Секреты». Они сделаны специально для ключей, поэтому сервис не показывает их лишний раз и не вставляет в публичные страницы.

В код ключи не вставляем. Если агент работает с локальным проектом, он обычно кладет ключ в .env , добавляет .env в .gitignore и прописывает чтение ключа в коде. Если проект живет на хостинге, тот же ключ задается в настройках хостинга (Vercel, Railway, Netlify, Reg.ru Cloud, Selectel это поддерживают). Если ключ все-таки утек в код, README, скриншот или публичный чат, не пытайтесь прятать следы. Идите в сервис и сразу отзывайте ключ.

Ключам выдаем минимальные права. Если сервис позволяет выбрать scope, создавайте отдельный ключ под задачу. Боту для рассылки нужен доступ к отправке сообщений, но не к настройкам биллинга. Интеграции с CRM часто хватает права читать и создавать лиды, без удаления сделок и экспорта всей базы.

OAuth-доступы периодически чистим. Раз в пару месяцев заходите в настройки своего аккаунта Яндекс ID ( id.yandex.ru ), Google ( myaccount.google.com → «Безопасность»), Notion, amoCRM и удаляйте все, чем не пользуетесь.

Каждое забытое подключение продолжает иметь право читать ваши документы или CRM от вашего имени.

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

Лимиты и биллинг. В платных API (сервисы рассылок SMS и писем, YandexGPT, GigaChat) в личном кабинете выставляйте месячный лимит расходов. Это страховка на случай, если ключ утек или скрипт зациклился. Без лимита счет на десятки тысяч рублей за ночь превращается в типовую историю, которая регулярно случается у тех, кто работает с агентами.

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

Самостоятельная работа В этом задании вы подключите Claude к сервису, который умеет публиковать сообщения в Telegram. Здесь появляется ключ доступа: сервис должен понять, что вы разрешили ему писать в ваш канал.

Тестовый Telegram-канал

Создайте в Telegram канал Vibecoding Test . Оставьте его приватным. Опубликуйте в нем одно сообщение руками:

Канал создан

Так вы проверите, что канал открыт и вы можете в него писать.

Подключение Upload-Post

Откройте Upload-Post и подключите к нему канал Vibecoding Test по инструкции сервиса. После подключения Upload-Post выдаст ключ для MCP-сервера https://mcp.upload-post.com/mcp .

Не отправляйте этот ключ в публичные чаты и не вставляйте его в опубликованные страницы. Ключ дает сервису право писать в ваш канал.

Откройте Claude Desktop или claude.ai, зайдите в настройки коннекторов и добавьте Upload-Post как custom connector. Используйте адрес MCP-сервера и ключ, который выдал Upload-Post.

Публикация через Claude

Откройте новый чат в Claude и дайте задачу.

Через подключенный Upload-Post опубликуй в моем Telegram-канале Vibecoding Test сообщение: "Проверка доступа работает".

Разрешите действие, если Claude попросит подтверждение.

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

Где отозвать доступ

Откройте настройки Upload-Post и найдите подключение канала. Затем откройте настройки коннекторов в Claude и найдите подключенный Upload-Post.

Проверка: вы видите два места управления доступом. В Upload-Post можно отключить канал или перевыпустить ключ. В Claude можно удалить коннектор, чтобы Claude больше не мог пользоваться этим доступом.