Hallo,

In diesem Artikel mochte ich dir erklaren, wie du ein Let's Encrypt SSL mit dem AWS Route53 Service ausstellen kannst. Lass uns mit dem Lernen beginnen.

Was ist Let's Encrypt?

Let's Encrypt ist eine gemeinnutzige Zertifizierungsstelle, betrieben von der Internet Security Research Group (ISRG), die X.509-Zertifikate fur Transport Layer Security-Verschlusselung kostenlos bereitstellt. Das bedeutet, du kannst ein KOSTENLOSES SSL-Zertifikat fur dein Projekt/deine App erhalten und das SSL-Zertifikat ist 90 Tage gultig. Du musst eine Automatisierung zur automatischen Verlangerung einrichten.

Was ist AWS Route53?

Amazon Route 53 ist ein skalierbarer und hochverfugbarer Domain Name System-Dienst. Es wurde am 5. Dezember 2010 veroffentlicht und ist Teil der Cloud-Computing-Plattform von Amazon.com, Amazon Web Services. Du kannst eine neue Domain registrieren, deine bestehende Domain ubertragen oder einfach das DNS-Verwaltungssystem fur deine Domain nutzen.

Fur diesen Artikel verwende ich eine meiner Domains, die bei Google Domains registriert ist, und ich habe mich entschieden, nur das DNS-Verwaltungssystem zu nutzen. Nur fur den Fall: Der Domain-Typ sollte eine Public Hosted Zone auf Route53 sein. Meine Domain ist "ermis.email". Du kannst gerne die NS-Eintrage fur meine Domain uberprufen : )

Warum verwende ich Route 53, um ein Let's Encrypt SSL auszustellen?

Wenn du ein neues SSL-Zertifikat von Let's Encrypt anforderst, sendet certbot eine Anfrage an die Let's Encrypt-Server und ich mochte keine HTTP-Anfrage (unsicher) ausserhalb von AWS senden und empfangen, um ein Verschlusselungszertifikat zu erhalten : ) Ich denke, das ist etwas seltsam und konnte einige Sicherheitsprobleme verursachen.

Andererseits brauchst du vielleicht nur ein SSL-Zertifikat und mochtest dein SSL-Zertifikat nicht direkt an einen nginx oder apache oder irgendeine Art von Webserver-Dienst binden. Und es ist auch bequemer, schneller und auf diese Weise automatisierbar...

IAM Policy

Ich habe mich entschieden, eine AWS EC2 zu verwenden, um ein SSL direkt in AWS auszustellen. Zunachst mussen wir eine IAM Policy fur diesen Vorgang erstellen, um auf Route53 zuzugreifen. Meine EC2 hat eine Elastic IP, um die IAM Policy sicherer zu machen und den Zugriff auf Route53-Ressourcen einzuschranken. Du kannst diese Policy nicht als IAM-Rolle verwenden und ich konfiguriere sie fur aws-cli-Operationen mit einem spezifischen Profilnamen "certbot-route53". Hier ist eine Beispiel-IAM-Policy unten;

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

Der DNS-Name meines Mailservers ist "hermes.ermis.email" und der A-Record zeigt mit Simple Routing auf 3.65.142.23. Ich werde ein Let's Encrypt SSL fur "hermes.ermis.email" anfordern. Meine Domain-TLD ist nicht com/net/org, sieht vielleicht anders aus, aber das ist kein Problem. Es ist nur Domain und DNS : )

Voraussetzungen fur EC2

Wenn du auf einer frisch gestarteten Instanz mit einem offiziellen Amazon Linux 2 AMI laufst, solltest du einige Voraussetzungen installieren. Zunachst mussen wir ein epel-Repository installieren, um certbot und das certbot-dns-route53-Plugin zu installieren. Lass es uns mit einem einzigen Befehl machen!

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

Lass uns ausstellen!

Du kannst meinen Ausstellungsbefehl unten sehen.

[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

Eine letzte Sache

Vergiss nicht, einen Cron-Job einzurichten, um zu uberprufen, ob das SSL eine Verlangerung benotigt. Du kannst den Befehl auch in deinem Cron verwenden.

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

Danke, dass du meinen Artikel gelesen hast, ich hoffe, du hattest Spass damit!