Ciao,

In questo articolo, voglio spiegarti come puoi emettere un certificato SSL Let's Encrypt con il servizio AWS Route53. Iniziamo ad imparare.

Cos'è Let's Encrypt?

Let's Encrypt è un'autorità di certificazione senza scopo di lucro gestita da Internet Security Research Group (ISRG) che fornisce certificati X.509 per la crittografia Transport Layer Security gratuitamente. Significa che puoi ottenere un certificato SSL GRATUITO per il tuo progetto/app e il certificato SSL sarà valido per 90 giorni. Devi creare un'automazione per rinnovarlo automaticamente.

Cos'è AWS Route53?

Amazon Route 53 è un servizio Domain Name System scalabile e altamente disponibile. Rilasciato il 5 dicembre 2010, fa parte della piattaforma di cloud computing di Amazon.com, Amazon Web Services. Puoi registrare un nuovo dominio o trasferire il tuo dominio esistente o semplicemente usare il sistema di gestione DNS per il tuo dominio.

Per questo articolo, userò uno dei miei domini che è registrato su Google Domains e ho deciso di usare solo il sistema di gestione DNS. Per sicurezza, il tipo di dominio dovrebbe essere una hosted zone pubblica su Route53. Il mio dominio è "ermis.email" Puoi sentirti libero di controllare i record NS per il mio dominio : )

Perché uso Route 53 per emettere un SSL Let's Encrypt?

Quando richiedi un nuovo certificato SSL da Let's Encrypt, certbot invia una richiesta ai server Let's Encrypt e non voglio inviare e ricevere una richiesta HTTP (non sicura) fuori da AWS per ottenere un certificato di crittografia : ) Penso che sia un po' strano e potrebbe causare alcuni problemi di sicurezza.

Altrimenti, forse hai solo bisogno di un certificato SSL e non vuoi associare il tuo certificato SSL direttamente a nginx o apache o qualsiasi tipo di servizio server web. Ed inoltre, è più conveniente e veloce e permette di fare automazione in questo modo...

Policy IAM

Ho deciso di usare un'EC2 AWS per emettere un SSL direttamente in AWS e prima di tutto, dobbiamo creare una Policy IAM per questa operazione per accedere a Route53. La mia EC2 ha un Elastic IP per rendere più sicura la Policy IAM e limitare l'accesso alle risorse Route53. Non puoi usare questa policy come Ruolo IAM e l'ho configurata per operazioni aws-cli con un nome di profilo specifico "certbot-route53". Ecco un esempio di Policy IAM qui sotto;

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "CertbotRoute53",
            "Effect": "Allow",
            "Action": [
                "route53:GetChange",
                "route53:ListHostedZones"
            ],
            "Resource": "*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": "3.92.136.59/32"
                }
            }
        },
        {
            "Sid": "CertbotRoute531",
            "Effect": "Allow",
            "Action": "route53:ChangeResourceRecordSets",
            "Resource": "arn:aws:route53:::hostedzone/Z01859902ZBFBUXJ0AV3J",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": "3.92.136.59/32"
                }
            }
        }
    ]
}

Il nome DNS del mio server di posta è "hermes.ermis.email" e il record A punta a 3.65.142.23 con Simple Routing. Richiederò un SSL Let's Encrypt per "hermes.ermis.email". Il TLD del mio dominio non è com/net/org, forse sembra diverso ma non è un problema. È solo dominio e DNS : )

Requisiti per EC2

Se stai eseguendo un'AMI Amazon Linux 2 appena lanciata, dovresti installare alcuni prerequisiti. Prima di tutto, dobbiamo installare un repository epel per installare certbot e il plugin certbot-dns-route53. Facciamolo con un comando a riga singola!

[root@ip-172-31-89-11 ~]# amazon-linux-extras install -y epel && yum install -y certbot python2-certbot-dns-route53

Emetterlo!

Puoi controllare il mio comando di emissione qui sotto.

[root@ip-172-31-89-11 ~]# export AWS_PROFILE=certbot-route53; \
> certbot certonly --dns-route53 \
> --agree-tos \
> -m hello@ermis.email \
> --non-interactive \
> -d hermes.ermis.email

Un'Ultima Cosa

Non dimenticare di impostare un cron per controllare se l'SSL ha bisogno di rinnovo. Puoi anche usare il comando nel tuo cron.

00 00 * * * export AWS_PROFILE=certbot-route53; certbot renew -q

Grazie per aver letto il mio articolo, spero ti sia piaciuto!