ァクトチェック結果を反映し、修正箇所を反映した完成版を再生成した。
Route 53 APIとDNS-01チャレンジでACME証明書取得を自動化する方法
ACMEプロトコル(Let’s Encrypt等)でワイルドカード証明書を取得したり、Webサーバーの80/443ポートを開放せずに証明書を発行したりするには、DNS-01チャレンジが必須となる。
DNS-01チャレンジでは、指定されたランダムな文字列(TXTレコード)をDNSサーバーに一時的に書き込む必要がある。これを手動で行うのは運用の負担が大きいため、DNS管理をAmazon Route 53へ集約し、AWS API(IAM)経由で自動化構成を構築する手順と、導入時のデメリット・注意点を解説する。
全体の流れ
- 対象ドメインのネームサーバー(NS)をAmazon Route 53(パブリックホストゾーン)に変更する
- AWS IAMで特定ホストゾーンのレコード編集権限のみを持つIAMユーザー/ロールを作成する
- ACMEクライアント(acme.sh や Certbot)にAWSアクセスキー等を設定し、自動取得を実行する

1. Route 53へのNS委任
まずは対象ドメインのDNS管理をAmazon Route 53に集約する。
1-1. Route 53でパブリックホストゾーンを作成
AWSマネジメントコンソールからRoute 53を開き、対象ドメイン名(例: example.com)でパブリックホストゾーンを作成する。
1-2. レジストラ側でネームサーバーの変更
ホストゾーン作成時に割り当てられた4つのNSレコード(例: ns-xxx.awsdns-xx.com. など)をコピーし、お名前.comやXserverなどのドメイン取得元(レジストラ)の設定画面でネームサーバー変更を行う。
※Route 53でドメイン自体を取得した場合は自動で設定される。
2. 最小権限のIAMポリシーとユーザー作成
ACMEクライアントがRoute 53上のDNSレコードを自動で書き換えるための専用アクセスキーを発行する。セキュリティの観点から、対象ホストゾーンのみに権限を絞ったアクセス権限を設定する。
2-1. IAMポリシーの作成
AWS IAMコンソールで以下のポリシー(JSON)を作成する。YOUR_HOSTED_ZONE_ID は対象ホストゾーンのIDに置き換える。
JSON
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"route53:GetChange",
"route53:ListHostedZones",
"route53:ListHostedZonesByName"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"route53:ChangeResourceRecordSets"
],
"Resource": "arn:aws:route53:::hostedzone/YOUR_HOSTED_ZONE_ID"
}
]
}
2-2. IAMユーザーとアクセスキーの発行
- プログラムによるアクセス専用のIAMユーザーを作成し、上記ポリシーを直接アタッチする。
- アプリケーション用アクセスキー(
AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY)を発行・保存する。※AWS EC2上で実行する場合は、アクセスキー固定発行の代わりにIAMロールをインスタンスにアタッチする方式が推奨される。
3. ACMEクライアントでの自動化設定
軽量かつ設定が容易な acme.sh と、標準的な Certbot の2パターンの設定例を示す。
パターンA: acme.sh を使う場合(推奨)
acme.sh はRoute 53連携(dns_aws)を標準サポートしている。
3-1. 環境変数のセット
作成したIAMユーザーのアクセスキーを環境変数に設定する。
Bash
export AWS_ACCESS_KEY_ID="発行したアクセスキーID"
export AWS_SECRET_ACCESS_KEY="発行したシークレットアクセスキー"
3-2. 証明書の発行コマンド実行
以下のコマンドで、DNS-01チャレンジによる証明書取得を実行する。
Bash
acme.sh --issue --dns dns_aws -d example.com -d '*.example.com'
コマンド実行時、acme.sh は自動的にRoute 53 APIを叩いて _acme-challenge.example.com にTXTレコードを書き込み、検証完了後にレコードを削除してくれる。一度成功するとキー情報は ~/.acme.sh/account.conf に保存され、cron等による自動更新が行われる。
セキュリティ上の注意: 設定された認証情報は暗号化されず平文(プレーンテキスト)で保存されるため、
chmod 600 ~/.acme.sh/account.conf等で設定ファイルのアクセス権限を厳格に管理すること。
パターンB: Certbot を使う場合
Certbotを使用する場合は、Route 53用のDNSプラグインを追加導入する。
3-1. プラグインのインストール
OSの環境に合わせてプラグインを導入する(例: Ubuntu / Debian系)。
Bash
sudo apt update
sudo apt install python3-certbot-dns-route53
3-2. AWS認証情報の設定
~/.aws/credentials や /etc/letsencrypt/aws-credentials.ini などに認証情報を記載し、権限を制限する。
Ini, TOML
# /etc/letsencrypt/aws-credentials.ini
aws_access_key_id = 発行したアクセスキーID
aws_secret_access_key = 発行したシークレットアクセスキー
パーミッションを厳格化しておく。
Bash
sudo chmod 600 /etc/letsencrypt/aws-credentials.ini
3-3. 証明書発行の実行
以下のコマンドで証明書を取得する。
Bash
sudo certbot certonly \
--dns-route53 \
-d example.com \
-d '*.example.com'
※EC2上でIAMロールを利用している場合は、認証情報ファイルを指定せずに --dns-route53 のみでIAMロールを自動検出して実行可能だ。
補足: Certbot 3.0.0以降、旧来の待機時間指定オプション(
--dns-route53-propagation-seconds)は削除されている。プラグイン自身がRoute 53のGetChangeAPIをポーリングしてDNSの反映状態(INSYNC)を自動検知して処理を進行するため、秒数オプションの指定は不要となっている。
4. デメリットと導入時の注意点
導入・運用にあたっては以下のデメリットや注意点を考慮する必要がある。
① 従量課金コストが発生する
- ホストゾーン基本料金Cloudflareのフリープランと異なり、Route 53は1ホストゾーンあたり月額0.50 USDの基本料金が発生する。また、クエリ数に応じた従量課金も加算される。
② IAMアクセスキーの管理リスク
- 資格情報漏洩時のリスクアクセスキーが漏洩した場合、対象ホストゾーンのDNSレコードを書き換えられ、ドメインの乗っ取りや偽証明書発行のリスクが生じる。
- 対策: 全権限(
AdministratorAccessやAmazonRoute53FullAccess)は絶対に付与せず、対象ホストゾーンIDに限定したカスタムIAMポリシーを使用すること。可能な限りEC2等のIAMロールを活用し、固定アクセスキーの発行を避ける。 - acme.shの保管方式:
acme.shを利用する場合、設定ファイル(account.conf)にキーが平文保存される点にも留意し、パーミッション制限(chmod 600)を徹底する。
- 対策: 全権限(
③ DNS伝播(反映)のタイムラグ
- 検証完了までのレイテンシRoute 53の変更セット(
ChangeResourceRecordSets)が全世界のネームサーバーに反映完了(INSYNC)するまで、数十秒〜1分程度を要する。- 仕組み: Certbot等のクライアントはAPI経由で反映状態を定期的にポーリングし、完了を確認してから検証ステップへ進む仕組みになっている。
④ DNS運用移管に伴う障害リスク
- 移行時のレコード不足他社DNSからRoute 53に切り替える際、既存のMXレコードやTXTレコードなどの登録漏れがあると、メール受信不達やWebアクセスの障害が発生する。
5. まとめ
DNS-01チャレンジとAmazon Route 53 APIを組み合わせることで、以下のメリットが得られる。
- ワイルドカード証明書(
*.example.com)が容易に取得できる - プライベートネットワーク内のサーバーでも、80/443ポートを開けずに証明書を取得・更新できる
- IAMポリシーで対象ホストゾーンの権限のみに絞り込み、AWS EC2環境であればIAMロールによる鍵レス運用も実現できる
月額0.50ドルのコストは発生するものの、AWS環境との親和性が高く、非常に堅牢な証明書自動化運用を構築できる。
