Какие важные опции и настройки вы знаете в Amazon CloudFront?

«Какие важные опции и настройки вы знаете в Amazon CloudFront?» — вопрос из категории Облачные платформы, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

При настройке CloudFront для раздачи статики и ускорения API я обращаю внимание на несколько ключевых групп настроек.

1. Origin Settings (Источник):

  • Origin Domain: Указываю S3 bucket, Application Load Balancer (ALB) или кастомный HTTP-сервер (например, EC2). Для S3 важно правильно настроить bucket policy для доступа от CloudFront.
  • Origin Protocol Policy: Выбираю HTTPS Only или Match Viewer, чтобы обеспечить шифрование всего трафика до origin, даже если viewer запрашивает по HTTP.
  • Origin Shield: Включаю для глобально распределенных приложений. Это дополнительный региональный кэш-слой, который снижает нагрузку на мой primary origin и улучшает hit ratio.

2. Cache Behavior & TTL (Поведение кэширования):

  • Path Pattern: Создаю отдельные поведения для разных путей. Например, /static/* кэшируется надолго, а /api/* — с минимальным TTL или вообще без кэша (Cache Policy с CachingDisabled).
  • Cache Keys & Query Strings: Настраиваю, какие query-параметры (session_id, utm_source) включать в ключ кэша. Для статики обычно отключаю (Cache policy с CachingOptimized), для динамического контента — включаю выборочно.
  • TTL (Time To Live): Задаю минимальное, максимальное и дефолтное время жизни объекта в кэше Edge-локаций. Для неизменяемых ассетов (хешированные JS/CSS) ставлю max_ttl на год.

3. Security & Access (Безопасность):

  • HTTPS: Обязательно настраиваю использование TLS, используя сертификат из AWS Certificate Manager (ACM), который предоставляется бесплатно.
  • AWS WAF Integration: Прикрепляю Web ACL к дистрибутиву для защиты от распространенных атак (OWASP Top 10, DDoS). Создаю кастомные правила для блокировки подозрительных User-Agents или IP-адресов.
  • Signed URLs / Cookies: Использую для предоставления временного доступа к премиум-контенту или защищенным файлам. Генерирую подписанные URL на бэкенде с ограничением по времени и IP.

4. Logging & Monitoring (Логи и мониторинг):

  • Access Logs: Включаю сохранение детальных логов доступа в S3 bucket для последующего анализа в Athena или QuickSight.
  • CloudWatch Metrics: Отслеживаю метрики вроде TotalErrorRate, CacheHitRate и BytesDownloaded для оценки эффективности и выявления проблем.

Пример настройки через Terraform (с акцентом на TTL и origin):

resource "aws_cloudfront_distribution" "app_cdn" {
  origin {
    domain_name = aws_lb.main.dns_name
    origin_id   = "alb-origin"
    custom_origin_config {
      http_port              = 80
      https_port             = 443
      origin_protocol_policy = "https-only"
      origin_ssl_protocols   = ["TLSv1.2"]
    }
  }
  default_cache_behavior {
    target_origin_id = "alb-origin"
    cache_policy_id  = "4135ea2d-6df8-44a3-9df3-4b5a84be39ad" # Managed-CachingOptimized
    viewer_protocol_policy = "redirect-to-https"
  }
  ordered_cache_behavior {
    path_pattern = "/api/*"
    target_origin_id = "alb-origin"
    cache_policy_id  = "4135ea2d-6df8-44a3-9df3-4b5a84be39ad"
    origin_request_policy_id = "216adef6-5c7f-47e4-b989-5492eafa07d3" # Managed-AllViewer
    viewer_protocol_policy = "redirect-to-https"
  }
}