Let's encryptのSSL証明書をワイルドカードドメインで利用するためにDNS-01対応で運用する

前提

流れ

  1. SSL証明書を作成する
  2. AWSにDNSレコード更新用のユーザーを作成する
  3. 定期的にSSL証明書を更新するcrontabを設定する

SSL証明書を作成する

sudo docker run \
    -it \
    --rm \
    --name certbot \
    -v "/etc/letsencrypt:/etc/letsencrypt" \
    -v "/var/lib/letsencrypt:/var/lib/letsencrypt" \
    -v "/root:/root" \
    -e AWS_CONFIG_FILE=/aws/.aws/credentials \
    certbot/dns-route53 \
        certonly \
        --manual \
        --server https://acme-v02.api.letsencrypt.org/directory \
        --preferred-challenges dns \
        -d *.example.com \
        -m admin@example.com \
        --agree-tos \
        --manual-public-ip-logging-ok

AWSDNSレコード更新用のユーザーを作成する

{
    "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/rewrite-your-hosttedzoneID-maybe-Z3XXXXXXXXXXXX"
            ]
        }
    ]
}
  • ユーザーを作成する
    • https://console.aws.amazon.com/iam/home?#/users$new?step=details
      • アクセスの種類: API
      • 既存のポリシーを直接アタッチする。
        • 前項で作った名前を検索ボックスに入力して検索するとすぐ見つかる。
    • ポリシーを選択する。
    • ユーザーを作成する。
    • 作成後の画面に記載されているクレデンシャルをメモっておくかCSVをダウンロードする。

定期的にSSL証明書を更新するcrontabを設定する

[default]
aws_secret_access_key = 41-letters-string
aws_access_key_id = AKIXXXXXXXXXXXXXXXXX
  • AWS route53用のcertbotのdockerイメージを取得する。なくても docker run で取得されるけど問題が起きたときに原因を切り分けたいので取得は取得で。
docker pull certbot/dns-route53
  • 更新できるか試す。作ったばかりなので更新されないがエラーが出ない確認にはなる。
sudo docker run \
-it \
--rm \
--name certbot \
-v "/etc/letsencrypt:/etc/letsencrypt" \
-v "/var/lib/letsencrypt:/var/lib/letsencrypt" \
-v "/root:/root" \
-e AWS_CONFIG_FILE=/aws/.aws/credentials \
certbot/dns-route53 \
    certonly \
    -n \
    --agree-tos \
    --email 'admin@example.com' \
    --dns-route53 \
    --dns-route53-propagation-seconds 30 \
    -d *.example.com
  • 上記のコマンドをcrontabに記載する。これは毎月2日6時0分。運用開始の前に翌日の日付を指定して問題ないことを確認してから日付を希望の日時を指定すること。
0 6 2 * * docker run -it --rm --name certbot -v "/etc/letsencrypt:/etc/letsencrypt" -v "/var/lib/letsencrypt:/var/lib/letsencrypt" -v "/root:/root" -e AWS_CONFIG_FILE=/aws/.aws/credentials certbot/dns-route53 certonly -n --agree-tos --email 'admin@example.com' --dns-route53 --dns-route53-propagation-seconds 30 -d *.example.com