04. プライベートサブネットを構築する ー WordPress 構築ハンズオン ー
参考書
- Amazon Web Services 基礎からのネットワーク&サーバー構築 改訂版
- https://www.amazon.co.jp/dp/4822237443/ref=cm_sw_r_tw_dp_U_x_k3p3Cb7VX47T4
プライペートサブネットを構築する意義
インターネットに接続できるパブリックサブネットとは違い、プライペートサブネットにはパブリック IP アドレスを与えないためインターネットに接続できません。
そのため、サーバーを隠蔽することが可能で、セキュリティを向上させることができます。
構築の流れ
- 1. プライベートサブネットを作成する
- 2. ルートテーブルの設定をする
- 3. 作成したプライペートサブネットにインスタンス(仮想サーバー)を作成する
- 4. ping コマンドで疎通確認を実施する
- 5. プライベートサブネット上のインスタンスに SSH 接続する
1. プライベートサブネットを作成する
2. ルートテーブルの設定をする
プライペートサブネットはインターネットに接続する必要がないため、デフォルトのルートテーブルが適用されたままで問題ありません。プライベートサブネット専用のルートテーブルを作成する必要はありません。
補足 1:プライベートサブネット専用のルートテーブルを作成しても問題ありません。(もちろんですが、設定内容はデフォルトのルートテーブルと同じになります。)
補足 2:デフォルトルートテーブルの設定は、送信先「10.0.0.0/16」、ターゲット「local」になっていて、10.0.0.0/16 宛の通信をすべてのサブネット(10.0.1.0/24, 10.0.2.0/24, ... = local)に送るという意味です。
3. インスタンス(仮想サーバー)を作成する
- 1. AWS コンソールマネジメントコンソールから「EC2」をクリックします。
- 2. 左側のサイドメニューから「インスタンス」をクリックし、「インスタンスの作成」をクリックします。
- 3. Amazon マシンイメージ(AMI)一覧から「Amazon Linux AMI 2018.03.0 (HVM), SSD Volume Type」にある「選択」をクリックします。
- 4. インスタンス一覧からタイプが「t2.micro(無料利用枠の対象)」を選択し、「次の手順」をクリックします。
- 5. インスタンスの詳細設定画面で、ネットワークを「既に作成済みの VPC」、サブネットを「既に作成済みのプライベートサブネット」、自動割り当てパブリック IP を「無効化」、プライマリ IP を「10.0.2.10」にして「次の手順」をクリックします。
- 6. ストレージの設定画面で、特にデフォルト値のままで問題ないため、そのまま「次の手順」をクリックします。
- 7. タグの入力画面で「タグの追加」をクリックして、キーを「Name」、値を「DBサーバー」として「次の手順」をクリックします。
- 8. セキュリティグループの設定画面で、セキュリティグループ名を「DB-SG」にして、SSH(TCP / 22 番ポート / 送信元:カスタム - 0.0.0.0/0)と MYSQL/Aurora(TCP / 3306 番ポート / 送信元:任意の場所 - 0.0.0.0/0)を追加して「確認と作成」をクリックします。
- 9. 確認画面が表示されるので「起動」をクリックします。
「起動」をクリックすると、SSH 接続をするためのキーペアを作成するポップアップが表示されます。
- 10. 「新しいキーペアの作成」を選択し、キーペア名を「my-key-db」にして「キーペアのダウンロード」をクリックします。
- 11. キーペアのダンロードが完了後、「インスタンスの作成」をクリックします。
→ これでパブリックサブネット上にインスタンスを作成できました。作成には数十秒〜数分かかります。
注意:インスタンスを使用していない場合は「停止」することもできますが、停止してもストレージ Amazon Elastic Block Store(EBS)の容量を確保したままなので課金されてしまいます。
4. ping コマンドで疎通確認を実施する
ファイアウォールの設定
ping コマンドは ICMP プロトコルが通るように設定しなければなりません。ルートテーブルを編集して ICMP プロトコルの通過を許可します。
- 1. AWS コンソールマネジメントコンソールから「EC2」をクリックします。
- 2. 左側のサイドメニューにある「セキュリティグループ」をクリックして、セキュリティグループ一覧を表示します。
- 3. グループ名が「DB-SG」のセキュリティグループを選択し、画面下部のインバウンドタブ内にある「編集」をクリックします。
- 4. インバウンドのルールの編集画面で「ルールの追加」をクリックし、タイプを「すべての ICMP - IPv4」、プロトコルを「ICMP」、ポート範囲を「0 - 65535」、ソースを「カスタム - 0.0.0.0/0」として「保存」をクリックします。
パブリックサブネット上のインスタンス(web サーバー)→ プライベートサブネット上のインスタンスに疎通確認を実施する
$ ping -c 5 10.0.2.10 ---------- PING 10.0.2.10 (10.0.2.10) 56(84) bytes of data. 64 bytes from 10.0.2.10: icmp_seq=1 ttl=255 time=0.396 ms 64 bytes from 10.0.2.10: icmp_seq=2 ttl=255 time=0.492 ms 64 bytes from 10.0.2.10: icmp_seq=3 ttl=255 time=0.643 ms 64 bytes from 10.0.2.10: icmp_seq=4 ttl=255 time=0.439 ms 64 bytes from 10.0.2.10: icmp_seq=5 ttl=255 time=0.420 ms --- 10.0.2.10 ping statistics --- 5 packets transmitted, 5 received, 0% packet loss, time 4074ms rtt min/avg/max/mdev = 0.396/0.478/0.643/0.088 ms
→ "0% packet loss" となっているので、プライペートサブネット上のインスタンスへの疎通確認ができました。
5. プライベートサブネット上のインスタンス(仮想サーバー)に SSH 接続する
プライベートサブネットはインターネットに接続されていません。ローカル PC から SSH 接続したい場合はどのようにすればよいのでしょうか?
それは、インターネットに接続されているパブリックサブネット上のインスタンスを踏み台にして、プライベートサブネット上のインスタンスに SSH 接続をします。
ローカル PC にあるプライベートサブネットのインスタンス用の秘密鍵を web サーバーにアップロードする
$ scp -i my-key.pem my-key-db.pem ec2-user@{パブリックサブネット上のインスタンスのパブリックドメイン名}:~/
$ ssh -i my-key.pem ec2-user@{パブリックサブネットのインスタンスの固定パブリック IP アドレス}
$ ls -l ---------- -r-------- 1 ec2-user ec2-user 1696 5月 19 00:47 my-key-db.pem