【AWS】EC2を利用して仮想サーバーを構築(WEBサーバー編)

AWS

1.WEBサーバーの役割

前回の記事にて、AWS環境上にEC2を利用して仮想サーバー(踏み台サーバー)を構築しました。
<参考記事>
【AWS】EC2を利用して仮想サーバーを構築(踏み台サーバー編)

この踏み台サーバーはPublicサブネットの中に構築しましたが、今回作成する「WEBサーバー」はPrivateサブネット内に作成します。
Privateサブネット内のリソースであるWEBサーバーは、踏み台サーバーからキーを用いてアクセスしないと接続できない仕組みにすることで、不正なアクセスを防ぐことが可能です。
不特定多数がPrivateサブネット内のリソースにアクセスできてしまうと、WEBページ改ざんなどがやりたい放題になってしまうので、セキュリティ上非常にまずいですよね。

WEBサーバー内にHTMLやPHP等のコンテンツを配置し、WEBブラウザからロードバランサー(※別記事で説明します)を経由してコンテンツにアクセスすることで、WEBサーバーがレスポンスを返し、WEBページを表示させることができます。
そのコンテンツ自体は、限られた人が踏み台サーバー経由でWEBサーバーにアクセスし、配置する必要があるという事です。

図のように、Privateサブネット内にEC2インスタンスを作成し、WEBサーバーとして扱います。
これを作成するのが今回の目的です。

2.WEBサーバーの作成手順

① インスタンス作成画面への移動

前述の通り、WEBサーバーはEC2インスタンスとして作成しますので、EC2ダッシュボード画面で「インスタンス」をクリックします。

インスタンスの一覧画面に移動できます。
既に踏み台サーバーを作成していますので、「test-ec2-fumidai」が1件だけ表示されていますね。


今回は、更にEC2インスタンスでWEBサーバーを作成していきますので、続けて「インスタンスを起動」をクリックしてください。

② インスタンス内容の設定

ここから先は、WEBサーバー作成のための各設定内容を入力していきます。
まずはWEBサーバー名称ですが、今回は分かりやすく「test-web-server01」としておきます。

名称が決まりましたら、次は「アプリケーションおよびOSイメージ」を選択します。
こちらもシステムの内容を考えて適切なものを選びましょう。
今回は
お試しの作成なので、無料利用枠の対象である「Amazon Linux 2023 AMI」を選択しましょう。

「インスタンスタイプ」については、求められるWEBサーバーのスペック、台数によって変わってきます。
予想ユーザー数やコンテンツの仕様も考慮し、適切なサイズを選択しましょう。
今回は、OSイメージと同様、無料利用枠の対象である「t2.micro」を選びましょう。

「キーペア」については、踏み台サーバーからのアクセスが必須となるため、これも一緒に選択します。
踏み台サーバー構築時に合わせて作成した「key-test-user」をそのまま利用してください。

続いて、ネットワーク設定を行います。
ここで設定するのは、VPC、サブネット、およびセキュリティグループの3要素です。

【AWS】仮想ネットワークを作成してみる(VPC編)
【AWS】仮想ネットワークを作成してみる(サブネット編)
・【AWS】仮想ネットワークを作成してみる(セキュリティグループ編)
上記の記事で作成手順を説明していますので、参考にしてみてください。

なお、今回は
 VPC:test-vpc
 サブネット:test-subnet-private01
以上を選びましょう。


「パブリックIPの自動割り当て」についてですが、今回のWEBサーバーは踏み台サーバー経由、つまり、外部からの直接アクセスは許可していないため、パブリックIPは不要となります。
よって、「無効化」しておきましょう。


「セキュリティグループ」は、「default」のみを選択しましょう。
既に作成済みの踏み台サーバでも、このdefaultのセキュリティグループを指定していますので、踏み台サーバ⇔WEBサーバ間での通信が許可されます。

それ以外のWEBサーバへの通信は許可されません。

「ストレージ」についても、WEBシステムの規模によって適切な大きさを選定しましょう。
例によって、今回はお試しなので、初期状態のままとします。


これで一通りの設定内容入力が終わりましたので、問題なければ、「インスタンスを起動」ボタンをクリックしてください。

特に問題なければ、上記画面のように、「インスタンスの起動を正常に開始しました」のメッセージが表示されます。
起動には若干(数分程度)時間が掛かりますが、これでWEBサーバーの利用が可能となります。

3.WEBサーバーの接続確認

ここまででWEBサーバーの作成は完了しましたが、同サーバーはPrivateサブネットに作成しているため、パブリックIPを持っておらず、外部からの直接アクセスはできません。
よって、一度踏み台サーバーにSSH接続し、そこから更にWEBサーバーにSSH接続するという、2段階のアクセスが必要です。

ただ、上記の2段階アクセスは、別途作成した秘密鍵のファイルを踏み台サーバーに転送する必要がありますし、そもそもSSHコマンドを2回実行しなければいけません。
流石にそれはめんどくさいので、ここでは多段接続という方法を用います。

① WEBサーバーへの多段接続設定

多段接続を行うには、「config」というファイルを作成し、その中に接続方法を記述します。
因みに、上記のconfigファイルは、踏み台サーバー構築時に合わせて作成した秘密鍵ファイルの配置と同じく、ホームディレクトリ上に作成した「.ssh」フォルダの中に配置します。

こんな感じですね。
そして、configファイルの内容は、以下の通りとします。

Host fumidai
Hostname xxx.xxx.xxx.xxx(踏み台サーバーのパブリックIP)
User ec2-user
IdentityFile ~\.ssh\key-test-user.pem

Host webserver01
Hostname xxx.xxx.xxx.xxx(WEBサーバーのプライベートIP)
User ec2-user
IdentityFile ~\.ssh\key-test-user.pem
ProxyCommand ssh.exe fumidai -W %h:%p

今回、踏み台サーバー、WEBサーバーを構築し、2段階での接続を行う形となりますので、各サーバー毎の設定内容を記述する必要があります。

まずは踏み台サーバーですが、以下を記述しましょう。
・Host…サーバーの接続名(※名称は任意)
・Hostname…踏み台サーバーのパブリックIP(EC2の詳細画面から、「接続タブ」をクリックで確認可能)
・User…サーバーのユーザー名(EC2の詳細画面から、「接続タブ」をクリックで確認可能)
・IdentityFile…秘密鍵ファイルの配置ディレクトリ+ファイル名


続いて、WEBサーバーです。
・Host…サーバーの接続名(※名称は任意)
・Hostname…WEBサーバーのプライベートIP(EC2の詳細画面から、「接続タブ」をクリックで確認可能)
・User…サーバーのユーザー名(EC2の詳細画面から、「接続タブ」をクリックで確認可能)
・IdentityFile…秘密鍵ファイルの配置ディレクトリ+ファイル名
・ProxyCommand…経由する踏み台サーバーの接続コマンド

② 接続確認

configファイルが完成したら、コマンド実行でssh接続を試してみましょう。
今回も、踏み台サーバーの時と同じく、WindowsのPowerShellで試してみます。

PowerShellを起動したら、ホームディレクトリに位置づけし、以下のコマンドを実行してみましょう。

ssh webserver01

これにより、踏み台サーバーを経由した形で、WEBサーバーにアクセスすることができます。

PS C:\Users\testuser> ssh webserver01
The authenticity of host 'XXX.XXX.XXX.XXX (<no hostip for proxy command>)' can't be established.
ED25519 key fingerprint is SHA256:6RRi8HBM1FUA9/GhSA2IUAWETnF3JZ2IyQJAqL344iQ.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'XXX.XXX.XXX.XXX' (ED25519) to the list of known hosts.
   ,     #_
   ~\_  ####_        Amazon Linux 2023
  ~~  \_#####\
  ~~     \###|
  ~~       \#/ ___   https://aws.amazon.com/linux/amazon-linux-2023
   ~~       V~' '->
    ~~~         /
      ~~._.   _/
         _/ _/
       _/m/'
[ec2-user@ip-XXX-XXX-XXX-XXX ~]$

このような画面になったら接続成功です。

まとめ

これで、WEBサーバーへの接続が完了しました。
開発者がWEBサーバーにコンテンツを配置したい場合、この方法でサーバーにアクセスすればOKです。

因みに、WEBサーバー上にHTMLなどのコンテンツを配置し、WEBブラウザから閲覧できるようにするには、ApacheなどのHTTPサーバープログラムをインストールした上で配置する必要があります。

※今のままでは、「WEBサーバー」という箱を作ったに過ぎません。
外部からそのHTMLにアクセスしてWEBページを表示させるために、ロードバランサーを別途配置し、それを経由してアクセスさせる必要があるため、次回その辺りを説明しようと思います。
(今回はここまで)


お読みいただき、有難うございました!

コメント

Copied title and URL