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ページを表示させるために、ロードバランサーを別途配置し、それを経由してアクセスさせる必要があるため、次回その辺りを説明しようと思います。
(今回はここまで)
お読みいただき、有難うございました!



コメント