0Pricing
AWS Solutions Architect · Урок

Завершение SSL и закреплённые сеансы

Перенесите завершение TLS на балансировщик нагрузки с помощью сертификатов ACM и включите закреплённые сеансы, когда рабочим нагрузкам с состоянием требуется привязка клиента.

«Завершение SSL и закреплённые сеансы» — бесплатный урок AWS Solutions Architect на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AWS Solutions Architect, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AWS Solutions Architect содержит 4 уроков всего.

Завершение SSL/TLS на балансировщике нагрузки

Завершение SSL/TLS означает, что балансировщик нагрузки расшифровывает входящий HTTPS-трафик, анализирует незашифрованный HTTP-запрос (для принятия решений о маршрутизации), а затем при необходимости снова шифрует запрос перед его пересылкой на серверную часть. Если завершение происходит на ALB, серверы приложения могут получать от балансировщика незашифрованный HTTP-трафик, что упрощает настройку серверной части.

Завершение на балансировщике нагрузки снижает нагрузку на CPU серверов приложения (им не требуется выполнять рукопожатие TLS для каждого соединения), обеспечивает маршрутизацию на основе содержимого (для этого необходимо читать HTTP-заголовки) и централизует управление сертификатами.

Интеграция с AWS Certificate Manager (ACM)

AWS Certificate Manager (ACM) выпускает, управляет и обновляет сертификаты SSL/TLS без дополнительной платы. ALB и NLB напрямую интегрируются с ACM: Вы выбираете сертификат ACM в конфигурации прослушивателя HTTPS, после чего балансировщик предъявляет его подключающимся клиентам.

Сертификаты ACM обновляются автоматически до истечения срока действия — ручное обновление не требуется, и просроченные сертификаты не приводят к простою. Для общедоступных сертификатов ACM подтверждает владение доменом с помощью проверки DNS (запись CNAME в Route 53) или проверки по электронной почте. Для внутреннего использования ACM Private CA может выпускать закрытые сертификаты.

# Request a public certificate in ACM
aws acm request-certificate \
  --domain-name api.example.com \
  --subject-alternative-names '*.example.com' \
  --validation-method DNS \
  --region us-east-1

# Create an HTTPS listener using the ACM certificate
aws elbv2 create-listener \
  --load-balancer-arn arn:aws:elasticloadbalancing:us-east-1:123456789:loadbalancer/app/my-alb/abc \
  --protocol HTTPS \
  --port 443 \
  --ssl-policy ELBSecurityPolicy-TLS13-1-2-2021-06 \
  --certificates CertificateArn=arn:aws:acm:us-east-1:123456789:certificate/cert-id \
  --default-actions Type=forward,TargetGroupArn=arn:aws:elasticloadbalancing:us-east-1:123456789:targetgroup/my-tg/xyz

Индикация имени сервера (SNI)

SNI (Server Name Indication) — это расширение TLS, которое позволяет одному IP-адресу (а значит, одному прослушивателю ALB или NLB) обслуживать несколько сертификатов TLS для разных доменных имен. Клиент включает имя хоста, к которому он пытается подключиться, в сообщение TLS ClientHello, после чего балансировщик выбирает подходящий сертификат.

ALB изначально поддерживает SNI: к одному прослушивателю HTTPS можно подключить несколько сертификатов ACM. ALB автоматически выбирает нужный сертификат на основе имени хоста SNI клиента. Это устраняет необходимость в отдельном прослушивателе или балансировщике нагрузки для каждого домена и обеспечивает полноценный виртуальный хостинг с SSL.

# Add a second certificate to an existing HTTPS listener (SNI)
aws elbv2 add-listener-certificates \
  --listener-arn arn:aws:elasticloadbalancing:us-east-1:123456789:listener/app/my-alb/abc/lis456 \
  --certificates CertificateArn=arn:aws:acm:us-east-1:123456789:certificate/second-cert-id

Политики безопасности SSL

ALB и NLB поддерживают настраиваемые политики безопасности SSL, которые определяют, какие версии протокола TLS и наборы шифров балансировщик нагрузки принимает от клиентов. AWS предоставляет предопределенные политики (например, ELBSecurityPolicy-TLS13-1-2-2021-06), которые обновляются по мере обнаружения новых уязвимостей.

Требования соответствия стандартам могут предписывать определенные версии TLS: PCI-DSS 3.2.1 требует использовать как минимум TLS 1.2; многие современные стандарты рекомендуют полностью отключать TLS 1.0 и 1.1. Используйте политику, исключающую устаревшие протоколы и слабые наборы шифров. Предпочтительны политики с поддержкой TLS 1.3, обеспечивающие прямую секретность и высокую производительность.

# List available SSL policies
aws elbv2 describe-ssl-policies \
  --query 'SslPolicies[*].{Name:Name,TLSVersions:SslProtocols}' \
  --output table

Сквозное шифрование и завершение TLS

На ALB применяются два разных подхода к TLS:

  • Завершение SSL (наиболее распространенный вариант): ALB расшифровывает трафик на балансировщике нагрузки и пересылает целевым объектам обычный HTTP. Это упрощает конфигурацию, обеспечивает анализ для маршрутизации и снижает нагрузку на серверы. Трафик между серверной частью и целевыми объектами внутри VPC не шифруется.
  • Сквозной TLS: ALB расшифровывает трафик, а затем снова шифрует его перед пересылкой целевым объектам (между ALB и целевым объектом используется HTTPS). Этот вариант требует больше ресурсов CPU и сертификатов на целевых объектах, но обеспечивает шифрование внутри VPC для сценариев со строгими требованиями соответствия.

В режиме сквозной передачи TLS для NLB NLB вообще не расшифровывает трафик: он пересылает необработанный TCP целевому объекту, который обрабатывает TLS. Сертификатом управляет сервер приложения.

Постоянные сеансы: что это и зачем они нужны

Постоянные сеансы (также называемые привязкой сеанса) гарантируют, что все запросы одного клиента направляются одному и тому же целевому объекту в целевой группе. Это необходимо для приложений с состоянием, которые хранят данные сеанса в памяти отдельных серверов, а не в общем кэше, таком как ElastiCache.

Без постоянных сеансов балансировщик нагрузки без состояния может отправить запрос 1 серверу A, где хранится сеанс, а запрос 2 — серверу B, у которого нет данных сеанса. В результате пользователь может оказаться неавторизованным или потерять содержимое корзины. Постоянные сеансы привязывают клиента к определенному целевому объекту на время сеанса.

Привязка сеансов по файлам cookie на ALB

ALB поддерживает два типа файлов cookie для постоянных сеансов:

  • Привязка на основе длительности (файл cookie, создаваемый LB): ALB создает файл cookie с именем AWSALB (для ALB) и задает срок его действия. Файл cookie содержит зашифрованную ссылку на целевой объект. Клиент отправляет этот файл cookie в последующих запросах.
  • Привязка на основе приложения: используется существующий файл cookie, заданный приложением. ALB считывает указанное Вами имя файла cookie, создает зашифрованную версию в собственном файле cookie и использует ее для постоянной маршрутизации, сохраняя исходный файл cookie приложения.

Настраивайте привязку отдельно для каждой целевой группы, задавая длительность от 1 секунды до 7 дней.

# Enable duration-based sticky sessions on a target group
aws elbv2 modify-target-group-attributes \
  --target-group-arn arn:aws:elasticloadbalancing:us-east-1:123456789:targetgroup/my-tg/xyz \
  --attributes \
    Key=stickiness.enabled,Value=true \
    Key=stickiness.type,Value=lb_cookie \
    Key=stickiness.lb_cookie.duration_seconds,Value=86400

Недостатки постоянных сеансов

Хотя постоянные сеансы решают проблему приложений с состоянием, они приводят к следующим компромиссам:

  • Неравномерное распределение нагрузки: некоторые целевые объекты могут получать больше трафика, если отдельные клиенты проявляют необычно высокую активность, что сводит на нет цель балансировки нагрузки
  • Ограничения масштабирования: если постоянный целевой объект становится неисправным, сеансы прерываются — клиенту приходится начинать новый сеанс с новым целевым объектом, теряя все данные сеанса, хранившиеся в памяти
  • Снижение эластичности: постоянные сеансы усложняют вывод экземпляров из эксплуатации и их завершение во время уменьшения масштаба

Рекомендуемый подход: устраните необходимость в постоянных сеансах, вынеся состояние сеанса во внешнее хранилище, например в ElastiCache или DynamoDB. Это делает приложение действительно не имеющим состояния и обеспечивает полноценное горизонтальное масштабирование.

Прослушиватель TLS и сквозная передача NLB

NLB поддерживает прослушиватели TLS на порту 443 (или любом другом порту) для завершения TLS, подобно ALB. NLB расшифровывает трафик, при необходимости снова шифрует его и пересылает целевым объектам. Кроме того, NLB может пропускать зашифрованный TCP-трафик без расшифровки, если настроить прослушиватель TCP. В этом режиме сервер приложения обрабатывает TLS от начала до конца.

Завершение TLS на NLB с использованием ACM предоставляет те же преимущества управления сертификатами, что и на ALB, но без функций уровня HTTP. Используйте завершение TLS на NLB, когда нужны статические IP-адреса с завершением TLS или когда протокол серверной части не является HTTP (например, это пользовательский протокол TCP).

Взаимодействие вывода соединений и постоянных сеансов

Когда постоянный целевой объект отменяет регистрацию (например, во время уменьшения масштаба Auto Scaling), вывод соединений позволяет завершить выполняющиеся запросы. Однако новые запросы от клиентов с постоянными сеансами, у которых все еще хранится файл cookie AWSALB для выводимого целевого объекта, автоматически направляются новому целевому объекту — файл cookie постоянного сеанса для этого клиента становится недействительным.

Такое сочетание задержки отмены регистрации и аннулирования файла cookie обеспечивает плавный переход: существующие длительные запросы завершаются, а новые запросы от этих клиентов без проблем перенаправляются здоровым целевым объектам, не вызывая у конечного пользователя впечатления ошибки.

Рекомендации по управлению SSL и сеансами

Рекомендации, важные для экзамена:

  • Используйте сертификаты ACM для автоматического обновления — никогда не управляйте сертификатами на балансировщиках нагрузки вручную
  • Используйте политики безопасности TLS 1.2+; отключайте TLS 1.0/1.1 для соответствия требованиям PCI/HIPAA
  • Предпочитайте архитектуры без состояния (хранение сеансов в ElastiCache/DynamoDB) постоянным сеансам
  • Используйте SNI на ALB, чтобы обслуживать несколько доменов одним прослушивателем без отдельных сертификатов на разных балансировщиках нагрузки
  • При строгих требованиях соответствия (данные внутри VPC должны быть зашифрованы) используйте целевые группы HTTPS со сквозным TLS, а не только завершение на балансировщике нагрузки

Быстрая проверка

Проверьте, насколько хорошо Вы усвоили рассмотренные на этом уроке концепции AWS Solutions Architect (SAA-C03).

Итоги урока

В этом уроке Вы узнали, что завершение SSL/TLS на ALB с сертификатами ACM обеспечивает автоматическое обновление и поддержку SNI для нескольких доменов, политики безопасности SSL управляют версиями TLS и наборами шифров для соответствия требованиям, а постоянные сеансы направляют пользователей к одному и тому же целевому объекту в приложениях с состоянием, но их лучше заменить вынесением состояния сеанса во внешнее хранилище ElastiCache. Далее мы рассмотрим группы Auto Scaling и шаблоны запуска.

Часто задаваемые вопросы

Урок «Завершение SSL и закреплённые сеансы» бесплатный?

Да — полный текст урока «Завершение SSL и закреплённые сеансы» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AWS Solutions Architect, подпишись на CoddyKit PRO. Курс AWS Solutions Architect содержит 4 уроков всего.

Чему я научусь в уроке «Завершение SSL и закреплённые сеансы»?

Перенесите завершение TLS на балансировщик нагрузки с помощью сертификатов ACM и включите закреплённые сеансы, когда рабочим нагрузкам с состоянием требуется привязка клиента. Ты практикуешь AWS Solutions Architect с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать AWS Solutions Architect?

Предыдущий опыт не требуется. AWS Solutions Architect на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Завершение SSL и закреплённые сеансы»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке AWS Solutions Architect?

Да. Каждый урок AWS Solutions Architect включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. ALB, NLB и GLB: когда что использовать
  2. Целевые группы и проверки работоспособности
  3. Правила слушателей и маршрутизация на основе путей
  4. Завершение SSL и закреплённые сеансы
← Назад к AWS Solutions Architect