Certificats SSL gratuits avec Certbot dans AWS Lambda – Vittorio Nardone

Je gère plusieurs applications Web utilisant CloudFront pour la distribution de contenu, associées à un bucket S3 source. J’ai donc décidé de créer une simple fonction Lambda qui traite de l’obtention de certificats SSL avec Certbot et de la vérification périodique de leur date d’expiration. Si nécessaire, il renouvelle et importe automatiquement le nouveau certificat dans AWS Certificate Manager.
- s’il n’est pas présent, un nouveau certificat est demandé à l’aide de Certbot. Afin de terminer correctement le processus de vérification de la propriété du domaine, la fonction copie le jeton de validation dans les ressources statiques du domaine d’hébergement de compartiment S3
- pour les certificats existants, la date d’expiration est vérifiée et, si nécessaire, le processus de renouvellement est effectué
Certbot est écrit en Python et peut être facilement utilisé pour automatiser les processus de demande, de renouvellement et de révocation de certificats. Cependant, son utilisation dans un environnement AWS Lambda nécessite une étape de préparation supplémentaire, afin que tous les packages et dépendances nécessaires soient correctement installés. Ce guide fantastique explique en détail comment utiliser une instance EC2 à cette fin. J’ai préparé le paquet contenant la version 1.3.0 de Certbot qui est disponible dans le dépôt liés à ce poste.
Certbot vérifie que son arborescence de configuration est valide. Il vérifie, entre autres, la présence de liens symboliques dans le répertoire en direct pour chaque domaine.
Pour demander un certificat, vous devez réussir un défi, qui prouve la propriété du domaine concerné. Pour que la fonction Lambda gère correctement ce défi, il est nécessaire:
- Le compartiment S3 est déjà configuré comme source de distribution CloudFront pour le domaine ou, en variante, l’hébergement de site Web statique (HTTP) du compartiment S3 est – temporairement – actif
- configuration DNS correcte pour le domaine (CNAME vers CloudFront / S3)
- Rôle IAM pour autoriser les opérations PutObject et DeleteObject sur le compartiment S3
Une fois le certificat obtenu, la fonction lambda se charge de l’importer dans ACM. Si un certificat existe déjà pour le même domaine, il est remplacé en spécifiant l’ARN relatif lors de l’importation.
CloudWatch est utilisé pour exécuter la fonction lambda une fois par jour. Parmi les paramètres de configuration lambda, une variable d’environnement ( CERTS_RENEW_DAYS_BEFORE_EXPIRATION ) détermine combien de jours avant la date limite renouveler le certificat unique. La date d’expiration est obtenue par ACM. Aucun renouvellement inutile n’est tenté, de sorte que l’exécution lambda peut être planifiée quotidiennement sans soucis.
dans le dépôt de ce projet, le modèle CloudFormation est disponible pour créer la pile. Cela inclut la fonction, son rôle, l’événement CloudWatch et ses autorisations.
Obtenir des certificats SSL gratuits pour vos projets est vraiment utile; l’automatisation de sa gestion à travers ce projet m’a donné l’occasion de l’oublier et de vivre heureux.