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年間は無料で使えます。
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証明書を発行してくれる認証局サービスです。
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#
コメント