AWS WAF не влияет на apigateway за cloudfront

#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.