Управление API ключами
API ключи выглядят простыми в реализации, но обеспечивают безопасность только при грамотной генерации, хранении, использовании и регулярном обновлении.
Краткое описание
Управление API ключами охватывает весь жизненный цикл: от генерации и хранения до использования, ротации и отзыва. API ключи представляют собой секретные строки, которые клиенты используют для идентификации и частичной авторизации при работе с API. Они просты в реализации, но несут риски при утечке, копировании или длительном неизменном использовании. Правильное управление включает генерацию надёжных уникальных ключей, хранение только их хешей, передачу по TLS, ограничение срока действия и прав, удобную ротацию и немедленный отзыв. Кроме того, ключи должны работать с минимально необходимыми правами, а их использование требует логирования и мониторинга.
Ключевые компоненты
Генерация API ключей
API ключи должны быть сгенерированы с использованием криптографически стойкого генератора случайных чисел. Они должны быть достаточно длинными и уникальными, чтобы противостоять атакам перебора. Рекомендуется минимальная длина 32 байта с использованием букв, цифр и специальных символов. Ключи не должны быть предсказуемыми или основаны на пользовательских данных.
Хранение API ключей
На сервере API ключи никогда не должны храниться в открытом виде. Вместо этого сохраняйте хеш ключа, например с использованием SHA-256 или bcrypt, вместе со ссылкой для связи с пользователем. Открытый ключ показывается пользователю только один раз при создании. На клиенте ключи не должны попадать в репозитории, логи или открытые конфигурации.
Передача и транспорт
API ключи всегда должны передаваться по HTTPS. Избегайте передачи в URL, так как они могут появиться в истории браузера, логах и заголовке Referrer. Предпочтительнее использовать заголовок Authorization или специальный заголовок вроде X-API-Key.
Scope и разрешения
API ключам следует предоставлять минимально необходимые разрешения. Ключ только для чтения не должен позволять операции записи. Scope вроде read:users или write:orders помогают ограничить права и снизить риск при компрометации ключа.
Ротация API ключей
Ротация означает периодическое или при необходимости создание новых ключей и отзыв старых. Поддержка нескольких активных ключей на клиент упрощает ротацию: старый ключ продолжает работать, пока распределяется новый. По истечении переходного периода старый ключ деактивируется.
Отзыв и деактивация
API ключи должны быть отозваны в любой момент без перезагрузки всего сервиса. Деактивированный ключ будет отклонён при следующем запросе. Панели управления или API должны позволять быстро заблокировать ключи при их утечке.
Логирование и мониторинг
Использование API ключей должно логироваться. Важная информация включает временную метку, IP адрес, используемый ключ, endpoint и результат. Мониторинг выявляет необычные паттерны: скачки трафика, географические аномалии или доступ к неожиданным endpoint-ам.
Secret Management
Для приложений, работающих с API ключами, следует использовать решения Secret Management вроде HashiCorp Vault, AWS Secrets Manager или Azure Key Vault. Эти инструменты хранят секреты в зашифрованном виде, обеспечивают ротацию и предотвращают попадание ключей в исходный код или конфигурации.
Уведомление об утечках
Если API ключ скомпрометирован, его необходимо немедленно отозвать. Также нужно проверить, произошёл ли несанкционированный доступ. Клиентов и внутренние команды необходимо уведомить, а ключ заменить.
Документация и политики
Чёткие правила для генерации, использования, ротации и обращения с API ключами очень важны. Разработчики и клиенты должны знать, как безопасно хранить ключи, как сообщить об утечке и какие последствия влечёт нарушение.
Практический пример
SaaS-поставщик предоставляет API ключи клиентам для доступа к API заказов.
Создание нового ключа:
POST /api/v1/api-keys
Authorization: Bearer USER_TOKEN
Content-Type: application/json
{
"name": "Integration Warehouse",
"scopes": ["read:orders", "write:shipments"]
}
Ответ:
HTTP/1.1 201 Created
Content-Type: application/json
{
"keyId": "key-abc-123",
"key": "sk_live_51H8x...9zA2",
"scopes": ["read:orders", "write:shipments"],
"createdAt": "2026-07-01T10:00:00Z",
"expiresAt": "2027-07-01T10:00:00Z"
}
Открытый ключ показывается только один раз. На сервере сохраняется только его хеш. Клиент использует ключ следующим образом:
GET /api/v1/orders
Authorization: Bearer sk_live_51H8x...9zA2
Если ключ скомпрометирован, клиент может немедленно отозвать его в панели управления и создать новый. Старое разрешение становится недействительным сразу же.
FAQ: управление API ключами
1. Что такое API ключ?
2. Как должен быть сгенерирован API ключ?
3. Должен ли API ключ храниться в открытом виде?
4. Что такое ротация API ключа?
5. Почему важно иметь возможность отозвать API ключ?
6. Что такое scope API ключей?
7. Где нужно хранить API ключи на клиенте?
8. Что такое Secret Management инструмент?
9. Как выявить необычное использование API ключа?
10. Что делать при утечке API ключа?
11. Стоит ли устанавливать срок действия для API ключей?
12. В чём различие между API ключом и OAuth2 token?
13. Что такое Key Prefix?
14. Что такое хеш в контексте API ключей?
15. Почему API ключи не должны передаваться в URL?
Источники
- https://owasp.org/API-Security/editions/2023/en/0x11-t10/
- https://cheatsheetseries.owasp.org/cheatsheets/Key_Management_Cheat_Sheet.html
- https://www.vaultproject.io/
Рекомендуемые книги по безопасности API
Если ты хочешь глубже погрузиться в управление API ключами, Secret Management и безопасность API, то мы рекомендуем тебе следующие книги:
Keine Bücher für Kategorie "security" gefunden.



