AWS Route53でLet's Encrypt SSLを発行する
この記事では、AWS Route53サービスを使ってLet's Encrypt SSLを発行する方法を紹介する。学び始めよう。

こんにちは、
この記事では、AWS Route53サービスを使ってLet's Encrypt SSLを発行する方法を紹介する。学び始めよう。
Let's Encryptとは?
Let's EncryptはInternet Security Research Group(ISRG)が運営する非営利の証明機関で、Transport Layer Security暗号化のためのX.509証明書を無料で提供している。つまり、プロジェクトやアプリ用に無料のSSL証明書を取得でき、そのSSL証明書は90日間有効だ。自動更新のために何らかの自動化を行う必要がある。
AWS Route53とは?
Amazon Route 53はスケーラブルで高可用なドメインネームシステムサービスだ。2010年12月5日にリリースされ、Amazon.comのクラウドコンピューティングプラットフォームであるAmazon Web Servicesの一部である。新しいドメインを登録したり、既存のドメインを移管したり、単にドメインのDNS管理システムを使用したりできる。
この記事では、Google Domainsで登録した自分のドメインの一つを使用し、DNS管理システムだけを使うことにした。念のため、ドメインタイプはRoute53のパブリックホストゾーンである必要がある。私のドメインは"ermis.email"だ。私のドメインのNSレコードを自由にチェックしてほしい : )
なぜLet's Encrypt SSLの発行にRoute 53を使うのか?
Let's Encryptから新しいSSL証明書をリクエストすると、certbotがLet's Encryptサーバーにリクエストを送信するが、暗号化証明書を取得するためにAWSの外にHTTP(安全でない)リクエストを送受信したくない : ) それは少し奇妙で、セキュリティ上の問題を引き起こす可能性があると思う。
あるいは、単にSSL証明書が必要で、nginxやapache、その他の種類のウェブサーバーサービスにSSL証明書を直接バインドしたくない場合もある。そして、この方法の方がより便利で速く、何らかの自動化も可能だ...
IAMポリシー
AWS内で直接SSLを発行するためにAWS EC2を使用することにした。まず、Route53にアクセスするためのIAMポリシーを作成する必要がある。EC2にはElastic IPがあり、IAMポリシーをより安全にし、Route53リソースへのアクセスを制限する。このポリシーはIAMロールとして使用できず、特定のプロファイル名"certbot-route53"でaws-cli操作用に設定する。以下がIAMポリシーの例だ:
{
"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"
}
}
}
]
}メールサーバーのDNS名は"hermes.ermis.email"で、AレコードはSimple Routingで3.65.142.23を指している。"hermes.ermis.email"用のLet's Encrypt SSLをリクエストする。ドメインのTLDがcom/net/orgではないので少し違って見えるかもしれないが問題ない。ただのドメインとDNSだ : )

EC2の要件
公式のAmazon Linux 2 AMIで新しく起動したインスタンスで実行している場合、いくつかの前提条件をインストールする必要がある。まず、certbotとcertbot-dns-route53プラグインをインストールするためにepelリポジトリをインストールする必要がある。1行のコマンドでやってしまおう!
[root@ip-172-31-89-11 ~]# amazon-linux-extras install -y epel && yum install -y certbot python2-certbot-dns-route53
発行しよう!
発行コマンドは以下の通り。
[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
最後に一つ
SSLの更新が必要かどうかをチェックするcronを設定するのを忘れずに。cronに以下のコマンドを使用することもできる。
00 00 * * * export AWS_PROFILE=certbot-route53; certbot renew -q私の記事を読んでくれてありがとう。楽しんでいただけたなら幸いだ!
Ercan の他のサイト
同じ著者、別の領域のサイトが2つ。