CloudFront с WAF и Lambda@Edge
Подключите AWS WAF для блокировки распространённых веб-атак и выполняйте лёгкие преобразования запросов и ответов на периферии с помощью Lambda@Edge.
«CloudFront с WAF и Lambda@Edge» — бесплатный урок Cloud & IT Cert Prep на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cloud & IT Cert Prep, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cloud & IT Cert Prep содержит 4 уроков всего.
Защита CloudFront с помощью AWS WAF
AWS WAF (Web Application Firewall) фильтрует HTTP/HTTPS-запросы, поступающие к Вашему распределению CloudFront, и отслеживает их. Связав Web ACL WAF с распределением, Вы можете блокировать распространённые веб-атаки — внедрение SQL, межсайтовый скриптинг (XSS), вредоносных ботов и атаки из OWASP Top 10 — ещё до того, как они достигнут исходного сервера.
WAF работает на периферии CloudFront: вредоносные запросы отклоняются в ближайшем периферийном местоположении, не достигая Вашего ALB или сервера приложения. Это снижает нагрузку на внутреннюю часть системы и останавливает атаки ближе к атакующему.
# Associate a WAF Web ACL with a CloudFront distribution
aws wafv2 associate-web-acl \
--web-acl-arn arn:aws:wafv2:us-east-1:123456789:global/webacl/MyACL/12345 \
--resource-arn arn:aws:cloudfront::123456789:distribution/EDFDVBD6EXAMPLEПравила и группы правил WAF
Web ACL WAF содержит упорядоченные правила и группы правил, каждое из которых сопоставляет атрибуты запроса и выполняет действие (Allow, Block, Count, CAPTCHA). Правила проверяются в порядке приоритета; применяется действие первого совпавшего правила.
AWS предоставляет управляемые группы правил — готовые наборы правил, которые поддерживаются AWS и продавцами AWS Marketplace. Набор AWS Managed Rules - Core Rule Set охватывает OWASP Top 10 без какой-либо настройки. AWS обновляет управляемые группы правил по мере появления новых угроз, снижая операционную нагрузку.
# Create a Web ACL with AWS Managed Core Rule Set
aws wafv2 create-web-acl \
--name MyCloudFrontACL \
--scope CLOUDFRONT \
--default-action Allow={} \
--rules '[{
"Name": "CoreRuleSet",
"Priority": 1,
"Statement": {
"ManagedRuleGroupStatement": {
"VendorName": "AWS",
"Name": "AWSManagedRulesCommonRuleSet"
}
},
"OverrideAction": {"None": {}},
"VisibilityConfig": {
"SampledRequestsEnabled": true,
"CloudWatchMetricsEnabled": true,
"MetricName": "CoreRuleSet"
}
}]' \
--visibility-config SampledRequestsEnabled=true,CloudWatchMetricsEnabled=true,MetricName=MyACL \
--region us-east-1Ограничение частоты запросов и управление ботами в WAF
Правила на основе частоты в WAF подсчитывают запросы от каждого исходного IP-адреса за пятиминутный интервал. Если IP-адрес превышает порог (например, 2 000 запросов за 5 минут), WAF блокирует дальнейшие запросы с этого IP-адреса, пока частота не снизится. Правила на основе частоты защищают от перебора, заполнения учётных данных и простых атак DDoS с массовым извлечением данных.
AWS WAF Bot Control — это управляемая группа правил, классифицирующая трафик по категориям: проверенные боты (Googlebot, Bingbot), сборщики данных, инструменты мониторинга и трафик от людей. Для каждой категории можно настроить отдельное действие: разрешать ботам поисковых систем, проверять неизвестных ботов с помощью CAPTCHA и блокировать вредоносных сборщиков данных.
Область действия WAF: CLOUDFRONT и REGIONAL
Web ACL WAF имеют область действия CLOUDFRONT (глобальная, для использования с CloudFront) или REGIONAL (для использования с ALB, API Gateway, AppSync или пулами пользователей Cognito в определённом регионе). Web ACL с областью CLOUDFRONT необходимо создавать в регионе us-east-1 независимо от места возникновения трафика, поскольку CloudFront управляется из этого региона.
Это важная экзаменационная ловушка: если создать Web ACL WAF в eu-west-1 и попытаться связать его с CloudFront, связывание завершится ошибкой. Всегда создавайте Web ACL WAF для CloudFront в us-east-1.
Введение в Lambda@Edge
Lambda@Edge позволяет запускать функции Lambda на Node.js или Python в периферийных местоположениях CloudFront в ответ на события CloudFront. Функции выполняются через миллисекунды после запроса пользователя, без перенаправления трафика обратно в центральный регион для обработки.
Функции Lambda@Edge развёртываются в регионе us-east-1, но автоматически реплицируются во все периферийные местоположения CloudFront по всему миру. Это означает, что Ваш код выполняется максимально близко к пользователю, обеспечивая персонализацию, аутентификацию и A/B-тестирование на периферии с минимальной дополнительной задержкой.
Точки запуска Lambda@Edge
Функции Lambda@Edge могут перехватывать запросы и ответы CloudFront в четырёх точках жизненного цикла:
- Viewer Request: после получения CloudFront запроса от пользователя и до проверки кэша — используется для аутентификации, перенаправлений и изменения заголовков
- Origin Request: после промаха кэша и до передачи запроса исходному серверу — используется для переписывания URL и добавления пользовательских заголовков к запросу к исходному серверу
- Origin Response: после получения ответа от исходного сервера и до его кэширования — используется для добавления заголовков безопасности и изменения ответа
- Viewer Response: до отправки CloudFront ответа пользователю — используется для добавления или изменения заголовков ответа
Lambda@Edge и CloudFront Functions
AWS предлагает два варианта вычислений на периферии с разными компромиссами:
- CloudFront Functions: выполнение менее чем за миллисекунду, только JavaScript, крайне низкая стоимость (примерно 1/6 цены), работают только для событий Viewer Request и Viewer Response, ограничение времени вычислений — 1 мс, отсутствие доступа к VPC и сети
- Lambda@Edge: до 30 секунд времени выполнения (Viewer) / 30 секунд (Origin), Node.js или Python, все четыре точки запуска, возможность выполнять сетевые запросы и доступ к телам запросов и ответов
Используйте CloudFront Functions для простого изменения заголовков, нормализации URL и вычисления ключа кэша. Используйте Lambda@Edge для сложной логики, требующей сетевых вызовов, длительных вычислений или обработки на стороне исходного сервера.
Сценарии использования Lambda@Edge
Распространённые шаблоны использования Lambda@Edge на экзамене SAA-C03:
- Проверка JWT на периферии: функция Viewer Request проверяет заголовок Authorization; неавторизованные запросы получают ответ 401, не достигая исходного сервера
- A/B-тестирование: Viewer Request назначает пользователей в группу A или B (с помощью файла cookie) и изменяет запрос для получения
/a/page.htmlили/b/page.html - Переписывание URL: Origin Request заменяет удобные URL фактическими путями к файлам в S3
- Динамическое изменение размера изображений: Origin Request формирует запрос к Lambda для обработки изображений, а Origin Response кэширует изменённое изображение
- Заголовки безопасности HTTP: Viewer Response добавляет заголовки CSP, HSTS и X-Frame-Options
Ограничения Lambda@Edge
У Lambda@Edge есть несколько ограничений по сравнению со стандартной Lambda:
- Функции должны находиться в регионе us-east-1
- Нет поддержки VPC (невозможно получить доступ к ресурсам в VPC)
- Нет переменных окружения (встраивайте конфигурацию в код функции или загружайте её из Parameter Store при холодном запуске)
- Нельзя использовать слои Lambda
- Время ожидания события от пользователя: 5 секунд; время ожидания события от источника: 30 секунд
- Ограничение размера пакета развёртывания: 1 МБ (события от пользователя) / 50 МБ (события от источника)
Из-за этих ограничений Lambda@Edge не подходит для длительных вычислений, операций, зависящих от VPC, и функций, которым требуется динамическая конфигурация для каждого развёртывания.
WAF + Lambda@Edge: многоуровневая защита
WAF и Lambda@Edge выполняют разные задачи безопасности и дополняют друг друга:
- WAF: блокировка атак на основе сигнатур (внедрение SQL, XSS, известные злоумышленники, ограничение частоты запросов) — управляемые правила автоматически обрабатывают распространённые атаки
- Lambda@Edge: пользовательская логика безопасности на уровне бизнес-правил (проверка JWT, проверка сеанса, проверка токена доступа) — гибкое решение, требующее разработки
Архитектура с эшелонированной защитой: сначала WAF блокирует известные шаблоны атак; затем Lambda@Edge проверяет аутентификацию на уровне бизнес-логики; подписанные URL и файлы cookie CloudFront ограничивают доступ к содержимому; OAC сохраняет конфиденциальность S3. Каждый уровень независимо предотвращает отдельный класс атак.
Мониторинг WAF и Lambda@Edge
Контролируйте уровень защиты на периферии с помощью следующих инструментов:
- Журналы WAF: включите полное журналирование запросов в S3, журналы CloudWatch или Kinesis Firehose, чтобы видеть, какие правила срабатывают и какой трафик блокируется
- Метрики WAF:
BlockedRequests,AllowedRequests,CountedRequestsдля каждого правила в CloudWatch - Журналы Lambda@Edge: группы журналов CloudWatch создаются в каждом регионе, где выполняется функция; используйте CloudWatch Insights для запросов по нескольким регионам
- Журналы CloudFront в реальном времени: передавайте журналы доступа в Kinesis для немедленного анализа (в отличие от стандартных журналов доступа, которые накапливаются пакетами каждые несколько минут)
Быстрая проверка
Проверьте понимание концепций AWS Solutions Architect (SAA-C03) из этого урока.
Итоги урока
В этом уроке Вы узнали, что AWS WAF блокирует распространённые веб-атаки на периферии CloudFront с помощью управляемых и пользовательских групп правил, Lambda@Edge глобально выполняет пользовательский код в четырёх точках запуска CloudFront, а CloudFront Functions обеспечивают выполнение за доли миллисекунды для простой логики на стороне пользователя. ACL WAF для CloudFront необходимо создавать в us-east-1. Далее мы рассмотрим балансировщики нагрузки Application, Network и Gateway.
Часто задаваемые вопросы
Урок «CloudFront с WAF и Lambda@Edge» бесплатный?
Да — полный текст урока «CloudFront с WAF и Lambda@Edge» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cloud & IT Cert Prep, подпишись на CoddyKit PRO. Курс Cloud & IT Cert Prep содержит 4 уроков всего.
Чему я научусь в уроке «CloudFront с WAF и Lambda@Edge»?
Подключите AWS WAF для блокировки распространённых веб-атак и выполняйте лёгкие преобразования запросов и ответов на периферии с помощью Lambda@Edge. Ты практикуешь Cloud & IT Cert Prep с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Cloud & IT Cert Prep?
Предыдущий опыт не требуется. Cloud & IT Cert Prep на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «CloudFront с WAF и Lambda@Edge»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Cloud & IT Cert Prep?
Да. Каждый урок Cloud & IT Cert Prep включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Дистрибутивы и источники CloudFront
- Поведение кэша и настройки TTL
- Подписанные URL, подписанные файлы cookie и географические ограничения
- CloudFront с WAF и Lambda@Edge