📜

AWSでLet's Encryptの証明書をDNSチャレンジで更新するためのIAMまわりの設定

2023/11/27に公開

前提

  • EC2 で Web サイト/サービスをホストしている
  • 同じ AWS アカウントの Route53 でそのサイトの A/AAAA レコードを出している
  • ACME は DNS チャレンジを利用する
  • Credential は Access Key ではなく IAM Role を使う

手順

1. Route53 コンソールで Hosted zone ID を調べて控えておく

2. IAM コンソールでポリシーを作る

  1. IAM > Policies で "Create policy" をクリック
  2. "Policy Editor" が "Visual" になっていたら "JSON" に変える
  3. certbot-dns-route53 のドキュメント に載っている "Example AWS policy file" の内容を、Policy editor にコピペする
  4. コピペした内容の YOURHOSTEDZONEID を、手順 1. で控えた実際の Hosted zone ID に書き換える
  5. "Next" をクリック
  6. "Policy name" に任意の名前を入力して "Create policy" をクリック

3. IAM コンソールでロールを作る

  1. IAM > Roles で "Create role" をクリック
  2. "Trusted eitity type" で "AWS service" を選択
  3. "Service or usecase" のプルダウンで "EC2" を選択、ラジオボタンも "EC2" を選択
  4. "Next" をクリック
  5. "Permissions policies" で、手順 2. で作ったポリシーを選択して "Next" をクリック
  6. "Role name" に任意の名前を入力して "Create role" をクリック

4. EC2 コンソールでインスタンスにロールを割り当てる

  1. EC2 > Instances > Instances でロールを割り当てるインスタンスを選択
  2. Actions メニューから Security > Modify IAM role を選択
  3. プルダウンで、手順 3. でつくったロールを選択して "Update IAM role" をクリック

以降は、Certbot サイトの説明 (個人的な好みで pip インストール) に従って、certbot をインストールして、証明書を取得して、httpd (nginx、apache httpd など) に設定、ついでに自動更新の cron も設定する。
証明書取得のコマンドは

sudo certbot certonly --dns-route53 -d <Subject の FQDN>

Discussion