1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

StylezAdvent Calendar 2024

Day 4

Route53を利用してローカル環境からLet'sEncryptの証明書を取得する

Last updated at Posted at 2024-12-03

学んだことや苦労したことを書いていきます。
本記事は個人的な見解であり、筆者の所属するいかなる団体にも関係ございません。

0. はじめに

ローカルの環境で検証する際に自己証明書をよく使うと思います。
ただ、認証関連で余計な気を回す必要がある上に本番環境では利用しない手順となるため、作業中に虚無感に襲われる瞬間があります。
従って、AWSのRoute53を利用することでLet's Encryptから証明書を取得することにしました。

1. ドメイン取得

お名前ドットコムかRoute53でドメインを取得しましょう。
検証用なので、安いドメインで構いません。
お名前ドットコムなら適当にキーワードを入力するだけで安いものを提示してくれます。

2. Route53のホストゾーンにドメインを登録

ドメインを取得できたら、Route53のホストゾーンにドメインを登録します。
AWSのコンソールからホストゾーンを作成します。

image.png

ドメイン名に取得したドメイン名を入力します。

image.png

3. ドメインのネームサーバーにRoute53のネームサーバーを追加

ホストゾーンを登録すると、Route53からルーティングするためのネームサーバー情報が登録されます。

AWS_NameServer.png

このネームサーバーをドメインに登録します。
お名前ドットコムの管理画面から、ネームサーバーの変更を行います。

image.png

ネームサーバーの選択でその他のサービスを選択し、Route53のネームサーバーを入力します。

image.png

4. Route53で利用するレコードを作成

AWSのコンソールから利用するレコードを作成します。
値にはローカルマシンのIPアドレスを記載します。

create_record.png

登録できたらdigやnslookupで正常に名前解決できるかを確認しましょう。
ネームサーバーの反映やレコードの更新は時間がかかる場合があるので、名前解決できない場合は少し間を置いてみてください。

5. IAMユーザーの作成

Route53を利用してLet'sEncryptから証明書を取得する際には、Route53の権限を持つIAMユーザーのアクセスキーが必要となります。
従って、Route53の権限を持つIAMユーザーを作成します。
まず、AWSコンソールのIAMからRoute53の権限を持ったポリシーを作成します。

image.png

サービスからRoute53を選択します。

image.png

必要な権限は以下の通りです。

  • リスト (リソースARNすべて)
    ・GetChange
    ・ListHostedZone
  • 書き込み(リソースARN特定)
    ・ChangeResourceRecordSets

ChangeResourceRecordSetsに指定するARNのResourceidは、Route53のホストゾーンの詳細画面から確認できるZから始まる文字列になります。

Route53_resourceid.png

ポリシーを作成後IAMユーザーを作成します。
許可を設定の画面で、作成したポリシーをアタッチします。

image.png

IAMユーザーを作成後、アクセスキーを作成します。

IAM_API.png

ユースケースにはローカルコードを選択しアクセスキーを作成します。
csvファイルをダウンロードして注意して保管してください。

6. Let's Encryptから証明書を取得する

今回はUbuntuで実施します。
Route53用のcertbot拡張をインストールします。

sudo apt install certbot python3-certbot-dns-route53

環境変数にAPIキーとシークレットをexportします。

export AWS_ACCESS_KEY_ID=YOUR_ACCESS_KEY
export AWS_SECRET_ACCESS_KEY=YOUR_SECRET_KEY

certbotを実行します。環境変数を利用しているため、sudoに-Eオプションを付けてください。

sudo -E certbot certonly --dns-route53 --dns-route53-propagation-seconds 30 -d <your_domain>

通常のcertbotの手順通り、メールアドレスを入力して指示に従ってください。
これで証明書が取得できます。

7. まとめ

自己証明書との虚無感を持った格闘は皆さん経験があると思います。
Route53とLet's Encryptを組み合わせることで、検証すべき内容に集中できるようになり効率も気分も上がるというものです。
自己証明書に苦しむ方はお試しください。

8. おまけ

証明書の自動更新をしたい場合は、/root/.aws/credentialsにアクセスキーの情報を記載したのち、crontabにcertbotを登録します。

/root/.aws/credentials

[default]
aws_access_key_id = YOUR_ACCESS_KEY
aws_secret_access_key = YOUR_SECRET_KEY

crontabにcertbotを登録

sudo crontab -e
# 以下を追加(毎日2回チェック)
0 0,12 * * * certbot renew --quiet
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?