【AWS】EC2で独自ドメインのHTTPS設定

AWS

Amazon Web ServiceのEC2サーバ上で独自ドメインのHTTPS設定をしてWEB公開するまでの記録(備忘録)です。

前提条件

  • AWSのEC2インスタンス起動済
  • AWS EC2(Ubuntu24.04 / t2.micro / ap-northeast-1)
  • Apache/2.4.x
  • Elastic IPアドレス(AWSの固定IP)割り当て
  • Let’s Encrypt で無料SSL証書発行
  • お名前ドットコムで独自ドメインを取得
  • お名前ドットコムのDNSを使用

利用形態のイメージ

▼次のような構成をイメージしています。

Elastic IPの料金

Elastic IPの料金については次の記事に記載されています。

AWSアカウント新規登録から1年間は無料で使えます。

料金 - Amazon VPC | AWS
定義した論理的に分離された仮想ネットワークで AWS リソースを起動できるようにするサービスである Amazon VPC の料金についてご紹介します。

AWS アカウントで使用するパブリック IPv4 アドレスごとに 1 時間単位の料金をお支払いいただきます。パブリック IPv4 アドレスが、所有する AWS リソースに関連付けられている使用中のパブリック IPv4 アドレスであっても、AWS リソースに関連付けられていない AWS アカウント内のアイドル状態のパブリック IPv4 アドレスであっても、料金は同じです。

使用中のパブリック IPv4 アドレスの 1 時間あたりの料金は 0.005 USD です
アイドル状態のパブリック IPv4 アドレスの 1 時間あたりの料金は 0.005 USD です

今回のように試験的に1アドレスだけ割り当てする場合、

1日当たり、0.005 USD × 24時間 = 0.12 USD(150円換算で18円)

30日当たり、0.12 USD × 30日 = 3.6 USD(150円換算で540円)

365日当たり、0.12 USD × 365日 = 43.8 USD(150円換算で6,570円)です。

AWS EC2へのElastic IP割り当て

AWSのEC2コンソールを開き、サイドメニューの

「ネットワーク&セキュリティ」から「Elastic IP」を開きます。

「Elastic IP アドレスを割り当てる」ボタンをクリックし「割り当て」ボタンをクリックします。

Elastic IP の一覧に表示されたIPアドレスのリンクをクリックして詳細画面に入り、

「Elastic IP アドレスの関連付け」ボタンをクリックします。

「リソースタイプ」は「インスタンス」を選択し、

「インスタンス」の欄にカーソルを入れてインスタンスを選択し、

「プライベートIPアドレス」の欄にカーソルを入れてIPアドレスを選択し、

「関連付ける」ボタンをクリックします。

Apacheが起動している状態で、WEBブラウザで

「http://xxx.xxx.xxx.xxx/」(xxx.xxx.xxx.xxxの部分にElastic IPアドレスを指定)

にアクセスしてコンテンツが表示されればOKです。

独自ドメイン取得(有料)

当記事執筆時点では、「.work」ドメインが

AWSのドメイン管理よりもお手頃価格だったので

お名前ドットコムにて取得。

※お名前ドットコムは各種追加有料サービスへの誘導が激しく出現するので、

※間違って追加有料サービスに迷い込まないように注意が必用。

※サービス設定の際には、一つ一つ、有料なのか無料なのか慎重な確認が必用です。

※今回の利用形態では、お名前ドットコムではDNSだけ利用できれば良いので、

※ドメイン取得時には「ドメインの利用用途」では

※「決めていない(他社サーバを利用中の方)」を選択します。

DNSレコード設定(無料)

独自ドメインへのアクセスがあった際にAWSのElastic IPへアクセスが向くようにするために、DNSのレコード設定をします。

今回の趣旨は、WEBサイトのHTTPS設定がメインであり、

独自ドメイン名の正引きだけできれば充分だと思うので、Aレコードの追加だけで充分でしょう。

※独自ドメインに対応するIPアドレスの紐づけを世界中に伝えるための設定です。

※独自ドメインのメールサーバーを立てる場合にはMXレコードの追加も必要です。

※スパム対策等で逆引きが必用な場合にはPTRレコードも追加しておいてください。

お名前ドットコムにログインしたら、サイドメニューから

「ドメイン」→「利用ドメイン一覧」→取得したドメイン名のリンク

を辿って「ドメイン詳細」画面に入ります。

※途中、イヤらしい程に「申し込む」や「まだ更新していません」等の追加有料サービスへの誘導がしつこく表示されますが、惑わされないように注意しましょう。

「ネームサーバー情報」の「DNSレコード」の箇所にある「設定」ボタンをクリックします。

「次へ」ボタンをクリックします。

※「DNS追加オプション」の「お申込み」を間違ってクリックしないように注意!

「DNSレコード設定を利用する」の「設定する」ボタンをクリックします。

「入力」の箇所の下の方に「A/AAAA/CNAME/MX/NS/TXT/SRV/DS/CAAレコード」という箇所があるので、

「ホスト名」の欄には、サブドメイン名(あれば。なければ未入力)、

※「www.example.com」の場合は「www」のみ入力。

※「example.com」の場合は未入力。

「TYPE」の欄は「A」を選択します。

「TTL」はデフォルトの「3600」(秒)で充分だと思います。

「VALUE」の欄にElastic IPアドレスをドットで区切られたオクテット毎に入力します。

「追加」ボタンをクリックします。

「DNSレコード設定用ネームサーバー変更確認」の箇所の

「転送用のネームサーバー(01.dnsv.jp / 02.dnsv.jp / 03.dnsv.jp / 04.dnsv.jp)に変更する」

の欄にチェックを入れて(変更済の場合はチェック不要)

「確認画面へ」ボタンをクリックします。

「ドメインプロテクション」(有料)の申し込みダイアログが表示されるので、

「設定しない」ボタンをクリックします。(本当にしつこい!)

内容を確認してから「設定する」ボタンをクリックします。

Let’s EncryptでSSL証明書発行(無料)

Let’s Encryptは無料でSSL証明書を発行してくれる認証局サービスです。

Let's Encrypt - フリーな SSL/TLS 証明書
Let's Encryptは、非営利団体の Internet Security Research Group (ISRG) が提供する自動化されたフリーでオープンな認証局です。

SSLを適用するWEBサーバーに自分のPCからSSH接続できることが前提です。

▼1.snapdインストール

AWS EC2のインスタンスにSSH接続します。

snapdをインストールします。

sudo apt install snapd

▼2.certbotをインストール

続いて、Let’s Encryptでの証明書発行自動化ツールcerbotをインストールします。

sudo snap install --classic certbot

▼3.シンボリックシンク作成

インストールしたcerbotにパスが通るようにシンボリックリンクを作成します。

sudo ln -s /snap/bin/certbot /usr/bin/certbot

▼4.Apache設定バックアップ

一応、実行前にApacheの設定ファイル群をバックアップしておくことをお勧めします。

sudo tar cfz /etc/apache2.bk.tgz /etc/apache2

バックアップから復元して上書きする場合は

sudo (cd /etc; tar xfz apache2.bk.tgz)

▼5.証明書発行

sudo certbot --apache

これ一発で自動設定してくれます。

証明書ファイルは「/etc/letsencrypt/live」内の

ドメイン名のフォルダ内に作成されます。

Apache設定の自動調整とApacheのサービス再起動までしてくれます。

WEBブラウザで

「https://xxx.xxx.xxx.xxx/」(xxx.xxx.xxx.xxxの部分にElastic IPアドレスを指定)

にアクセスしてコンテンツが表示されればOKです。

証明書自動更新設定

Let’s Encryptで発行される証明書の有効期限は3か月です。

自動更新にしておかないと、つい更新を忘れて、

気づいたら無効になっていたなんとことになってしまいます。

自動更新のテストと、自動更新実行の設定確認をしておきましょう。

sudo certbot renew --dry-run

少し時間がかかりますが、

「Congratulations, all simulated renewals succeeded:」

のように表示されれば成功です。

証明書自動更新の設定は、

1./etc/crontab

2./etc/cron.*/*

3.systemctl list-timers

のうちのいずれかに設定されています。

1の場合は、

cat /etc/crontab

で確認できます

2の場合は、

  • /etc/cron.d/
  • /etc/cron.daily/
  • /etc/cron.hourly/
  • /etc/cron.monthly/
  • /etc/cron.weekly/
  • /etc/cron.yearly/

のいずれかに設定されます。

3.の場合は、

sudo systemctl list-timers

で確認できます。

筆者の場合は3のケースでした。

root@ip-172-31-13-31:/etc# systemctl list-timers
NEXT                            LEFT LAST                              PASSED UNIT                           ACTIVATES                       
Mon 2024-05-20 13:20:00 UTC      40s Mon 2024-05-20 13:10:06 UTC     9min ago sysstat-collect.timer          sysstat-collect.service
Mon 2024-05-20 13:30:12 UTC    10min Mon 2024-05-20 12:53:49 UTC    25min ago fwupd-refresh.timer            fwupd-refresh.service
Mon 2024-05-20 13:39:00 UTC    19min Mon 2024-05-20 13:09:01 UTC    10min ago phpsessionclean.timer          phpsessionclean.service
Mon 2024-05-20 17:31:57 UTC 4h 12min Mon 2024-05-20 07:18:40 UTC            - motd-news.timer                motd-news.service
Mon 2024-05-20 19:18:27 UTC 5h 59min Fri 2024-05-17 07:05:00 UTC            - man-db.timer                   man-db.service
Mon 2024-05-20 20:42:00 UTC       7h -                                      - snap.certbot.renew.timer       snap.certbot.renew.service
Mon 2024-05-20 23:24:25 UTC      10h Mon 2024-05-20 09:56:06 UTC 3h 23min ago apt-daily.timer                apt-daily.service
Tue 2024-05-21 00:00:00 UTC      10h Mon 2024-05-20 04:41:09 UTC            - dpkg-db-backup.timer           dpkg-db-backup.service
Tue 2024-05-21 00:00:00 UTC      10h Mon 2024-05-20 04:41:09 UTC            - logrotate.timer                logrotate.service
Tue 2024-05-21 00:07:00 UTC      10h -                                      - sysstat-summary.timer          sysstat-summary.service
Tue 2024-05-21 06:55:07 UTC      17h Mon 2024-05-20 06:57:45 UTC            - apt-daily-upgrade.timer        apt-daily-upgrade.service
Tue 2024-05-21 07:42:31 UTC      18h Mon 2024-05-20 07:42:31 UTC 5h 36min ago update-notifier-download.timer update-notifier-download.service
Tue 2024-05-21 07:52:29 UTC      18h Mon 2024-05-20 07:52:29 UTC 5h 26min ago systemd-tmpfiles-clean.timer   systemd-tmpfiles-clean.service
Tue 2024-05-21 22:29:50 UTC 1 day 9h Thu 2024-05-16 07:37:10 UTC            - update-notifier-motd.timer     update-notifier-motd.service
Sun 2024-05-26 03:10:36 UTC   5 days Mon 2024-05-20 04:42:02 UTC            - e2scrub_all.timer              e2scrub_all.service
Mon 2024-05-27 01:31:14 UTC   6 days Mon 2024-05-20 05:26:10 UTC            - fstrim.timer                   fstrim.service

16 timers listed.
Pass --all to see loaded but inactive timers, too.
root@ip-172-31-13-31:/etc# 

参考サイト

Certbot Instructions
Tagline
Let’s Encrypt(無料のSSL証明書)を作成する方法
昔は一部のコンテンツのみが導入していたHTTPS接続ですが、現在はSEOにも影響があるなどの理由からほぼ必須だと言われています。ただし通常のSSL証明書は費用がかかるため個人サイトやブログといったサイトへの適用には躊躇してしまいがちです。そ

コメント

タイトルとURLをコピーしました