Bonjour,

Dans cet article, je veux vous expliquer comment emettre un SSL Let's Encrypt avec le service AWS Route53. Commencons a apprendre.

Qu'est-ce que Let's Encrypt ?

Let's Encrypt est une autorite de certification a but non lucratif geree par l'Internet Security Research Group (ISRG) qui fournit des certificats X.509 pour le chiffrement Transport Layer Security sans frais. Cela signifie que vous pouvez obtenir un certificat SSL GRATUIT pour votre projet/application et le certificat SSL sera valable 90 jours. Vous devez mettre en place une automatisation pour le renouveler automatiquement.

Qu'est-ce qu'AWS Route53 ?

Amazon Route 53 est un service de systeme de noms de domaine scalable et hautement disponible. Lance le 5 decembre 2010, il fait partie de la plateforme de cloud computing d'Amazon.com, Amazon Web Services. Vous pouvez enregistrer un nouveau domaine ou transferer votre domaine existant ou simplement utiliser le systeme de gestion DNS pour votre domaine.

Pour cet article, j'utiliserai l'un de mes domaines enregistre sur Google Domains et j'ai decide d'utiliser uniquement le systeme de gestion DNS. Au cas ou, le type de domaine doit etre une zone hebergee publique sur Route53. Mon domaine est "ermis.email" Vous pouvez verifier les enregistrements NS pour mon domaine : )

Pourquoi j'utilise Route 53 pour emettre un SSL Let's Encrypt ?

Lorsque vous demandez un nouveau certificat SSL a Let's Encrypt, le certbot envoie une requete aux serveurs Let's Encrypt et je ne veux pas envoyer et recevoir une requete HTTP (non securisee) en dehors d'AWS pour obtenir un certificat de chiffrement : ) Je pense que c'est un peu bizarre et pourrait poser des problemes de securite.

Sinon, peut-etre avez-vous juste besoin d'un certificat SSL et vous ne voulez pas lier votre certificat SSL directement a un nginx ou apache ou tout type de service de serveur web. Et aussi, c'est plus pratique et rapide et permet de faire de l'automatisation de cette maniere...

Politique IAM

J'ai decide d'utiliser une EC2 AWS pour emettre un SSL directement dans AWS et tout d'abord, nous devons creer une politique IAM pour cette operation afin d'acceder a Route53. Mon EC2 a une Elastic IP pour rendre la politique IAM plus securisee et restreindre l'acces aux ressources Route53. Vous ne pouvez pas utiliser cette politique comme un Role IAM et je la configure pour des operations aws-cli avec un nom de profil specifique "certbot-route53". Voici un exemple de politique IAM ci-dessous ;

{
    "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"
                }
            }
        }
    ]
}

Le nom DNS de mon serveur mail est "hermes.ermis.email" et l'enregistrement A pointe vers 3.65.142.23 avec un routage simple. Je vais demander un SSL Let's Encrypt pour "hermes.ermis.email" Mon TLD de domaine n'est pas com/net/org, peut-etre que ca a l'air different mais ce n'est pas un probleme. C'est juste un domaine et un DNS : )

Prerequis pour EC2

Si vous utilisez une instance fraichement lancee avec une AMI officielle Amazon Linux 2, vous devez installer quelques prerequis. Tout d'abord, nous devons installer un depot epel pour installer certbot et le plugin certbot-dns-route53. Faisons-le avec une commande d'une seule ligne !

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

Emettons !

Vous pouvez verifier ma commande d'emission ci-dessous.

[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

Une Derniere Chose

N'oubliez pas de definir un cron pour verifier si le SSL a besoin d'un renouvellement. Vous pouvez aussi utiliser la commande dans votre cron.

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

Merci d'avoir lu mon article, j'espere que vous l'avez apprecie !