Introduction
Le point d'accès fonctionne, mais les clients doivent lire le contenu par une connexion chiffrée vérifiant l'identité du serveur. Associez un certificat ACM préparé à un nom alternatif CloudFront, imposez HTTPS et testez la page réelle, la confiance du certificat et son nom.
Terminez d'abord le laboratoire de diffusion S3 privée. Cette VM indépendante fournit une nouvelle connexion privée à l'origine, un certificat importé pour content.labex-n04.test et l'ancre de confiance publique practice-ca.pem. Le certificat n'est pas encore associé à la distribution. Observez l'état dans AWS View, en haut, et utilisez Terminal, en bas. Aucun compte AWS personnel ni domaine acheté n'est nécessaire.
Le certificat d'exercice est signé par une autorité de certification privée préparée. Faites confiance à son fichier public pour une seule commande, sans modifier le magasin de confiance système. Un site CloudFront public nécessite un certificat publiquement reconnu. Vous pratiquez ici l'association et de véritables contrôles TLS, sans enregistrement de domaine ni émission de certificat public.
Objectifs de certification
| Certification | Tâche de l'examen | Pratique |
|---|---|---|
| Cloud Practitioner (CLF-C02) | Tâche 2.2 | Identifier le chiffrement en transit avec HTTPS et le distinguer d'une stratégie d'accès à l'origine privée. |
| Solutions Architect – Associate (SAA-C03) | Tâche 1.3 | Associer un certificat ACM et vérifier confiance TLS, correspondance du nom et accès chiffré au contenu. |
Vue d'ensemble du laboratoire

Associer le certificat et imposer HTTPS
Dans cette étape, associez le certificat et le nom alternatif préparés à la distribution et imposez des requêtes chiffrées.
TLS chiffre une connexion et permet de vérifier l'identité du serveur. Un certificat contient des noms et une clé publique, signés par une autorité de certification (CA). ACM, AWS Certificate Manager, gère les certificats utilisés par les services AWS. La présence d'un certificat dans ACM ne l'associe pas automatiquement à une distribution.
Identifiez les ressources préparées. $(...) conserve la sortie dans des variables shell ; --query sélectionne la ressource correspondante et --output text rend son ID utilisable comme argument. Gardez Terminal ouvert :
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}'
Attendez ISSUED et le nom d'exercice dans Names. L'ARN identifie le compte et la région. Les certificats ACM des clients CloudFront doivent être dans us-east-1 ; l'ARN préparé utilise cette région. Le certificat doit couvrir le nom alternatif associé.
Lisez la configuration actuelle et son ETag, le jeton de version nécessaire à la mise à jour. > conserve la sortie dans un fichier :
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)
Un nom alternatif, ou alias, permet à la distribution de reconnaître le nom du contenu. SNI, Server Name Indication, l'envoie pendant l'établissement de TLS pour sélectionner le certificat. La stratégie de protocole client contrôle HTTP et HTTPS, séparément de l'autorisation de l'origine S3.
jq modifie le JSON tout en conservant les autres paramètres. --arg fournit les valeurs capturées sous forme de chaînes JSON. Les opérateurs | dans l'expression entre guillemets appliquent trois changements successifs : alias, certificat personnalisé et accès https-only. La stratégie de sécurité sélectionnée exige TLS 1.2 ou ultérieur :
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"
Inspectez les paramètres enregistrés avant de tester la connexion :
aws cloudfront get-distribution-config \
--id "$DIST_ID" \
--query 'DistributionConfig.{Names:Aliases.Items,Certificate:ViewerCertificate.ACMCertificateArn,Protocol:DefaultCacheBehavior.ViewerProtocolPolicy}'
Attendez le nom exact, votre ARN et https-only. AWS View montre l'alias et le certificat ACM associé. La configuration native est prête ; l'étape suivante prouve une requête chiffrée réelle. Exécutez la vérification d'association.

Vérifier le contenu chiffré et le certificat
Dans cette étape, lisez la page avec un HTTPS fiable, observez le refus du trafic en clair et distinguez confiance du certificat et correspondance du nom.
curl --cacert practice-ca.pem fait confiance à la CA publique préparée uniquement pour cette commande. --resolve connecte le nom et le port exacts à cette VM, en conservant ce nom pour SNI et la vérification. Il n'enregistre aucun domaine public et ne modifie pas le DNS système. Le point d'accès HTTPS préparé utilise le port 8443 :
curl --fail --include --noproxy '*' --cacert practice-ca.pem --resolve "${HOST_NAME}:8443:127.0.0.1" "https://${HOST_NAME}:8443/index.html"
Attendez HTTP 200 et Release one. Le client a établi une vraie connexion TLS, vérifié l'émetteur et le nom, puis reçu la véritable page S3. Cela prouve davantage qu'un ARN enregistré.
Testez le point d'accès client en clair et l'accès direct anonyme à l'origine :
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
Tous deux doivent renvoyer HTTP 403. Imposer HTTPS au client ne rend pas le compartiment S3 public ; ce sont deux protections distinctes.
Omettez maintenant le fichier CA pour tester la confiance. Cette commande doit volontairement échouer :
curl --fail --noproxy '*' --resolve "${HOST_NAME}:8443:127.0.0.1" "https://${HOST_NAME}:8443/index.html"
Attendez une erreur de vérification, généralement l'erreur curl 60 : le magasin par défaut ne reconnaît pas cette CA privée. Continuez après cet échec prévu. La requête réussie utilisait la bonne ancre ; désactiver la vérification supprimerait la protection étudiée.
openssl s_client sépare le nom de sélection SNI du nom à vérifier. Envoyez le bon SNI et faites confiance à la CA, mais demandez un nom volontairement incorrect. -verify_return_error arrête le contrôle en cas d'échec et < /dev/null évite une saisie interactive :
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
Attendez hostname mismatch et une vérification échouée. Reconnaître l'émetteur ne suffit pas : le certificat doit aussi couvrir l'identité demandée. AWS View conserve le résultat chiffré réel et le refus du trafic en clair. Exécutez la vérification HTTPS.


Supprimer uniquement vos ressources de diffusion
Dans cette étape, désactivez et supprimez d'abord la distribution, puis son OAC, le contenu S3 et le certificat préparé. Conservez le compartiment de référence.
CloudFront utilise ETag comme jeton de version. Récupérez la configuration et l'ETag actuels sans les deviner. Commencez par conserver l'OAC exact connecté à l'origine :
OAC_ID=$(aws cloudfront get-distribution-config \
--id "$DIST_ID" \
--query 'DistributionConfig.Origins.Items[0].OriginAccessControlId' \
--output text)
Enregistrez la configuration et récupérez son 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)
Dans la configuration actuelle, Enabled de la distribution est le seul attribut de ce nom valant true. La substitution standard avec sed crée une copie désactivée en conservant l'origine :
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
Attendez le déploiement de la configuration désactivée. La propagation AWS peut prendre du temps ; ce laboratoire ne mesure pas le délai mondial :
aws cloudfront wait distribution-deployed \
--id "$DIST_ID"
La mise à jour change l'ETag. Lisez le plus récent avant de supprimer la distribution désactivée :
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"
Supprimez l'OAC avec son propre ETag. Les ID de distribution et d'OAC désignent des ressources différentes :
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"
Supprimez seulement l'objet de contenu et le compartiment du laboratoire :
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'
Après suppression de la distribution, supprimez uniquement le certificat préparé avec l'ARN sélectionné auparavant. Cela retire la ressource ACM ; le fichier CA public peut rester comme élément local indépendant :
aws acm delete-certificate \
--certificate-arn "$CERT_ARN"
aws acm list-certificates \
--query 'CertificateSummaryList[].CertificateArn'
Le certificat de l'unité doit avoir disparu. Le compartiment de référence doit rester, celui du contenu doit être absent. AWS View doit montrer aucune distribution de contenu et seulement la référence. Exécutez la vérification du nettoyage. Un échec d'API ne prouve pas une suppression.

Résumé
Vous avez associé un certificat ACM et un nom alternatif à CloudFront, imposé HTTPS et lu le contenu réel avec TLS vérifié. Vous avez distingué émetteur reconnu, nom correspondant, chiffrement client et accès privé à l'origine. Le trafic en clair a été refusé ; les contrôles d'émetteur non reconnu et de mauvais nom ont échoué. Vous avez supprimé uniquement vos ressources et le certificat de l'unité, en conservant la référence indépendante.



