前提
流れ
- SSL証明書を作成する
- AWSにDNSレコード更新用のユーザーを作成する
- 定期的にSSL証明書を更新するcrontabを設定する
- SSL証明書を作成する
- certbotのdockerイメージを取得する。なくても
docker run
で取得されるけど問題が起きたときに原因を切り分けたいので取得は取得で。
shell
docker pull certbot/certbot
- 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
AWSにDNSレコード更新用のユーザーを作成する
- AWS Route53で管理している対象のドメインのhosted zone IDを取得する。
- ドメインのDNSレコードを更新できるポリシーを作成する。
{
"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"
]
}
]
}
定期的に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