AmazonLinux+Route53でLetsEncryptのDNS-01認証する


DNS-01とは

LetsEncryptから発行されるワンタイムトークンをDNSのTXTレコードに設定する認証方式。
IP制限などでHTTP-01での認証ができない場合に有効。

Route53を使ったDNS-01を行う環境が入ったDockerイメージ

Certbotのdns_route53プラグインでRoute53を使ったDNS-01認証ができるが、CertbotはAmazonLinuxに対応していないのでDockerを使う。

手順

1. Route53のレコードを編集するIAMポリシーを作成

{
    "Version": "2012-10-17",
    "Id": "certbot-dns-route53 sample policy",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "route53:ListHostedZones",
                "route53:GetChange"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect" : "Allow",
            "Action" : [
                "route53:ChangeResourceRecordSets"
            ],
            "Resource" : [
                "arn:aws:route53:::hostedzone/YOURHOSTEDZONEID"
            ]
        }
    ]
}
  • YOURHOSTEDZONEID は ドメインの Hosted Zone ID をコピー

2. 作成したポリシーを証明書を作成するEC2のロールにセット

省略

3. 証明書を作成するEC2で以下を実行

# 事前にDockerをインストールしておく
yum install docker
service docker start
chkconfig docker on
docker run  -v "/etc/letsencrypt:/etc/letsencrypt" certbot/dns-route53 certonly -n --agree-tos --email [LetsEncryptアカウントメールアドレス] --dns-route53 -d [ドメイン名]
  • /etc/letsencrypt/live/[ドメイン名] ディレクトリに秘密鍵(privkey1.pem)と証明書(cert1.pem)がインストールされる