AWS предлагает несколько способов добавить HTTPS в зависимости от вашей архитектуры. Правильный подход зависит от того, используете ли вы балансировщик нагрузки, CloudFront или отдельный инстанс EC2.
Дерево решений
Используете ли вы ALB, NLB или CloudFront?
├── Да → Используйте AWS Certificate Manager (ACM) — бесплатно, автообновление
└── Нет (отдельный EC2)?
├── Можно установить Certbot? → Certbot на EC2 (автообновление)
└── Нет root-доступа / быстрая настройка? → GetHTTPS → ручная установка на EC2
Вариант 1: AWS Certificate Manager (ACM) — для балансировщиков нагрузки и CloudFront
ACM предоставляет бесплатные SSL-сертификаты с автоматическим обновлением. Они работают только с сервисами AWS (ALB, NLB, CloudFront, API Gateway) — скачать закрытый ключ нельзя.
Запрос сертификата
- Откройте AWS Certificate Manager в консоли
- Нажмите Request a certificate → Request a public certificate
- Введите ваш домен(ы):
example.com,*.example.com - Выберите способ валидации: DNS validation (рекомендуется) или Email
- Нажмите Request
DNS-валидация
ACM предоставит CNAME-запись для добавления в ваш DNS:
- Name:
_xxxx.example.com - Value:
_yyyy.acm-validations.aws
Если ваш DNS находится в Route 53, нажмите “Create records in Route 53” — ACM добавит запись автоматически.
Привязка к ALB
- Перейдите в EC2 → Load Balancers → выберите ваш ALB
- Вкладка Listeners → Add listener (или отредактируйте существующий)
- Protocol: HTTPS, Port: 443
- Default action: Forward to your target group
- Default SSL/TLS certificate: выберите ваш ACM-сертификат
- Сохраните
Привязка к CloudFront
- Перейдите в CloudFront → выберите вашу дистрибуцию
- Вкладка General → Edit
- Custom SSL certificate: выберите ваш ACM-сертификат (должен быть в
us-east-1) - Сохраните
Вариант 2: Let’s Encrypt на EC2 (отдельные инстансы)
Если вы используете один инстанс EC2 без балансировщика нагрузки, установите сертификат непосредственно на сервер.
С помощью GetHTTPS (без установки ПО)
- Получите сертификат на GetHTTPS
- Загрузите файлы на ваш инстанс EC2:
scp fullchain.pem privkey.pem ec2-user@your-ec2-ip:/etc/ssl/ - Настройте Nginx или Apache на инстансе
С помощью Certbot (автообновление)
# Amazon Linux 2023
sudo dnf install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com
# Ubuntu на EC2
sudo snap install --classic certbot
sudo certbot --nginx -d example.com
Certbot автоматически настраивает автообновление.
ACM vs Let’s Encrypt на AWS
| ACM | Let’s Encrypt (GetHTTPS/Certbot) | |
|---|---|---|
| Стоимость | Бесплатно | Бесплатно |
| Работает с ALB/CloudFront | ✅ | ❌ (нельзя легко импортировать LE в ACM) |
| Работает на EC2 напрямую | ❌ | ✅ |
| Автообновление | ✅ (управляется AWS) | ✅ (Certbot) или вручную (GetHTTPS) |
| Доступ к закрытому ключу | ❌ (хранится в AWS) | ✅ (у вас) |
| Wildcard | ✅ | ✅ |
| Использование вне AWS | ❌ | ✅ (переносимый) |
Общее правило: Используйте ACM для всего, что находится за ALB или CloudFront. Используйте Let’s Encrypt для отдельных инстансов EC2.
Настройка группы безопасности
Убедитесь, что группа безопасности вашего EC2 или ALB разрешает входящий трафик на портах 80 и 443:
Type Protocol Port Source
HTTP TCP 80 0.0.0.0/0
HTTPS TCP 443 0.0.0.0/0
Порт 80 необходим для редиректов HTTP→HTTPS и для HTTP-01 проверок Let’s Encrypt.
Часто задаваемые вопросы
Можно ли использовать сертификаты ACM на EC2 напрямую?
Нет. Сертификаты ACM можно привязать только к управляемым сервисам AWS (ALB, NLB, CloudFront, API Gateway). Экспортировать закрытый ключ нельзя. Для отдельного EC2 используйте GetHTTPS или Certbot.
Можно ли импортировать сертификат Let’s Encrypt в ACM?
Технически да (aws acm import-certificate), но он не будет автоматически обновляться через ACM. Вам придётся повторно импортировать каждые 90 дней. Проще использовать собственные сертификаты ACM для сервисов AWS, а Let’s Encrypt — для EC2.
Какой регион AWS для сертификатов ACM?
Для ALB/NLB: запрашивайте сертификат в том же регионе, что и ваш балансировщик нагрузки. Для CloudFront: сертификат должен быть в us-east-1 (Северная Вирджиния), независимо от расположения вашего origin-сервера.
ACM действительно бесплатен?
Да. Публичные SSL/TLS-сертификаты от ACM бесплатны. Нет платы ни за сертификат, ни за обновление. Вы платите только за ресурсы AWS, которые используют сертификат (ALB, CloudFront и т. д.).
Как настроить SSL для сервиса ECS/Fargate?
Поставьте ALB перед вашим сервисом ECS и привяжите сертификат ACM к listener ALB. ALB завершает TLS и пересылает HTTP в ваши контейнеры. Это стандартный паттерн для ECS.
Как настроить SSL для статического сайта на S3?
Хостинг статических сайтов на S3 не поддерживает пользовательские SSL-сертификаты напрямую. Поставьте CloudFront перед S3 и привяжите сертификат ACM (из us-east-1) к дистрибуции CloudFront.
А что насчёт API Gateway?
AWS API Gateway включает бесплатный SSL по умолчанию на *.execute-api.region.amazonaws.com. Для пользовательского домена (например, api.example.com) создайте сертификат ACM и настройте пользовательское доменное имя в API Gateway.
Стоит ли использовать ACM или GetHTTPS на AWS?
| Сценарий | Рекомендация |
|---|---|
| ALB / NLB / CloudFront | ACM — бесплатно, автообновление, нативная интеграция |
| Отдельный EC2 | GetHTTPS или Certbot — ACM не может экспортировать ключи на EC2 |
| EC2 за ALB | ACM на ALB — EC2 не нужен собственный сертификат |
| ECS / Fargate | ACM на ALB — стандартный паттерн |
| Lightsail | Встроенный в Lightsail — включает бесплатный Let’s Encrypt |
Если вы используете чистый EC2 без балансировщика нагрузки, GetHTTPS — самый быстрый способ получить сертификат, без AWS CLI.