#amazon-web-services #aws-api-gateway #amazon-cloudfront #serverless-framework #amazon-waf
#amazon-веб-сервисы #aws-api-шлюз #amazon-cloudfront #бессерверный фреймворк #amazon-waf
Вопрос:
У меня есть дистрибутив CloudFront, который указывает на конечную точку шлюза API. Я подключил ACL WAF к этому дистрибутиву, и, похоже, он работает. Когда я получаю доступ к конечной точке шлюза API с помощью CloudFront, я блокируюсь (это желаемое поведение, которое я настроил в своем ACL).
https://<my-cloudfront-domain-name>/<my>/<api>/<endpoint> -> deny and I get a 403/blocked -> OK!
Если я достигну своей конечной точки «в одиночку» ( не за дистрибутивом cf) Я могу нормально добраться до конечной точки. Я хочу, чтобы меня заблокировали, даже если я получу доступ к API изолированным способом
https://<api-id>.execute-api.us-east-1.amazonaws.com/<my>/<api>/<endpoint> -> passed and I get a 200 -> NOT OK...
Мой стек был построен с использованием serverless framework
, и мой API-шлюз относится к edge
типу
Ответ №1:
API Gateway может ограничить доступ по ключу API. CloudFront может отправлять пользовательский секретный заголовок x-api-ключа при обращении к источнику. Отсутствие этого заголовка в других запросах к шлюзу API приведет к отклонению запросов API с 403 Forbidden.
См. раздел Защита вашего API с помощью Amazon API Gateway и AWS WAF, части первая и вторая.
Комментарии:
1. Моя проблема в том, что я следую первой части, но я все еще могу получить доступ к api. Если вы проверили первую часть, подключение waf к cf защищало как apigateway, так и cdn. В моем сценарии это не удается. Часть вторая требует API аутентификации — я хотел бы избежать этого, если смогу.
Ответ №2:
У нас была точно такая же проблема, и мы связались со службой поддержки AWS, и служба поддержки говорит, что оптимизированные по краям API-интерфейсы поддерживаются дистрибутивом CF по умолчанию, который WAF не может распознать. Чтобы заставить WAF работать с URL-адресом вызова по умолчанию, вам необходимо либо изменить тип конечной точки на региональный, либо создать пользовательский дистрибутив CF.