#amazon-web-services #security #aws-api-gateway #amazon-cognito
Вопрос:
Я играю с защитой шлюза API AWS с помощью токенов пула пользователей AWS Cognito. Настройки авторизации шлюза API позволяют мне требовать, чтобы HTTP-запрос содержал как x-api-key
заголовок, так и authorization
заголовок (содержащий токен JWT). Я прикрепил фотографию этого.
Мне кажется, что требование ключа API вместе с токеном OAuth является редудантом. Какое практическое преимущество в плане безопасности может быть, если клиенты этой конечной точки будут предоставлять и то, и другое?
Ответ №1:
Ключ Api чаще используется вместе с планом использования для контроля
- к каким этапам может получить доступ данный клиент.
- Установите ограничение регулирования, например: 100 звонков в минуту.
- Установите лимит квоты. например: 100 тыс. звонков в день.
Ключ Api на самом деле не содержит никаких сведений о пользователе, его статическое значение обычно создается для каждого приложения/клиента.
Лично я даже не рассматриваю этот ключ Api AWS как эквивалент заголовка базовой аутентификации старой школы и вообще никогда не использовал его для защиты api.
С другой стороны, заголовок аутентификации-это обычный access_token и/или id_token, созданный, когда конкретный пользователь успешно авторизован/аутентифицирован на сервере аутентификации и получает доступ к API.
Из документов:
Не полагайтесь на ключи API в качестве единственного средства аутентификации и авторизации для ваших API. Во-первых, если у вас есть несколько API в плане использования, пользователь с действительным ключом API для одного API в этом плане использования может получить доступ ко всем API в этом плане использования. Вместо этого используйте роль IAM, лямбда-авторизатор или пул пользователей Amazon Cognito.
Комментарии:
1. Интересный. Таким образом, ключ API меньше связан с безопасностью и/или авторизацией, а больше с Планами использования. Имеет смысл. Я не знал о Планах использования, так что спасибо, что связались с ними.
2. Да. иногда x-api-ключ настраивается прямо в конфигурации среды клиентского приложения(интерфейсного приложения), больше похожего на идентификатор клиента, чем на секрет клиента, я бы не стал полагаться на x-api-ключ 🙂