Защитите свой ключ Claude API
Безопасность ключа Claude API — это в основном скучная дисциплина: держите ключ вне системы контроля версий, ограничьте, сколько он может потратить, и отрепетируйте отзыв до того, как он понадобится. Разбираем конкретные настройки apiToken.sale — лимит расходов за всё время, дату истечения, именованные ключи под каждый инструмент — плюс схему хранения и план действий при утечке, который можно просто скопировать.
·
Что на самом деле может украденный ключ
Ваш ключ apiToken.sale (выглядит как sk-pool-•••) — это bearer-креденшел: любой, кто его предъявит, может запускать запросы к Claude, GPT, Gemini и Kimi за счёт вашего предоплаченного баланса. Второго фактора при запросе нет — владение ключом и есть доступ. Поэтому задача не в том, чтобы сделать утечки невозможными, а в том, чтобы сделать их дешёвыми, заметными и обратимыми.
Предоплата уже ограничивает худший сценарий текущим балансом, а лимит расходов за всё время сужает его ещё сильнее. Остаются неудобства и сюрпризы: атакующий, сливающий кредит в три часа ночи, или ключ, месяцами лежащий в публичном репозитории, потому что никто не заметил. И то и другое решается теми же тремя настройками и короткой отработкой ротации.
Читайте также: Лучшие практики Claude API
Три настройки, которые нужно задать до первого запроса
Каждый ключ, созданный в дашборде, поддерживает эти параметры. Настраивайте их при создании — прикручивать их после утечки уже поздно.
| Настройка | Что она делает | Когда использовать |
|---|---|---|
| Лимит расходов за всё время | Жёстко останавливает ключ, как только суммарные траты достигают заданной суммы, независимо от того, кто им пользуется | Каждый ключ, всегда — задайте сумму, которую проект вообще может стоить |
| Дневной period spend cap | Останавливает ключ, когда списания за текущий UTC-день достигают cap | Автономные агенты и CI, которые должны снова заработать завтра |
| Месячный period spend cap | Останавливает ключ, когда списания за текущий UTC-месяц достигают cap | Месячный бюджет на один клиентский ключ |
| Model allowlist | Отклоняет любую модель каталога, которой нет в списке | Ключ только для Haiku или Luna, который не должен вызывать Opus или Sol |
| Дата истечения | Автоматически отключает ключ в выбранную вами дату | Подрядчики, триалы, демо — любой временный доступ |
| Говорящее имя ключа | Через месяцы подскажет, какому инструменту и окружению служит ключ | Каждый ключ — скажете себе спасибо при отзыве в два часа ночи |
Выпускайте отдельный ключ на каждый инструмент и окружение вместо одного общего. Отзыв утёкшего ключа Cursor не должен ронять продакшн-бэкенд, а дашборд, полный ключей с именами prod-backend, cursor-laptop и ci-staging, с первого взгляда показывает радиус поражения.
Правила хранения, которые выдерживают встречу с реальностью
Одно правило покрывает почти всё: ключ живёт в переменной окружения или менеджере секретов, никогда — в исходном коде. На практике это .env-файл, добавленный в .gitignore до первого коммита, или менеджер вроде 1Password CLI, Doppler или AWS Secrets Manager, подставляющий переменную при запуске.
# .env — commit .env.example without values, never this file ANTHROPIC_BASE_URL=https://router.apitoken.sale ANTHROPIC_API_KEY=sk-pool-••• # .gitignore — add this before the first commit, not after .env
- История git — удаление файла следующим коммитом ключ не убирает; считайте его скомпрометированным и ротируйте.
- Клиентский JavaScript — всё, что попадает в бандл браузерного приложения, публично по определению; вызывайте API со своего бэкенда.
- Логи CI — вывод переменных окружения в шаге пайплайна печатает ключ в логи сборки; маскируйте секреты и никогда их не выводите.
- История shell — сырая команда curl -H "x-api-key: sk-pool-…" сохраняет ключ в файле истории; сначала экспортируйте его в переменную.
- Чаты и тикеты — вставленный в Slack, Telegram или баг-трекер ключ остаётся там навсегда и находится поиском.
Скриншоты и демонстрации экрана тоже считаются. Если ключ попал в запись звонка или на расшаренный скриншот — ротируйте его: десять минут стоят дешевле альтернативы.
Подключение к инструментам без хардкода
Все основные клиенты читают учётные данные из окружения, так что в коде ничего хранить не нужно:
# Anthropic SDK and Claude Code export ANTHROPIC_BASE_URL=https://router.apitoken.sale export ANTHROPIC_API_KEY=sk-pool-••• # OpenAI-compatible clients (GPT models, and Claude via the same lane) export OPENAI_BASE_URL=https://router.apitoken.sale/v1 export OPENAI_API_KEY=sk-pool-•••
SDK Anthropic и OpenAI подхватывают эти переменные автоматически — если вы передаёте ключ строковым литералом в конструктор, это тот самый запашок, который надо устранить. На серверах подставляйте переменную из хранилища секретов вашей платформы (настройки env у хостинга, Docker secrets, EnvironmentFile в systemd), а не запекайте её в образ или конфиг.
Ротация в четыре шага
Ротация обходится дёшево, если вы один раз её отрепетировали. Такой порядок держит все клиенты авторизованными на всём пути:
- 01Создайте заменяющий ключ в дашборде. Задайте тот же лимит расходов за всё время, что и у старого, дату истечения, если доступ временный, и имя с датой, например prod-backend-2026-08.
- 02Обновите клиент: поменяйте значение переменной окружения или секрета, затем перезапустите или передеплойте, чтобы процесс действительно перечитал её.
- 03Следите за использованием в дашборде, пока запросы не пойдут по новому ключу, а старый не затихнет.
- 04Отзовите старый ключ. Только теперь — отозвать его первым шагом значит своими руками устроить избежимый простой с 401.
Как часто ротировать? По фиксированному расписанию — только если этого требует ваша политика безопасности. Иначе ротируйте, когда инструмент выводится из эксплуатации, подрядчик уходит с проекта, ноутбук потерян или вы просто не можете вспомнить все места, куда вставляли ключ. Неуверенность — сама по себе повод для ротации.
Первые десять минут после утечки
- 01Немедленно отзовите раскрытый ключ в дашборде. Это решает всё: новые запросы прекращаются мгновенно, а лимит расходов за всё время ограничивает то, что успело произойти до этого.
- 02Откройте статистику использования и поищите траты или модели, которых вы не узнаёте, — так вы поймёте, когда ключом начали пользоваться.
- 03Выпустите замену и обновите клиенты в порядке ротации, описанном выше.
- 04Устраните источник: вычистите ключ из истории git, отредактируйте логи CI и ротируйте все остальные секреты, которые жили в том же файле или сообщении.
Если ключ хоть ненадолго попал в публичный репозиторий на GitHub, считайте, что его уже собрали, — автоматические сканеры подбирают новые коммиты за считаные минуты. «Я быстро удалил» — не защита; защита — отзыв ключа.
Частые вопросы
Что будет, если мой ключ Claude API украдут?
Тот, кто им завладел, сможет тратить ваш предоплаченный баланс на модели Claude, GPT, Gemini и Kimi, пока вы не отзовёте ключ или он не упрётся в лимит расходов за всё время. Сначала отзовите ключ в дашборде, разбирательство — потом.
Лимит расходов — за день, за месяц или за всё время?
Все три. Общий лимит расходов ограничивает сумму за всё время жизни ключа. Необязательные period spend cap сбрасываются с UTC-днём или UTC-месяцем. Можно задать model allowlist. Предоплаченный баланс по-прежнему ограничивает весь аккаунт, а дата истечения по-прежнему завершает временный доступ.
Стоит ли использовать один API-ключ для всех инструментов?
Нет. Выпускайте отдельный, понятно названный ключ на каждый инструмент и окружение: тогда отзыв утёкшего ключа не заденет остальные клиенты, а статистика в дашборде покажет, какой инструмент сколько потратил.
Как ротировать ключ Claude API, не сломав приложение?
Сначала создайте заменяющий ключ, обновите клиент и убедитесь по дашборду, что трафик пошёл по новому ключу, и только потом отзовите старый. Отзыв до обновления клиентов просто превращает ротацию в простой.
Я закоммитил свой API-ключ на GitHub. Достаточно ли удалить файл?
Нет — ключ остаётся в истории git, а публичные репозитории сканируются за считаные минуты. Отзовите и ротируйте ключ, затем вычистите историю; одно удаление не защищает вообще ничего.
Войдите через Google или GitHub и получите приветственный бонус $5 на баланс платформы — без карты.