📜
AWSでLet's Encryptの証明書をDNSチャレンジで更新するためのIAMまわりの設定
前提
- EC2 で Web サイト/サービスをホストしている
- 同じ AWS アカウントの Route53 でそのサイトの A/AAAA レコードを出している
- ACME は DNS チャレンジを利用する
- Credential は Access Key ではなく IAM Role を使う
手順
1. Route53 コンソールで Hosted zone ID を調べて控えておく
2. IAM コンソールでポリシーを作る
- IAM > Policies で "Create policy" をクリック
- "Policy Editor" が "Visual" になっていたら "JSON" に変える
-
certbot-dns-route53
のドキュメント に載っている "Example AWS policy file" の内容を、Policy editor にコピペする - コピペした内容の
YOURHOSTEDZONEID
を、手順 1. で控えた実際の Hosted zone ID に書き換える - "Next" をクリック
- "Policy name" に任意の名前を入力して "Create policy" をクリック
3. IAM コンソールでロールを作る
- IAM > Roles で "Create role" をクリック
- "Trusted eitity type" で "AWS service" を選択
- "Service or usecase" のプルダウンで "EC2" を選択、ラジオボタンも "EC2" を選択
- "Next" をクリック
- "Permissions policies" で、手順 2. で作ったポリシーを選択して "Next" をクリック
- "Role name" に任意の名前を入力して "Create role" をクリック
4. EC2 コンソールでインスタンスにロールを割り当てる
- EC2 > Instances > Instances でロールを割り当てるインスタンスを選択
- Actions メニューから Security > Modify IAM role を選択
- プルダウンで、手順 3. でつくったロールを選択して "Update IAM role" をクリック
以降は、Certbot サイトの説明 (個人的な好みで pip インストール) に従って、certbot をインストールして、証明書を取得して、httpd (nginx、apache httpd など) に設定、ついでに自動更新の cron も設定する。
証明書取得のコマンドは
sudo certbot certonly --dns-route53 -d <Subject の FQDN>
Discussion