kukai88

垢 - やったことを残す -

04. プライベートサブネットを構築する ー WordPress 構築ハンズオン ー

参考書



プライペートサブネットを構築する意義



インターネットに接続できるパブリックサブネットとは違い、プライペートサブネットにはパブリック IP アドレスを与えないためインターネットに接続できません。
そのため、サーバーを隠蔽することが可能で、セキュリティを向上させることができます。

構築の流れ


  • 1. プライベートサブネットを作成する
  • 2. ルートテーブルの設定をする
  • 3. 作成したプライペートサブネットにインスタンス(仮想サーバー)を作成する
  • 4. ping コマンドで疎通確認を実施する
  • 5. プライベートサブネット上のインスタンスSSH 接続する


1. プライベートサブネットを作成する


参照:https://kukai88.hatenablog.com/entry/2019/05/17/083314

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」にして、SSHTCP / 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 サーバー)→ プライベートサブネット上のインスタンスに疎通確認を実施する


  • 1. ローカル PC からパブリックサブネット上のインスタンス(web サーバー)に SSH 接続をする
  • 2. ping コマンドをプライベートサブネット上のインスタンスに送信する
$ 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@{パブリックサブネット上のインスタンスのパブリックドメイン名}:~/


  • 2. パブリックサブネットのインスタンスSSH 接続してファイルがアップロードされたのか確認します。
$ 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


→ これで、プライベートサブネット上のインスタンス秘密鍵をアップロードできました。

プライベートサブネットのインスタンスSSH 接続する


  • 接続 1
    • 接続元:ローカル PC
    • 接続先:パブリックサブネット上のインスタンス(web サーバー)← 踏み台
  • 接続 2


  • 1. ローカル PC から、パブリックサブネット上のインスタンス(web サーバー)に SSH 接続します。
$ ssh -i my-key.pem ec2-user@{パブリックサブネットのインスタンスの固定パブリック IP アドレス}


$ ssh -i my-key-db.pem ec2-user@10.0.2.10


→ これで、パブリックサブネット上のインスタンス(web サーバー)を踏み台にして、ローカル PC から、プライベートサブネット上のインスタンスSSH 接続できました。