API-ключ

строка, которой подписывается каждый запрос

Секретная строка, которой подписывается каждый запрос к программному интерфейсу сервиса.

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

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

Что даёт ключ
Полный доступ

Кто им владеет, тот и тратит ваш баланс.

Где хранить
На своей стороне

Переменные окружения сервера, не код и не браузер.

Регулярная замена ключей ограничивает ущерб, если один из них всё-таки утёк.
Пример

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

Хранят ключ в переменных окружения или в отдельном хранилище секретов, а в коде оставляют только имя переменной. Файл с секретами добавляют в список исключений системы контроля версий до первого коммита. Отдельная опасность — фронтенд: ключ, отданный в браузер, виден любому посетителю через инструменты разработчика, поэтому обращения к платным интерфейсам делают с сервера.

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

Частые вопросы

Где хранить ключ доступа?

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

Что делать, если ключ утёк?

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

Нужно ли заводить отдельные ключи под проекты?

Да. Отдельный ключ для каждого приложения позволяет отозвать один, не останавливая остальные, и показывает расход по каждому направлению. Заодно проще ограничить права и лимиты под конкретную задачу.

Как часто менять ключи?

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

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