こんにちは、@Manabu です。
個人でAWSを使っているときに、一番気になるのはコスト面ではないでしょうか。
EC2、ALB、RDS…など、よく使うサービスほど使用料金が高くなり、稼働を続けると驚くほどの価格になることがあります。
EC2、ALB、RDSで1万円を余裕で超えている…
これらのサービスをできるだけ少なくしても、十分に稼働するWebサービスを運用したいと考えている人も多いでしょう。
今回は、EC2とRoute53だけを使ってHTTPSのWebサイトを構築する方法を解説します。この方法を知っていれば、将来的にCloudFrontや他のAWSサービスを利用する際にも役立ちます。
証明書の取得とせってにはCerbotを使用し、無料で安全なHTTPS通信を実現します。
この記事は、以下のような方におすすめです。
ぜひ、参考にしてください。
概要
まず、今回行う完成形とそれぞれの用語について簡単に説明します。
完成形
今回は、以下のような動きになります。
ブラウザから「test.it-slroom.blog」と検索すると、EC2に対してHTTPSでWebサービスを閲覧できるように対応します。
コストがかかるのは、以下の想定です。
HTTPSとは?
HTTPS(HyperText Transfer Protocol Secure)は、HTTPにSSL/TLSプロトコルを組み合わせたセキュアな通信手段です。
HTTPSを使用することで、WebブラウザとWebサーバー間のデータ通信が暗号化され、セキュリティが向上します。
これにより、ユーザーのプライバシー保護やデータの機密性が確保されます。
HTTPSは現代のWebセキュリティにおいて不可欠な要素であり、ユーザーの信頼を確保するためにも広く採用されています。
Cerbotとは?
Cerbotは、Let’s Encryptが提供する自動化されたSSL/TLS証明書の取得および更新ツールです。
Let’s Encryptは無料で利用できる証明書認証機関(CA)であり、Webサイトのセキュリティを強化するためのSSL/TLS証明書を提供しています。
Certbotを使用することで、コマンドラインから簡単に証明書を取得し、Webサーバー(例えばApacheやNginx)に自動的に設定することができます。
mod_sslとは?
mod_sslは、Apache HTTPサーバーでSSL/TLSを有効にするためのモジュールです。
このモジュールを使用することで、Webサーバーとクライアント間の通信を暗号化し、セキュリティを強化することができます。
mod_sslは、SSLおよびTLSプロトコルをサポートしており、HTTPS(HTTP over SSL/TLS)を実現するための主要なコンポーネントです。
構築手順
こちらの対応を行うための手順を記載していきます。
※EC2の作成は、省略しています。
EC2の作成
まずは、EC2を作成します。画像は作成後のコンソールになります。
以下の設定を行うようにしてください。
・セキュリティグループで、80と443ポートを全て許可する(80ポートはCerbotを使用するため)
Route53でAレコードを作成
Route53でEC2に向けてAレコードを作成します。値にEC2のElasticIPを登録します。
この設定で、「test.it-slroom.blog」でブラウザ検索するとEC2にアクセスできるようになります。
Apacheをインストール、起動
WebサーバーにApacheを使用するため、インストールして起動まで行います。
併せて、mod_sslモジュールもインストールします。
sudo dnf install -y httpd mod_ssl
systemctl start httpd
ここまでで、ブラウザ検索してみるとHTTP通信で画面を表示させることができます。
CerbotでSSL証明書を発行
Apacheの設定ファイルに設定を追加して、Cerbotを利用しSSL証明書を発行します。
今回は初期セットアップなので、専用のconfファイルを作成します。
//confファイルの作成
sudo vi /etc/httpd/conf.d/test.it-slroom.blog.conf
//以下を記載
<VirtualHost *:80>
ServerName test.it-slroom.blog
DocumentRoot /var/www/html
<Directory /var/www/html>
AllowOverride All
Require all granted
</Directory>
ErrorLog /var/log/httpd/test.it-slroom.blog-error.log
CustomLog /var/log/httpd/test.it-slroom.blog-access.log combined
</VirtualHost>
//confファイル作成後はApacheの再起動
systemctl restart httpd
この設定がないと、Cerbotのリクエスト時にエラーが発生します。80ポートとサーバーネームくらいは必要な設定なんだと思います。
では、Cerbotを使用して証明書を取得します。
sudo certbot --apache
ここで以下の4つの質問について回答する必要があります。
それぞれの質問に対して回答し、successfulの文字が表示されたら完了です。
ブラウザで確認してみると、HTTPSでアクセスすることができるようになっています。
まとめ
今回は、EC2とRoute53を使用して、HTTPSでセキュアなWebサイトを構築する方法について紹介しました。
料金もそうですし、セキュリティ面でもHTTPS通信が行えることは非常に大切です。
簡単に実装できるので、ぜひ参考にしてください。