Automatizzare i Certificati SSL Let's Encrypt su AWS Application Load Balancer
In questo articolo, puoi automatizzare tutte le operazioni di emissione di Let's Encrypt per AWS Application Load Balancer e imparare come gestire...

La maggior parte delle volte, non abbiamo bisogno di altro se non di AWS Certificate Manager (ACM) ma in alcuni casi, se ospiti il dominio del tuo cliente con ALB e non hai la possibilità di ottenere un certificato SSL dal tuo cliente, devi trovare una soluzione alternativa. In questo articolo, emetteremo un certificato SSL Let's Encrypt su AWS Application Load Balancer e lo automatizzeremo!
Quando richiedi un certificato SSL da Let's Encrypt, LE ha alcuni metodi di verifica come web-challenge, route53, ecc. In questo scenario, ho deciso di usare il web-challenge perché la gestione DNS dei domini non è sotto il mio controllo. Ospito solo l'applicazione e devo emettere un SSL.
Quando richiedi un SSL con web-challenge, Let's Encrypt controlla il percorso https://domain.com/.well-known/acme-challenge per verificare. Cosa significa? Significa che Let's Encrypt invierà una richiesta al dominio sulla porta 80 ed effettuerà la verifica. Hmm, dobbiamo fare alcuni aggiustamenti alla configurazione del Load Balancer e abbiamo bisogno di un altro Target Group per reindirizzare specificamente le richieste acme-challenge.
Passo 1: Avviare una nuova EC2 e Creare un Nuovo Target Group
Clonare il Repository
Ho scritto uno script bash per una gestione semplice e per mantenere gli standard allo stesso modo per ogni dominio. Puoi dare un'occhiata al mio repository GitHub o clonare il repository sotto il percorso /opt/ in acme-challange-server
Tip: # git clone https://github.com/flightlesstux/alble.git
Installare nginx, Let's Encrypt e configurarli
Quando riceviamo una richiesta /.well-known/acme-challenge/*, l'EC2 con nginx installato gestirà tutte le richieste acme-challenge ed emetterà un SSL per noi.
Installare nginx e configurare per /.well-known/acme-challenge/
Puoi installare facilmente nginx con il comando amazon-linux-extras install nginx1. Dopo l'installazione, devi inserire un nuovo blocco location nel file di configurazione root di nginx. Il file di configurazione root si trova in /etc/nginx/nginx.conf
location /.well-known/acme-challenge {
root /opt/alble/certbot-challange;
}Il valore server_name dovrebbe essere _; per tutti i domini. Non possiamo impostare un nome DNS statico.
Installare Certbot con il modulo nginx
Prima di tutto, installeremo certbot dal repository epel e dobbiamo installare epel per primo. Per l'installazione di epel, puoi usare il comando amazon-linux-extras install -y epel e dopo esegui yum install -y nginx certbot python2-certbot-nginx jq dig per coprire i prerequisiti.
Policy del Ruolo IAM per il Server acme-challenge
Questo server acme-challenge ha un Ruolo IAM per accedere alle operazioni ACM e ALB con i certificati SSL Let's Encrypt. Puoi vedere la Policy IAM qui sotto.
{
"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"
}
}
}
]
}Puoi allegare questa policy direttamente al server acme-challenge senza problemi di sicurezza dopo aver assegnato un Elastic IP. Se vuoi usare credenziali locali, puoi anche usare la stessa Policy IAM.
Creare un Nuovo Target Group
Dopo la configurazione dell'istanza EC2, ho creato un Target Group chiamato acme-challenge e reindirizzo la richiesta all'EC2 con nginx installato chiamato acme-challange-server e registro il nostro acme-challenge-server come target. Se tutto va senza problemi, il tuo schermo sarà simile a questo.

Passo 2: Creare una Regola del Listener dell'Application Load Balancer
Dobbiamo modificare e creare una nuova regola del listener per accettare e reindirizzare le richieste /.well-known/acme-challenge/* al Target Group acme-challenge. Dopo questo passaggio, il tuo schermo sarà simile a questo.

Ora siamo pronti per richiedere un SSL Let's Encrypt da ACME ed emetterlo senza problemi, importarlo in ACM e assegnarlo all'ALB AWS : ) Questa operazione contiene tre diversi passaggi per l'emissione.
- Richiedere un SSL da Let's Encrypt
- Importare l'SSL richiesto se il dominio o sottodominio corrisponde al record CNAME dell'ALB AWS
- Assegnare il certificato SSL importato all'ALB AWS per l'uso in produzione
Emettiamo e Richiediamo un SSL Let's Encrypt da ACME
Quando cloni il repository git, devi spostare la cartella /opt/alble/renewal-hooks sotto il percorso /etc/letsencrypt/. Altrimenti, non puoi rinnovare il certificato su ACM e la sicurezza tua e dei tuoi clienti verrebbe compromessa. Puoi copiare e incollare mv /opt/alble/renewal-hooks /etc/letsencrypt/
Leggi il file README.md nel repository git e scrivi le tue variabili nel file env. Dopodiché, puoi facilmente eseguire/gestire/creare i certificati SSL Let's Encrypt su AWS Application Load Balancer. Raccomando di usare AWS SSM per eseguire il comando su acme-challange-server per emettere un SSL. Per questo, dovresti aggiungere la policy al tuo Ruolo IAM.
AmazonEC2RoleforSSM
Ho deciso di usare un sottodominio per i test ma non importa. Puoi anche usare un dominio root. I miei domini di test sono awsle-1.ercanermis.com e awsle-2.ercanermis.com
Quando sei nel percorso /opt/alble/, puoi eseguire il comando come ./create-new-site.sh awsle-1.ercanermis.com e vedrai l'output come qui sotto.

Il mio script ALBLe controlla prima il record CNAME per il dominio e/o sottodominio e si assicura prima di continuare. Se scrivi un dominio/sottodominio sbagliato o fai un errore di battitura, ti avviserà tramite avvisi Slack. Gli avvisi sono davvero importanti per l'automazione. Puoi impostare gli Slack Alert nel file env. Ecco l'esempio se hai già emesso il certificato SSL Let's Encrypt prima;

Produzione
Il mio nome DNS ALB AWS è web-application-elb-1302305711.us-east-1.elb.amazonaws.com e posso accedervi via https://web-app.ercanermis.com. Utilizza AWS Certificate Manager per ottenere un SSL.
I miei domini di test sono https://awsle-1.ercanermis.com e https://awsle-2.ercanermis.com e utilizzano Let's Encrypt con AWS Application Load Balancer, sì! : )



Come appaiono i Certificati SSL e ACM dell'ALB AWS?


Spero che questo articolo ti sia d'aiuto! P.S. Non dimenticare di impostare un cron per le richieste di rinnovo.
Codice sorgente: https://github.com/flightlesstux/alble/
Altro da Ercan
Altri due siti, stesso autore, terreno diverso.
IA, LLMs, agenti, ML applicato.
Note sul campo su workload IA. Analisi dei costi Bedrock, pattern di agenti, trade-off di storage vettoriale, failure mode in produzione.
Visita ercan.ai →L'hub. Chi sono, consulenza, contatti.
Hub personale per entrambe le tracce di scrittura. Chi sono, come funziona la consulenza, come contattarmi.
Visita ercanermis.com →