API-ключ для Claude Code нужен не всегда: в обычном интерактивном запуске можно пройти авторизацию через Anthropic Console или использовать другой поддерживаемый способ входа. Ключ становится полезен, когда запуск выполняется в скрипте, CI/CD, контейнере или через SDK и процесс должен получить доступ к моделям без ручного входа. Главная задача при этом не в том, чтобы «вставить строку в терминал», а в том, чтобы разделить секрет, окружение, права и процедуру отзыва.
Когда Claude Code нужен API-ключ
Сначала определите сценарий. Для ручной работы разработчика проще использовать штатную авторизацию Claude Code: программа открывает поток входа, а учётные данные сохраняются в предназначенном для этого хранилище. Если же Claude Code запускается без интерактивного терминала, в автоматизации обычно передают секрет через окружение или секрет-хранилище. Официальная документация также описывает развёртывание через Anthropic API, Amazon Bedrock и Google Vertex AI, поэтому название переменной и способ выдачи доступа зависят от выбранной платформы.
Не смешивайте API-ключ Anthropic с подпиской Claude.ai. Это разные контуры доступа и оплаты: наличие веб-доступа не означает, что произвольный скрипт должен получить секрет, а наличие ключа не означает, что он безопасно подходит для каждой команды. Перед настройкой ответьте на три вопроса: где выполняется процесс, кто имеет право его запустить и какой минимальный доступ ему необходим.
| Сценарий | Предпочтительный способ | Риск |
|---|---|---|
| Ручная работа в проекте | Интерактивная авторизация Claude Code | Локальное устройство и доступ пользователя |
| Локальный скрипт | Переменная окружения или helper | Утечка через shell history и логи |
| CI/CD | Секрет CI-платформы | Вывод в логи и чрезмерные права job |
| Команда | Центральный шлюз или секрет-хранилище | Сложность ротации и аудита |
Как создать отдельный ключ
Ключ создают в Anthropic Console, если выбран прямой доступ к Anthropic API. Для автоматизации разумно выделить отдельный ключ под конкретную интеграцию, а не переиспользовать личный секрет. Так проще понять, какой процесс расходует лимит, удалить только один скомпрометированный доступ и не останавливать остальные сценарии. Названия полей, лимиты и доступные настройки могут изменяться, поэтому перед созданием проверьте текущую страницу Console и документацию Anthropic.
Никогда не вставляйте настоящий секрет в пример статьи, README, issue или сообщение в чате. Учебный пример ниже использует условное значение:
export ANTHROPIC_API_KEY='sk-ant-example-only'
claude -p "Проверь структуру проекта и перечисли риски"
Строка с приставкой sk-ant-example-only не является рабочим ключом. В настоящей оболочке значение должно приходить из защищённого источника. Проверьте также, что команда не печатает окружение целиком и что диагностический режим не раскрывает заголовки запросов.
Переменная окружения и область действия
ANTHROPIC_API_KEY удобна тем, что код и конфигурационные файлы не содержат самого секрета. Переменная живёт в окружении конкретного процесса: дочерняя команда может её получить, но файл проекта от этого не меняется. Это снижает риск случайного коммита, однако не делает секрет невидимым для всех. Пользователь с доступом к процессу, отладчику, дампу окружения или некорректным логам всё ещё может его увидеть.
Для разовой проверки задавайте переменную только на время команды:
ANTHROPIC_API_KEY="$CLAUDE_API_KEY_FROM_VAULT" claude -p "Составь план проверки"
Для локальной разработки используйте менеджер секретов операционной системы или файл, который исключён из контроля версий. Файл .env допустим только при строгом контроле доступа и в связке с .gitignore; сам по себе .gitignore не удаляет уже закоммиченный секрет. Если ключ когда-либо попал в Git, считайте его раскрытым: удалите из истории по процедуре проекта и отзовите в Console.
В конфигурациях шлюза Anthropic отдельно описаны ANTHROPIC_AUTH_TOKEN и apiKeyHelper. Не копируйте эти варианты механически: helper может быть полезен для короткоживущих токенов и ротации, но его скрипт тоже должен быть защищён, а права на запуск — ограничены.
Как хранить ключ в CI/CD
В CI секрет добавляют в хранилище переменных платформы, а в job передают только нужному шагу. Не записывайте ключ в команду, которая будет отображаться в логе, и не используйте режимы, печатающие все переменные окружения. Для pull request из внешних репозиториев секреты обычно не должны передаваться автоматически: иначе автор изменения сможет превратить проверку в отправку ключа наружу.
- Ограничьте секрет конкретным проектом и окружением.
- Разделите ключи для теста, staging и production.
- Не передавайте ключ в дочерние процессы без необходимости.
- Замаскируйте секрет в логах и проверьте маскирование на тестовом значении.
- Запретите job изменять настройки доступа и публиковать результат без отдельного разрешения.
Если Claude Code вызывается в non-interactive режиме, ограничивайте не только секрет, но и инструменты. В CLI есть параметры --allowedTools и --disallowedTools. Они не заменяют ревью кода и политики CI, но уменьшают поверхность ошибки. Опасный флаг, отключающий запросы разрешений, нельзя включать «для удобства» в непроверенном окружении.
Ключ, права и стоимость: что контролировать
Секрет отвечает на вопрос «кто может обратиться к API», но не описывает весь процесс управления расходами. Составьте небольшой журнал: владелец, назначение, окружение, дата выдачи, дата последней проверки и процедура отзыва. Фактические тарифы, лимиты и названия моделей сверяйте в Console и официальной документации непосредственно перед публикацией; в статье не следует закреплять быстро устаревающие цифры.
| Контроль | Что проверить | Что не делать |
|---|---|---|
| Доступ | Кто владелец и где используется ключ | Один личный ключ для всей команды |
| Секрет | Хранилище, маскирование, права чтения | Ключ в коде, issue или скриншоте |
| Инструменты | Список разрешённых действий Claude Code | Безусловно разрешать все команды |
| Наблюдаемость | Ошибки, расход, необычная активность | Печатать заголовки и окружение в лог |
У API могут быть ошибки авторизации, ограничения частоты, сетевые сбои и ошибки конфигурации. Не повторяйте запрос бесконечно: ограничивайте число попыток, применяйте задержку и отделяйте повторяемые ошибки от отказа в доступе. При автоматическом исправлении кода сохраняйте diff и требуйте отдельного контроля перед слиянием.
Что делать при утечке
Утечка — это не повод сначала выяснять, использовал ли кто-то ключ. Сразу остановите дальнейшее распространение, отзовите или удалите ключ в Console, найдите источник раскрытия и выпустите новый секрет с меньшей областью применения. Затем проверьте логи CI, историю Git, артефакты сборки, сообщения об ошибках и внешние системы, куда мог попасть вывод.
- Зафиксируйте время обнаружения и затронутый идентификатор, не копируя сам секрет в тикет.
- Отзовите ключ и временно приостановите связанные автоматические job.
- Проверьте использование и аномалии в журнале провайдера.
- Удалите секрет из доступных артефактов и исправьте причину раскрытия.
- Создайте новый ключ, протестируйте минимальный сценарий и обновите только нужные окружения.
- Проведите короткий разбор: где отсутствовала граница, маскирование или проверка ревью.
Учебный пример: если ключ случайно добавили в публичный репозиторий, недостаточно сделать новый коммит без строки. Старая версия может остаться в истории и клонах. Сначала отзыв, затем очистка по принятой процедуре и проверка поиском по истории. Конкретные команды зависят от хостинга и политики команды, поэтому не подменяйте ими официальную документацию платформы.
Финальный чек-лист перед запуском
- Сценарий действительно требует API-ключ, а не интерактивную авторизацию.
- Ключ отдельный, назначение и владелец записаны.
- Секрет хранится в переменной окружения, менеджере секретов или CI-хранилище.
- В репозитории нет ключа, его фрагмента, дампа окружения и реального примера.
- Логи не показывают значение, заголовки и команды с раскрытым секретом.
- Разрешены только необходимые инструменты и каталоги.
- Есть понятная процедура отзыва, замены и проверки расхода.
- После теста сохранён diff, а автоматизация не получила лишние права.
API-ключ для Claude Code — это элемент цепочки доступа, а не настройка «одной строкой». Безопасная схема состоит из выбора подходящего способа входа, отдельного секрета, правильной области действия, ограниченных разрешений и готовой процедуры отзыва. Так настройка остаётся переносимой между ноутбуком, CI и корпоративным шлюзом, а ошибка в одном окружении не превращается в проблему всей команды.
Как тестировать настройку без раскрытия секрета
Проверяйте конфигурацию ступенчато. Сначала убедитесь, что процесс получает переменную, не выводя её значение: можно проверить только факт наличия и непустую длину в локальном временном скрипте, который не сохраняется в логе. Затем выполните минимальный запрос без доступа к файлам и без автоматических изменений. После ответа проверьте код завершения, понятное сообщение об ошибке и отсутствие чувствительных заголовков в журнале.
Для CI полезно разделить проверку на подготовительный и рабочий шаг. Подготовительный шаг проверяет наличие секрета и доступность сети, а рабочий вызывает Claude Code с ограниченным запросом. Если проверка падает, не добавляйте печать всего окружения: это быстро превращает локальную ошибку в инцидент. Вместо этого логируйте имя окружения, версию инструмента, код ответа и безопасный идентификатор job.
Обновления Claude Code и провайдера могут изменить доступные параметры. Перед переносом пайплайна на новый образ зафиксируйте версию среды, прочитайте актуальную CLI-справку и проведите пробный запуск с тестовым секретом. Не фиксируйте в статье или внутреннем шаблоне конкретные модели, тарифы и лимиты без даты проверки: такие сведения меняются быстрее, чем общий принцип безопасной передачи ключа.
Учебный сценарий: отдельная CI-job получает ключ, выполняет read-only анализ и сохраняет только текстовый отчёт без окружения. Если отчёт должен попасть в артефакт, предварительно проверьте, что модель не повторяет входные секреты и что в исходных файлах нет реальных ключей. Для production-задач добавьте ручное подтверждение перед изменением или публикацией результата.
Полезно заранее описать границы ответственности. Владелец проекта отвечает за назначение ключа и разрешённые окружения, владелец CI — за маскирование и доступ job, а разработчик — за то, чтобы не переносить секрет в код и логи. Небольшая матрица ролей предотвращает ситуацию, когда все считают ротацию обязанностью «кого-то из команды». Для временного эксперимента установите дату окончания и удалите доступ после проверки.
Если используется корпоративный шлюз, документируйте, где проходит аутентификация: непосредственно в Anthropic API или в прокси. У шлюза могут быть собственные правила заголовков, лимитов, маршрутизации и аудита. Не называйте сторонний прокси функцией Anthropic и не переносите его пример в production без проверки документации поставщика. Разделяйте подтверждённые факты и локальные решения команды.
Перед передачей проекта другому владельцу проведите короткую инвентаризацию: переменные, секреты CI, локальные файлы, helper-скрипты, документацию и старые артефакты. Удалите неиспользуемые ключи, замените примеры на явные заглушки и убедитесь, что новый владелец понимает порядок отзыва. Это дешевле, чем восстанавливать цепочку доступа после ухода сотрудника или смены окружения.
Такой контроль стоит повторять после смены команды, пайплайна или провайдера, а не только после инцидента.