0
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?

AWS初心者でも安心!EC2とRDSでセキュアなWebサーバー(HTTPS)を構築する完全ガイド

Posted at

はじめに
AWSを学び始めたばかりの方向けに、EC2でWebサーバーを立て、RDSでデータベースを構築し、ALBを使ってHTTPS化するまでの一連の手順をまとめました。この記事の手順通りに進めれば、実践的でセキュアなWebサーバーの基礎が完成します。

完成図
ユーザーからのリクエストは、Route 53 → ALB(HTTPS) → EC2(HTTP) → RDS の順に流れます。EC2インスタンスはALBの背後に隠れ、直接インターネットに公開されない安全な構成です。

[ユーザー] ---> [Route 53] ---> [ALB (HTTPS)] ---> [EC2 (HTTP)] ---> [RDS]
                                   ↑
                               [ACM SSL証明書]

1. EC2インスタンスの起動 (Webサーバー)

まずはアプリケーションを動かすための仮想サーバーを立ち上げます。

・ AMI: Amazon Linux 2023
・ インスタンスタイプ: t2.micro (無料利用枠)
・ キーペア: 新規作成し、.pemファイルを厳重に保管します。
・ セキュリティグループ: 新規作成し、以下を設定します。名前は ec2-sg としておきます。
   ・タイプ: SSH
   ・ソース: マイIP

2. サーバー環境の構築 (Apache & Python)

EC2にSSHで接続し、Webサーバー(Apache)と、指定のバージョンのPythonをインストールします。

2-1. Apacheのインストール

# パッケージのアップデート
sudo dnf update -y

# Apacheのインストールと起動設定
sudo dnf install -y httpd
sudo systemctl start httpd
sudo systemctl enable httpd

2-2. Python 3.13.5のインストール (ソースからコンパイル)

# 開発ツールのインストール
sudo dnf groupinstall "Development Tools" -y
sudo dnf install bzip2-devel gdbm-devel libffi-devel libuuid-devel ncurses-devel openssl-devel readline-devel sqlite-devel tk-devel xz-devel zlib-devel -y

# Pythonソースコードのダウンロードと展開
cd /usr/local/src
sudo wget https://www.python.org/ftp/python/3.13.5/Python-3.13.5.tgz
sudo tar -xvf Python-3.13.5.tgz

# コンパイルとインストール
cd Python-3.13.5
sudo ./configure --enable-optimizations
sudo make -j $(nproc)
# `install`ではなく`altinstall`を使い、システムのpythonを上書きしないようにする
sudo make altinstall

# バージョンを確認
python3.13 --version
# => Python 3.13.5

3. RDSデータベースの作成 (PostgreSQL)

データベースは管理が簡単なRDSを利用します。

AWSのRDSコンソールで「データベースの作成」をクリックします。

以下の設定で作成します。

・ エンジンのオプション: PostgreSQL
・ テンプレート: 無料利用枠
・ 設定: DBインスタンス識別子、マスターユーザー名、マスターパスワードを設定し、  パスワードは必ず控えておきます。
・ 接続: 「EC2コンピューティングリソースに接続」で、ステップ1で作成したEC2インスタンスを選択します。

パブリックアクセス: なし

4. SSL証明書の取得 (ACM)

HTTPS化に必須のSSL証明書を無料で取得します。

  1. AWS Certificate Manager (ACM) のコンソールを開きます。

  2. 「証明書をリクエスト」をクリックし、「パブリック証明書をリクエスト」を選択します。

  3. ドメイン名(例: example.com と *.example.com)を入力します。

  4. 検証方法で「DNS 検証」を選択します。

  5. Route 53でドメインを管理している場合、「Route 53でのレコード作成」ボタンが表示されるのでクリックするだけで検証が完了します。

5. ロードバランサー(ALB)の構築

ACMの証明書を適用し、アクセスの窓口となるロードバランサーを作成します。

5-1. ターゲットグループの作成

  1. EC2コンソールの「ターゲットグループ」で「作成」をクリックします。

  2. ターゲットタイプは「インスタンス」、プロトコルはHTTP:80に設定します。

  3. 作成したEC2インスタンスをターゲットとして登録します。

5-2. ロードバランサーの作成

  1. EC2コンソールの「ロードバランサー」で「作成」をクリックし、「Application Load Balancer」を選択します。

  2. スキームは「インターネット向け」を選択します。

  3. ネットワークマッピングで、VPCとアベイラビリティーゾーンを2つ以上選択します。

  4. セキュリティグループで「新しいセキュリティグループを作成」し、HTTPとHTTPSのインバウンドを許可します。名前は alb-sg としておきます。

  5. リスナーで、HTTPS:443の転送先を先ほど作成したターゲットグループに設定し、「デフォルトのSSL/TLS証明書」でステップ4で作成したACM証明書を選択します。

6. セキュリティグループの最終設定 (最重要)

サーバーを安全に保つため、EC2とALBのセキュリティグループを正しく設定し直します。

① ALBに設定するセキュリティグループ (alb-sg)

インターネットからのHTTP/HTTPSアクセスを全て許可します。

タイプ   プロトコル   ポート範囲      ソース

HTTPS      TCP         443        0.0.0.0/0

HTTP       TCP          80        0.0.0.0/0

② EC2インスタンスに設定するセキュリティグループ (ec2-sg)

ALBからのHTTP通信と、自分からのSSH通信のみを許可します。

タイプ   プロトコル   ポート範囲      ソース

HTTP       TCP          80        alb-sg のID

SSH        TCP          22        マイIP

7. ドメイン(Route 53)とALBの接続

最後に、ドメインへのアクセスがALBに向かうように設定します。

  1. Route 53のホストゾーンで、ドメイン名を選択します。

  2. 「レコードを作成」をクリックします。

  3. 以下の設定でAレコードを作成します。
    ・ レコード名: (空欄)
    ・ エイリアス: トグルをオンにする
    ・ トラフィックのルーティング先: 「Application Load BalancerおよびClassic Load Balancerへのエイリアス」を選択し、作成したALBを指定します。

  4. 同様に、レコード名に www を指定したレコードも作成します。

まとめ
お疲れ様でした!
これで、スケーラブルでセキュアなWebサーバーの基盤が完成しました。今後はこのEC2インスタンス上でWebアプリケーションを開発し、デプロイしていくことになります。

0
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
0
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?