EC2とRoute53だけでHTTPS Webサイトを構築!Cerbotを使用します

AWS
この記事は約6分で読めます。

こんにちは、@Manabu です。

個人でAWSを使っているときに、一番気になるのはコスト面ではないでしょうか。

EC2、ALB、RDS…など、よく使うサービスほど使用料金が高くなり、稼働を続けると驚くほどの価格になることがあります。

Manabu
Manabu

EC2、ALB、RDSで1万円を余裕で超えている…

これらのサービスをできるだけ少なくしても、十分に稼働するWebサービスを運用したいと考えている人も多いでしょう。

今回は、EC2とRoute53だけを使ってHTTPSのWebサイトを構築する方法を解説します。この方法を知っていれば、将来的にCloudFrontや他のAWSサービスを利用する際にも役立ちます。

証明書の取得とせってにはCerbotを使用し、無料で安全なHTTPS通信を実現します。

この記事は、以下のような方におすすめです。

・AWSサービスを少しでも安く稼働させたい
・EC2だけでHTTPSを実現したい

ぜひ、参考にしてください。

概要

まず、今回行う完成形とそれぞれの用語について簡単に説明します。

完成形

今回は、以下のような動きになります。

ブラウザから「test.it-slroom.blog」と検索すると、EC2に対してHTTPSでWebサービスを閲覧できるように対応します。

コストがかかるのは、以下の想定です。

・Route53のホストゾーン:1ヶ月あたり0.5ドル
・EC2(t2.micro):1時間あたり0.0152ドル(1ヶ月あたり約12ドル)
・ElasticIP:1時間あたり0.005ドル(1ヶ月あたり約0.7ドル)
EC2はインスタンスタイプによります。また、リザーブドインスタンスと呼ばれる予約購入を行えば、もっと安くなる可能性があります。
この構成だと、1ヶ月あたり約13〜14ドル(約2,000円:2024年7月現在)のコストで運用できます。

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を作成します。画像は作成後のコンソールになります。

以下の設定を行うようにしてください。

・ElasticIPを関連づける
・セキュリティグループで、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つの質問について回答する必要があります。

・メールアドレス
・利用規約を読んだか
・メールアドレスをCerbotの開発団体に共有してもいいか
・どのドメインか(複数ある場合は全て表示される)

それぞれの質問に対して回答し、successfulの文字が表示されたら完了です。

ブラウザで確認してみると、HTTPSでアクセスすることができるようになっています。

まとめ

今回は、EC2とRoute53を使用して、HTTPSでセキュアなWebサイトを構築する方法について紹介しました。

料金もそうですし、セキュリティ面でもHTTPS通信が行えることは非常に大切です。

簡単に実装できるので、ぜひ参考にしてください。