Automatisierung von Let's Encrypt SSL auf AWS Application Load Balancer
In diesem Artikel kannst du alle Let's Encrypt-Ausstellungsvorgange fur AWS Application Load Balancer automatisieren und erfahren, wie du die ...

Meistens brauchen wir nichts ausser AWS Certificate Manager (ACM), aber in einigen Fallen, wenn du die Domain eines Kunden mit einem ALB hostest und keine Moglichkeit hast, ein SSL-Zertifikat von deinem Kunden zu bekommen, musst du eine Alternative finden. In diesem Artikel werden wir ein Let's Encrypt SSL auf einem AWS Application Load Balancer ausstellen und es automatisieren!
Wenn du ein SSL-Zertifikat von Let's Encrypt anforderst, hat LE verschiedene Verifizierungsmethoden wie Web-Challenge, Route53 usw. In diesem Szenario habe ich mich fur die Web-Challenge entschieden, da das DNS-Management der Domains nicht bei mir liegt. Ich hoste nur die Anwendung und muss ein SSL ausstellen.
Wenn du ein SSL mit Web-Challenge anforderst, pruft Let's Encrypt den Pfad https://domain.com/.well-known/acme-challenge, um die Verifizierung sicherzustellen. Was bedeutet das? Es bedeutet, dass Let's Encrypt eine Anfrage an die Domain auf Port 80 sendet und die Verifizierung durchfuhrt. Hmm, wir mussen einige Anpassungen an unserer Load Balancer-Konfiguration vornehmen und eine weitere Target Group benotigen, um die ACME-Challenge-Anfragen gezielt umzuleiten.
Schritt 1: Eine neue EC2 starten und eine neue Target Group erstellen
Repository klonen
Ich habe ein Bash-Skript fur eine einfache Verwaltung geschrieben, das die Standards fur jede Domain auf die gleiche Weise einhalt. Du kannst mein GitHub-Repository ansehen oder das Repository unter dem Pfad /opt/ in acme-challange-server klonen.
Tipp: # git clone https://github.com/flightlesstux/alble.git
nginx, Let's Encrypt installieren und konfigurieren
Wenn wir eine /.well-known/acme-challenge/*-Anfrage erhalten, wird die mit nginx installierte EC2 alle ACME-Challenge-Anfragen bearbeiten und ein SSL fur uns ausstellen.
nginx installieren und fur /.well-known/acme-challenge/ konfigurieren
Du kannst nginx einfach mit dem Befehl amazon-linux-extras install nginx1 installieren. Nach der Installation solltest du einen neuen Location-Block in die nginx-Hauptkonfiguration einfugen. Die Hauptkonfigurationsdatei befindet sich unter /etc/nginx/nginx.conf
location /.well-known/acme-challenge {
root /opt/alble/certbot-challange;
}Der server_name-Wert sollte _; fur alle Domains sein. Wir konnen keinen statischen DNS-Namen setzen.
Certbot mit dem nginx-Modul installieren
Zunachst installieren wir certbot aus dem epel-Repository, dafur mussen wir zuerst epel installieren. Fur die epel-Installation kannst du den Befehl amazon-linux-extras install -y epel verwenden und danach einfach yum install -y nginx certbot python2-certbot-nginx jq dig ausfuhren, um die Voraussetzungen abzudecken.
IAM Role Policy fur den ACME-Challenge-Server
Der acme-challenge-Server verfugt uber eine IAM-Rolle fur den Zugriff auf ACM- und ALB-Operationen mit Let's Encrypt SSLs. Du kannst die IAM Policy unten sehen.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AWSLEPolicy1",
"Effect": "Allow",
"Action": [
"acm:DescribeCertificate",
"acm:RemoveTagsFromCertificate",
"acm:GetCertificate",
"acm:AddTagsToCertificate",
"acm:ListCertificates",
"acm:ImportCertificate",
"acm:ListTagsForCertificate"
],
"Resource": "*",
"Condition": {
"IpAddress": {
"aws:SourceIp": "acme-challenge-server-Elastic-IP/32"
}
}
},
{
"Sid": "AWSLEPolicy2",
"Effect": "Allow",
"Action": [
"elasticloadbalancing:RemoveTags",
"elasticloadbalancing:DescribeTags",
"elasticloadbalancing:AddTags",
"elasticloadbalancing:AddListenerCertificates"
],
"Resource": "AWS::ALB::ARN",
"Condition": {
"IpAddress": {
"aws:SourceIp": "acme-challenge-server-Elastic-IP/32"
}
}
},
{
"Sid": "AWSLEPolicy3",
"Effect": "Allow",
"Action": [
"elasticloadbalancing:DescribeSSLPolicies",
"elasticloadbalancing:DescribeListeners",
"elasticloadbalancing:DescribeListenerCertificates"
],
"Resource": "*",
"Condition": {
"IpAddress": {
"aws:SourceIp": "acme-challenge-server-Elastic-IP/32"
}
}
},
{
"Sid": "AWSLEPolicy4",
"Effect": "Allow",
"Action": [
"elasticloadbalancing:RemoveTags",
"elasticloadbalancing:DescribeTags",
"elasticloadbalancing:AddTags"
],
"Resource": "AWS::ALB::ARN",
"Condition": {
"IpAddress": {
"aws:SourceIp": "acme-challenge-server-Elastic-IP/32"
}
}
},
{
"Sid": "AWSLEPolicy5",
"Effect": "Allow",
"Action": [
"elasticloadbalancing:DescribeSSLPolicies",
"elasticloadbalancing:DescribeListeners",
"elasticloadbalancing:AddListenerCertificates",
"elasticloadbalancing:DescribeListenerCertificates"
],
"Resource": "*",
"Condition": {
"IpAddress": {
"aws:SourceIp": "acme-challenge-server-Elastic-IP/32"
}
}
}
]
}Du kannst diese Policy direkt an den acme-challenge-Server anhangen, ohne Sicherheitsprobleme, nachdem du ihm eine Elastic IP zugewiesen hast. Wenn du lokale Anmeldedaten verwenden mochtest, kannst du auch dieselbe IAM Policy nutzen.
Eine neue Target Group erstellen
Nach der EC2-Instanz-Konfiguration habe ich eine Target Group namens acme-challenge erstellt und leite die Anfrage an die mit nginx installierte EC2 namens acme-challange-server weiter und registriere unseren acme-challenge-server als Target. Wenn alles ohne Probleme verlauft, wird dein Bildschirm wie unten aussehen.

Schritt 2: Eine Application Load Balancer Listener Rule erstellen
Wir mussen eine neue Listener Rule bearbeiten und erstellen, um die /.well-known/acme-challenge/*-Anfragen zu akzeptieren und an die acme-challenge Target Group weiterzuleiten. Wenn du diesen Schritt durchgefuhrt hast, wird dein Bildschirm wie unten aussehen.

Jetzt sind wir bereit, ein Let's Encrypt SSL von ACME anzufordern und es ohne Probleme auszustellen, in ACM zu importieren und dem AWS ALB zuzuweisen. Diese Operation umfasst drei verschiedene Schritte fur die Ausstellung.
- Ein SSL von Let's Encrypt anfordern
- Das angeforderte SSL importieren, wenn die Domain oder Subdomain mit dem AWS ALB CNAME-Eintrag ubereinstimmt
- Das importierte SSL-Zertifikat dem AWS ALB fur die Nutzung in der Produktion zuweisen
Let's Encrypt SSL von ACME ausstellen und anfordern
Wenn du das Git-Repository klonst, solltest du den Ordner /opt/alble/renewal-hooks unter den Pfad /etc/letsencrypt/ verschieben. Andernfalls kannst du das Zertifikat nicht im ACM erneuern und die Sicherheit fur dich und deine Kunden ware gefahrdet. Du kannst mv /opt/alble/renewal-hooks /etc/letsencrypt/ kopieren und einfugen.
Lies einfach die README.md-Datei im Git-Repository und schreibe deine Variablen in die env-Datei. Danach kannst du die Let's Encrypt SSL-Zertifikate auf dem AWS Application Load Balancer einfach ausfuhren/verwalten/erstellen. Ich empfehle die Verwendung von AWS SSM, um den Befehl zum Ausstellen eines SSL an den acme-challange-server zu senden. Dafur solltest du die -Policy zu deiner IAM-Rolle hinzufugen.
AmazonEC2RoleforSSM
Ich habe mich fur eine Subdomain zum Testen entschieden, aber das spielt keine Rolle. Du kannst auch eine Root-Domain verwenden. Meine Test-Domains sind awsle-1.ercanermis.com und awsle-2.ercanermis.com
Wenn du dich im Pfad /opt/alble/ befindest, kannst du den Befehl wie ./create-new-site.sh awsle-1.ercanermis.com ausfuhren und du wirst eine Ausgabe wie unten sehen.

Mein ALBLe-Skript pruft zuerst den CNAME-Eintrag fur die Domain und/oder Subdomain und stellt sicher, bevor es fortfahrt. Wenn du eine falsche Domain/Subdomain schreibst oder dich vertippst, wirst du uber Slack-Warnungen benachrichtigt. Warnungen sind wirklich wichtig fur die Automatisierung. Du kannst Slack-Warnungen in der env-Datei einrichten. Hier ist ein Beispiel, falls du das Let's Encrypt SSL bereits zuvor ausgestellt hast:

Produktion
Mein AWS ALB DNS-Name ist web-application-elb-1302305711.us-east-1.elb.amazonaws.com und ich kann uber https://web-app.ercanermis.com darauf zugreifen. Es verwendet AWS Certificate Manager, um ein SSL zu beziehen.
Meine Test-Domains sind https://awsle-1.ercanermis.com und https://awsle-2.ercanermis.com und sie verwenden Let's Encrypt mit AWS Application Load Balancer, ja! : )



Wie sehen AWS ALB SSL-Zertifikate und ACM aus?


Ich hoffe, dieser Artikel hilft dir! P.S. Vergiss nicht, einen Cron-Job fur Verlangerungsanfragen einzurichten.
Quellcode: https://github.com/flightlesstux/alble/
Weiteres von Ercan
Zwei weitere Seiten, gleicher Autor, anderes Terrain.
KI, LLMs, Agents, angewandte ML.
Praxisnotizen zu KI-Workloads. Bedrock-Kostenanalyse, Agent-Patterns, Vektorspeicher-Tradeoffs, Failure-Modes in Produktion.
Besuchen ercan.ai →Die Drehscheibe. Über mich, Beratung, Kontakt.
Persönliche Drehscheibe für beide Schreibspuren. Wer ich bin, wie die Beratung funktioniert, wie Sie mich erreichen.
Besuchen ercanermis.com →