Anker PowerCor
旅行には必須の大容量モバイルバッテリー!
【最新機種】GoPro hero11 Black
最新機種でVlogの思い出を撮影しよう!
ペヤング ソースやきそば 120g×18個
とりあえず保存食として買っておけば間違いなし!
モンスターエナジー 355ml×24本 [エナジードリンク]
脳を活性化させるにはこれ!
ドラゴンクエスト メタリックモンスターズギャラリー メタルキング
みんな大好き経験値の塊をデスクに常備しておこう!
Bauhutte ( バウヒュッテ ) 昇降式 L字デスク ブラック BHD-670H-BK
メインデスクの横に置くのにぴったりなおしゃれな可動式ラック!
BANDAI SPIRITS ULTIMAGEAR 遊戯王 千年パズル 1/1スケール
もう一人の僕を呼び覚ませ!!
スポンサーリンク
目次
VPCにEC2を構築
おさらい
前回は、AWSにVPCの土台を作成しました。
全体像としてはこんな感じです。
実際にEC2を構築
今回は作成したVPCの各サブネットにbastion(踏み台)サーバー、webサーバー、dbサーバーを構築してみようと思います。
本来は冗長化構成のため各サーバーのインスタンスを複数作成する必要がありますが、今回は一台ずつのみ構築します。
手順は同じなので必要に合わせて冗長構成にしてみてください。
手順
publicサブネット
bastion(踏み台)サーバー
では、まずは踏み台サーバーを作成しましょう。
このサーバーは外部からアクセスするのでpublicサブネット内に作成します。
ただし、IP制限等でアクセスを絞る必要があります。
AWSのマネジメントコンソールにログインし、サービスメニューからコンピューティング>EC2を選択します。
次に、左部メニューのインスタンスを選択し、インスタンスの作成ボタンをクリックします。
まずは、Amazon マシンイメージ (AMI)画面が表示されます。
任意のAMIの選択ボタンをクリックします。
次に、インスタンスサイズの選択画面が表示されます。
今回は無料枠のt2.microにチェックを入れて、次の手順:インスタンスの詳細の設定ボタンをクリックします。
次に、インスタンスの詳細の設定画面が表示されます。
ここでは、ネットワークは作成したVPCを選択し、サブネットは作成したpublic-subnet-Aを選択し、その他はデフォルト設定のまま次の手順:ストレージの追加ボタンをクリックします。
※冗長化の際は他のサブネットを選択しましょう。
次のストレージの追加画面は何もいじらずそのままで次の手順:タグの追加ボタンをクリックします。
次のタグの追加画面も特にいじらずそのままで次の手順:セキュリティグループの追加ボタンをクリックします。
次のセキュリティグループの設定画面では、SSH通信を特定のIPからのみ受け付けるセキュリティグループを作成したいので、新しいセキュリティグループにチェックを入れて許可するIPを入力し、確認と作成ボタンをクリックします。
今回はグループを新たに作成しましたが、この辺はお使いの環境に合わせて設定してください。
次のインスタンス作成の確認画面では、設定した内容が表示されるので内容を確認の上、問題が無ければ作成ボタンをクリックします。
すると、EC2インスタンスに紐付けるキーペアの選択を求められます。
本来は新しく作成したほうが良いですが、今回は既存のキーペアを利用します。
任意のキーペアを選択し、インスタンスの作成ボタンをクリックします。
これでEC2インスタンスの作成は完了です。
同様に、サブネットのpublic/privateを分けてwebサーバーとdbサーバーを作成してみてください。
合計3つのインスタンスの作成が完了しました。
ElasticIPの設定
次に、publicサブネット上に作成したEC2インスタンス2台に対して、ローカルからSSH接続を行えるようにするためにそれぞれにElasticIPを取得し設定しましょう。
この設定を行わないとGIPが割り振られないので、SSH接続が出来ません。
もちろんインターネットゲートウェイを設定したpublicサブネットに作ったEC2だからと言って、privateIPでの接続が出来るわけでもないので気をつけましょう。
左部メニューのElastic IPを選択し、新しいアドレスの割り当てボタンをクリックします。
次の画面では何も気にせず割り当てボタンをクリックします。
すると新しいElasticIPが発行されたので、閉じるボタンをクリックします。
ElasticIPの関連付け
次にEC2インスタンスに関連付けを行います。
作成したElasticIPにチェックを入れ、アクションからアドレスの関連付けを選択します。
インスタンスは、publicサブネットに作成したEC2インスタンスを選択し、プライベートIPは一つしかないと思うのでそちらを選択し、関連付けボタンをクリックします。
これでアドレスの関連付けは完了です。
もう一つのEC2インスタンスについても同様に関連付けを行ってください。
セキュリティグループの作成
EC2インスタンスを作成した際に、セキュリティグループは同じものを設定したので、現在はwebサーバーにもSSH接続が可能な状態になっています。
今回はwebサーバー、dbサーバーへのSSHはbastionサーバーからのみ行えるように制限をしてみます。
左部メニューのセキュリティグループを選択し、セキュリティグループの作成ボタンをクリックします。
すると、セキュリティグループの作成ダイアログが表示されるので、任意のセキュリティグループ名/説明を入力し、VPCは作成したものを選択します。
そして22ポートのソースのIPにbastionサーバーのprivateIPを入力します。
ここでbastionサーバーのElasticIPを入力すると、publicサブネットに構築したwebサーバーには接続出来ますが、privateサブネットに作成したdbサーバーには接続出来ないので気をつけましょう。
入力が完了したら、作成ボタンをクリックします。
これでセキュリティグループの作成は完了です。
セキュリティグループの設定
次に、webサーバーとdbサーバーに上記で作成したセキュリティグループを紐付けます。
左部メニューのインスタンスを選択し、セキュリティグループを変更したいインスタンスにチェックを入れ、アクションメニューからネットワーキング>セキュリティグループの変更をクリックします。
すると、セキュリティグループの変更ダイアログが表示されるので、先ほど作成したセキュリティグループのみにチェックを入れ、セキュリティグループの割り当てボタンをクリックします。
これで準備は完了です
SSHの接続確認
スポンサーリンク
では、この状態でローカルからSSH接続を試みてみましょう。
bastionサーバー
まずは踏み台サーバーにアクセスしてみます。
踏み台サーバーにはインターネット経由で特定IPからのみ接続出来る設定としています。
以下のコマンドを実行してみてください。
1 |
ssh -i {キーペアファイルへのパス} ec2-user@{bastionサーバーElasticIP} |
すると、以下のような形でEC2インスタンスに接続出来ると思います。
1 2 3 4 5 6 7 8 9 10 11 |
The authenticity of host 'xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx)' can't be established. ECDSA key fingerprint is SHA256:XXXXXXXXXX/XXXXXXXXXXXXXXXXX. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'xxx.xxx.xxx.xxx' (ECDSA) to the list of known hosts. __| __|_ ) _| ( / Amazon Linux AMI ___|\___|___| https://aws.amazon.com/amazon-linux-ami/2018.03-release-notes/ [ec2-user@ip-xxx.xxx.xxx.xxx ~]$ |
これは想定通りなので特に問題はありません。
webサーバー
次にWebサーバーです。
このサーバーにもElasticIPでGIPの設定はされていますが、SSHはbastionサーバーからのみしか受け付けないようなセキュリティをかけています。
まずは直接GIP指定でSSH接続をしてみましょう。
おそらく、通信が遮断されるのでタイムアウトすると思います。
以下のコマンドを実行してみてください。
1 |
ssh -i {キーペアファイルへのパス} ec2-user@{webサーバーElasticIP} |
やはりダメでしたね。
正常にセキュリティグループが働いています。
1 2 |
ssh: connect to host xxx.xxx.xxx.xxx port 22: Operation timed out ✘ |
では、次はbastion経由でSSH接続してみましょう。
コマンドは以下の形になります。
1 |
ssh -i {キーペアへのパス} -oProxyCommand='ssh -i {キーペアへのパス} -W %h:%p ec2-user@{bastionサーバーElasticIP}' ec2-user@{webサーバーElasticIP} |
こちらは正常に接続出来ましたね。
想定通りです。
1 2 3 4 5 6 7 8 9 10 11 |
The authenticity of host 'xxx.xxx.xxx.xxx (<no hostip for proxy command>)' can't be established. ECDSA key fingerprint is SHA256:XXXXXXXXXXXXXXXXXXXX Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'xxx.xxx.xxx.xxx' (ECDSA) to the list of known hosts. __| __|_ ) _| ( / Amazon Linux AMI ___|\___|___| https://aws.amazon.com/amazon-linux-ami/2018.03-release-notes/ [ec2-user@ip-xxx.xxx.xxx.xxx ~]$ |
dbサーバー
では、最後にdbサーバーにSSH接続してみましょう。
もちろんローカルから直接SSH接続しようとするとタイムアウトで接続出来ません。
以下のコマンドを実行してみてください。
1 |
ssh -i {キーペアファイルへのパス} ec2-user@{dbサーバーElasticIP} |
こちらもセキュリティグループによって制限されています。
1 2 |
ssh: connect to host xxx.xxx.xxx.xxx port 22: Operation timed out ✘ |
では、webサーバーと同じようにbastionサーバー経由でSSH接続を試みてみましょう。
1 |
ssh -i {キーペアへのパス} -oProxyCommand='ssh -i {キーペアへのパス} -W %h:%p ec2-user@{bastionサーバーElasticIP}' ec2-user@{dbサーバーprivateIP} |
こちらもbastionサーバー経由だと正常に接続されましたね。
1 2 3 4 5 6 7 8 9 10 11 |
The authenticity of host 'xxx.xxx.xxx.xxx (<no hostip for proxy command>)' can't be established. ECDSA key fingerprint is SHA256:XXXXXXXXXXXXXXXXXXXX Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'xxx.xxx.xxx.xxx' (ECDSA) to the list of known hosts. __| __|_ ) _| ( / Amazon Linux AMI ___|\___|___| https://aws.amazon.com/amazon-linux-ami/2018.03-release-notes/ [ec2-user@ip-xxx.xxx.xxx.xxx ~]$ |
参考
終わりに
これでVPC内に構築したpublicサブネットとprivateサブネットを利用したEC2周りの整備が出来ましたね。
ちょっと準備は多くなりますが、その分セキュリティも向上されますし、各サーバーの役割も明確になるので、長い目で見ると良いインフラの土台になると思いますので、興味のある方は是非試してみてください。