Введение
Точка доступа работает, но клиенты должны читать содержимое по зашифрованному соединению с проверкой личности сервера. Свяжите подготовленный сертификат ACM с альтернативным именем CloudFront, потребуйте HTTPS и проверьте реальную страницу, доверие к сертификату и соответствие имени.
Сначала завершите лабораторную работу по закрытой доставке S3. Эта независимая VM предоставляет новое закрытое соединение с источником, импортированный сертификат для content.labex-n04.test и публичный якорь доверия practice-ca.pem. Сертификат ещё не связан с распределением. Наблюдайте состояние в AWS View сверху и используйте Terminal снизу. Личный аккаунт AWS и купленный домен не нужны.
Учебный сертификат подписан подготовленным частным центром сертификации. Доверяйте его публичному файлу CA только для отдельной команды, не меняя системное хранилище доверия. Публичному сайту CloudFront нужен публично доверенный сертификат. Здесь изучаются связывание и реальные проверки TLS без регистрации публичного домена или выпуска сертификата.
Цели сертификации
| Сертификация | Задача экзамена | Практика |
|---|---|---|
| Cloud Practitioner (CLF-C02) | Задача 2.2 | Распознавать шифрование при передаче через HTTPS и отличать его от политики доступа к закрытому источнику. |
| Solutions Architect – Associate (SAA-C03) | Задача 1.3 | Связать сертификат ACM и проверить доверие TLS, соответствие имени узла и зашифрованный доступ к содержимому. |
Обзор лабораторной работы

Связывание сертификата и обязательный HTTPS
На этом шаге подключите подготовленный сертификат и альтернативное имя к распределению и потребуйте зашифрованные запросы пользователей.
TLS шифрует соединение и позволяет проверить личность сервера. Сертификат содержит имена и публичный ключ, подписанные центром сертификации (CA). ACM, AWS Certificate Manager, управляет сертификатами сервисов AWS. Наличие сертификата в ACM не связывает его автоматически с распределением.
Найдите подготовленные ресурсы. $(...) сохраняет вывод в переменные оболочки; --query выбирает нужный ресурс, а --output text делает ID пригодным для аргумента. Оставьте Terminal открытым:
cd /home/labex/project
HOST_NAME=content.labex-n04.test
DIST_ID=$(aws cloudfront list-distributions \
--query "DistributionList.Items[?Comment=='labex-n04:private-content'].Id | [0]" \
--output text)
CERT_ARN=$(aws acm list-certificates \
--query "CertificateSummaryList[?DomainName=='content.labex-n04.test'].CertificateArn | [0]" \
--output text)
aws acm describe-certificate \
--certificate-arn "$CERT_ARN" \
--query 'Certificate.{Name:DomainName,Names:SubjectAlternativeNames,Status:Status}'
Ожидайте ISSUED и учебное имя в Names. ARN определяет аккаунт и регион. Сертификаты клиентов CloudFront в ACM должны находиться в us-east-1; подготовленный ARN использует этот регион. Сертификат должен охватывать связанное альтернативное имя.
Прочитайте текущую конфигурацию и её ETag, токен версии для обновления. > сохраняет вывод в файл:
aws cloudfront get-distribution-config \
--id "$DIST_ID" \
--query DistributionConfig > current-config.json
ETAG=$(aws cloudfront get-distribution-config \
--id "$DIST_ID" \
--query ETag \
--output text)
Альтернативное доменное имя, или alias, позволяет распределению распознавать имя содержимого. SNI, Server Name Indication, отправляет имя при установке TLS для выбора сертификата. Политика протокола пользователя управляет HTTP и HTTPS отдельно от разрешений источника S3.
jq редактирует JSON, сохраняя другие настройки. --arg передаёт полученные значения как строки JSON. Операторы | в выражении в кавычках последовательно применяют alias, настройки пользовательского сертификата и доступ https-only. Выбранная политика безопасности требует TLS 1.2 или новее:
jq --arg host "$HOST_NAME" --arg cert "$CERT_ARN" '.Aliases = {Quantity: 1, Items: [$host]} |
.ViewerCertificate = {CloudFrontDefaultCertificate: false,
ACMCertificateArn: $cert, SSLSupportMethod: "sni-only",
MinimumProtocolVersion: "TLSv1.2_2021"} |
.DefaultCacheBehavior.ViewerProtocolPolicy = "https-only"' current-config.json > https-config.json
aws cloudfront update-distribution \
--id "$DIST_ID" \
--if-match "$ETAG" \
--distribution-config file://https-config.json
aws cloudfront wait distribution-deployed \
--id "$DIST_ID"
Перед проверкой соединения изучите сохранённые настройки:
aws cloudfront get-distribution-config \
--id "$DIST_ID" \
--query 'DistributionConfig.{Names:Aliases.Items,Certificate:ViewerCertificate.ACMCertificateArn,Protocol:DefaultCacheBehavior.ViewerProtocolPolicy}'
Ожидайте точное учебное имя, свой ARN и https-only. AWS View показывает alias и связанный сертификат ACM. Нативная конфигурация готова; следующий шаг докажет реальный зашифрованный запрос. Выполните проверку связывания.

Проверка зашифрованного содержимого и сертификата
На этом шаге прочитайте страницу через доверенный HTTPS, наблюдайте отказ незашифрованному доступу и отличайте доверие к сертификату от соответствия имени.
curl --cacert practice-ca.pem доверяет подготовленному публичному CA только для этой команды. --resolve соединяет точное имя и порт с этой VM, сохраняя имя для SNI и проверки. Публичный домен не регистрируется, системный DNS не меняется. Подготовленная точка HTTPS использует порт 8443:
curl --fail --include --noproxy '*' --cacert practice-ca.pem --resolve "${HOST_NAME}:8443:127.0.0.1" "https://${HOST_NAME}:8443/index.html"
Ожидайте HTTP 200 и Release one. Клиент установил реальный TLS, проверил доверенного издателя и имя и получил настоящую страницу S3. Это доказывает больше, чем сохранённый ARN.
Проверьте незашифрованную точку пользователя и прямой анонимный источник:
curl --noproxy '*' --output /dev/null --resolve "${HOST_NAME}:8082:127.0.0.1" --write-out 'Plaintext viewer: HTTP %{http_code}\n' "http://${HOST_NAME}:8082/index.html"
curl --noproxy '*' --output /dev/null --write-out 'Anonymous origin: HTTP %{http_code}\n' http://127.0.0.1:5000/labex-n04-content/index.html
Оба должны вернуть HTTP 403. Требование HTTPS не делает бакет S3 публичным; это отдельные меры защиты.
Теперь пропустите файл CA для проверки доверия. Эта команда должна намеренно завершиться ошибкой:
curl --fail --noproxy '*' --resolve "${HOST_NAME}:8443:127.0.0.1" "https://${HOST_NAME}:8443/index.html"
Ожидайте ошибку проверки, обычно ошибку curl 60: стандартное хранилище не доверяет частному учебному CA. Продолжайте после ожидаемой ошибки. Успешный запрос выбрал правильный якорь; отключение проверки удалило бы изучаемую защиту.
openssl s_client разделяет имя выбора SNI и проверяемое имя. Отправьте правильный SNI и доверьтесь CA, но потребуйте намеренно неверное имя узла. -verify_return_error останавливается при ошибке, а < /dev/null исключает интерактивный ввод:
openssl s_client -connect 127.0.0.1:8443 -servername "$HOST_NAME" -CAfile practice-ca.pem -verify_hostname wrong.labex-n04.test -verify_return_error < /dev/null
Ожидайте hostname mismatch и неуспешную проверку. Доверять издателю недостаточно: сертификат должен охватывать запрошенную личность. AWS View сохраняет реальный зашифрованный результат и отказ незашифрованному доступу. Выполните проверку HTTPS.


Удаление только собственных ресурсов доставки
На этом шаге сначала отключите и удалите распределение, затем OAC, содержимое S3 и подготовленный сертификат. Сохраните эталонный бакет.
CloudFront использует ETag как токен версии. Получите текущую конфигурацию и ETag, не угадывая их. Сначала сохраните точный OAC, подключённый к источнику:
OAC_ID=$(aws cloudfront get-distribution-config \
--id "$DIST_ID" \
--query 'DistributionConfig.Origins.Items[0].OriginAccessControlId' \
--output text)
Сохраните конфигурацию и получите её ETag:
aws cloudfront get-distribution-config \
--id "$DIST_ID" \
--query DistributionConfig \
--output json > distribution-current.json
DIST_ETAG=$(aws cloudfront get-distribution-config \
--id "$DIST_ID" \
--query ETag \
--output text)
В текущей конфигурации Enabled распределения — единственный одноимённый атрибут со значением true. Обычная замена через sed создаёт отключённую копию, сохраняя источник:
sed 's/"Enabled": true/"Enabled": false/' distribution-current.json > distribution-disabled.json
aws cloudfront update-distribution \
--id "$DIST_ID" \
--if-match "$DIST_ETAG" \
--distribution-config file://distribution-disabled.json
Дождитесь развёртывания отключённой конфигурации. Распространение изменений AWS может занять время; здесь не измеряется глобальная задержка:
aws cloudfront wait distribution-deployed \
--id "$DIST_ID"
Обновление меняет ETag. Прочитайте последний токен перед удалением отключённого распределения:
DIST_ETAG=$(aws cloudfront get-distribution-config \
--id "$DIST_ID" \
--query ETag \
--output text)
aws cloudfront delete-distribution \
--id "$DIST_ID" \
--if-match "$DIST_ETAG"
Удалите OAC с его собственным ETag. ID распределения и OAC обозначают разные ресурсы:
OAC_ETAG=$(aws cloudfront get-origin-access-control \
--id "$OAC_ID" \
--query ETag \
--output text)
aws cloudfront delete-origin-access-control \
--id "$OAC_ID" \
--if-match "$OAC_ETAG"
Удалите только объект содержимого и бакет этой работы:
aws s3api delete-object \
--bucket labex-n04-content \
--key index.html
aws s3api delete-bucket \
--bucket labex-n04-content
aws s3api list-buckets \
--query 'Buckets[].Name'
После распределения удалите только подготовленный сертификат по ранее выбранному ARN. Это удаляет ресурс ACM; публичный файл CA может остаться как независимый локальный материал:
aws acm delete-certificate \
--certificate-arn "$CERT_ARN"
aws acm list-certificates \
--query 'CertificateSummaryList[].CertificateArn'
Сертификат работы должен отсутствовать. Эталонный бакет должен остаться, а бакет содержимого — исчезнуть. AWS View должен показывать отсутствие распределения содержимого и только эталон. Выполните проверку очистки. Неудачный запрос API не доказывает удаление.

Резюме
Вы связали сертификат ACM и альтернативное имя с CloudFront, потребовали HTTPS и прочитали реальные данные через проверенный TLS. Вы различали доверенного издателя, соответствующее имя узла, шифрование пользователя и закрытый доступ к источнику. Незашифрованные запросы отклонены; проверки недоверенного издателя и неверного имени завершились ошибками. Вы удалили только свои ресурсы и сертификат работы, сохранив независимый эталон.



