Edited at

AWSのVPC,Subnet,SecurityGroupを一通り構築して理解しよう

この記事は、ハンズラボ Advent Calendar 2018 14日目の記事です。


はじめに

AWSでEC2を利用してみたいけど、VPCをどうやって作ったら良いかわからない!

そんな人向けにAWS VPC社内勉強会を開催したので、解説記事を書こうと思います。

ただEC2を立てるだけならデフォルトVPC、デフォルトSubnetを使えば良いのですが、

せっかくなのでVPCの作り方も覚えましょう。ネットワークの世界が広がります。

この記事のレベル感としては、読者が以下の事ができるようになることを目標しています。


  • パブリックサブネットとプライベートサブネットの違いがわかり、構築ができる

  • 異なるサブネットにあるEC2からEC2にPingできる環境が構築できる

また、以下内容については本記事では解説しないため、理解できていることを前提にお話しいたします。


  • ネットワークアドレス、ホストアドレス、サブネットマスクが何となくわかる。

  • 192.168.10.0/24 のような記法が理解できる。(上位24ビットがネットワークアドレスであることがわかる)

  • Pingコマンドの使い方がわかる。

  • EC2のキーペアを作成することができる。


AWS構成図

今回は下図のようなAWS環境を構成します。

パブリックSubnetにある EC2(Cloud9) から プライベートSubnetにある EC2 へPingできる環境を作ります。

AWS

以下のGitHubリポジトリで今回作成する環境のCloudFormationテンプレートを公開しています。

VPC,SubnetをCloudFormationでどうやって作るか参考にしたいひとはこちらもご覧ください。

https://github.com/rednes/aws-vpc-sample

なお、本環境はOregon(us-west-2)リージョンで構築することを前提としています。


構築手順


1. VPCを作成する

vpcs | VPC Management Console_2018-12-11_19-47-07.png


Create VPC | VPC Management Console_2018-12-11_19-41-06.png


2. InternetGatewayを作成してVPCにアタッチする

パブリックSubnet内のEC2がインターネットに接続できるよう、InternetGatewayを作成します。

インターネットゲートウェイ | VPC Management Console_2018-12-11_19-48-16.png


インターネットゲートウェイの作成 | VPC Management Console_2018-12-11_19-49-09.png


インターネットゲートウェイ | VPC Management Console_2018-12-11_19-50-57.png


VPC にアタッチ | VPC Management Console_2018-12-11_19-52-40.png


3. パブリックSubnetを作成する

サブネット | VPC Management Console_2018-12-11_19-55-18.png


サブネットの作成 | VPC Management Console_2018-12-11_19-57-21.png


4. パブリック用RouteTableを作成する

Route Tables | VPC Management Console_2018-12-11_19-59-47.png


Create route table | VPC Management Console_2018-12-11_20-00-31.png


5. パブリック用RouteTableにInternetGatewayのルートを追加する

パブリック用RouteTableにInternetGatewayのルートを追加します。

Destinationの 0.0.0.0/0 はAWSの記法で、全てのIPアドレスを表します。

今回の場合、 10.26.0.0/16 の範囲でない全てのIPアドレスへのアクセスをInternetGatewayの方へルーティングしてインターネットに接続できるようにしています。

https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/VPC_Subnets.html

Route Tables | VPC Management Console_2018-12-11_20-02-42.png


Edit routes | VPC Management Console_2018-12-11_20-03-32.png


6. パブリック用RouteTableにパブリックSubnetを関連付けする

Route Tables | VPC Management Console_2018-12-11_20-06-18.png


Edit subnet associations | VPC Management Console_2018-12-11_20-07-07.png


7. プライベートSubentを作成する(Availability Zone: a)

サブネット | VPC Management Console_2018-12-11_19-55-18.png


サブネットの作成 | VPC Management Console_2018-12-12_09-08-45.png


8. NatGateway用のElasticIPを作成する

プライベートSubnetにEC2を作る場合でも、 yum update したい等の理由でEC2からインターネットへ接続したい場合があります。

そういう場合は、NatGatewayを使用します。

Elastic IP | VPC Management Console_2018-12-12_09-10-37.png


新しいアドレスの割り当て | VPC Management Console_2018-12-12_09-11-18.png


9. 作成しておいたElasticIPを利用して、NatGatewayを作成する

NatGateway自身はインターネットに接続可能にする必要があるため、パブリックSubnetに作成します。

NAT ゲートウェイ | VPC Management Console_2018-12-12_09-13-09.png


NAT ゲートウェイの作成 | VPC Management Console_2018-12-12_09-14-41.png


10. プライベート用RouteTableを作成する

Route Tables | VPC Management Console_2018-12-11_19-59-47.png


Create route table | VPC Management Console_2018-12-12_09-16-28.png


11. プライベート用RouteTableにNatGatewayのルートを追加する

プライベート用RouteTableにNatGatewayのルートを追加します。

この場合、 10.26.0.0/16 の範囲でないIPアドレスへのアクセスをNatGatewayの方へルーティングして、

NatGatewayを経由してインターネットに接続できるようにしています。

NatGatewayを経由するプライベートSubnetの場合、インターネットからEC2へアクセスすることはできません。

あくまでEC2からインターネットへのアクセスを可能にしています。

Route Tables | VPC Management Console_2018-12-11_20-02-42.png


Edit routes | VPC Management Console_2018-12-12_09-19-46.png


12. プライベート用RouteTableにプライベートSubnetを関連付けする

Route Tables | VPC Management Console_2018-12-11_20-06-18.png


Edit subnet associations | VPC Management Console_2018-12-12_09-21-52.png


13. パブリックSubnetにCloud9を作成する

ブラウザでシェルが使える環境として、Cloud9を作成します。

Create a new environment_2018-12-12_09-24-39.png


Create a new environment_2018-12-12_09-25-30.png


cloud9-for-sample - AWS Cloud9_2018-12-12_09-29-58.png


14. EC2用のSecurityGroupを作成する

EC2用のSecurityGroupを作成します。

インバウンドの許可を全く設定していないので、どこからの接続も拒否するSecurityGroupができます。

EC2 Management Console_2018-12-12_09-31-24.png


EC2 Management Console_2018-12-12_09-31-24.png


EC2 Management Console_2018-12-12_09-37-50.png


15. プライベートSubnetにEC2を作成する

EC2 Management Console_2018-12-12_09-40-04.png


EC2 Management Console_2018-12-12_09-40-44.png


EC2 Management Console_2018-12-12_09-41-12.png


EC2 Management Console_2018-12-12_09-42-04.png


EC2 Management Console_2018-12-12_09-43-36.png


EC2 Management Console_2018-12-12_09-44-15.png


EC2 Management Console_2018-12-12_09-45-09.png


どこからの接続も拒否するSecurityGroupを設定しているので、警告がでますが無視します。

EC2 Management Console_2018-12-12_09-46-40.png


キーペアは新しく作成するか、既存のものを使用してください。

68747470733a2f2f71696974612d696d6167652d73746f7265.png

お疲れ様でした。ここまでの手順で、VPC,Subnet,SecrityGroupが一通り構築できました。


パブリックSubnetとプライベートSubnet

ここまで構築してみて、わかった方も居ると思いますが、パブリックSubnetとプライベートSubnetの設定値的な違いはありません。(パブリックSubnetフラグ、みたいなものがあるわけではありません。)

パブリックSubnetとプライベートSubnetの違いとは、役割の違いです。

RouteTableのルーティングによって、InternetGatewayを通じてインターネットと相互通信できるSubnetを便宜上、 パブリックSubnet と呼んでいます。

インターネットと相互通信できない(または、NatGatewayを通じてEC2からインターネット接続のみできる)Subnetを便宜上、 プライベートSubnet と呼んでいます。


Cloud9からEC2の疎通確認(つながらない)

次に、パブリックSubnetのCloud9からプライベートSubnetのEC2へ接続確認してみましょう。

EC2へ何の接続も許可しないSecurityGroupを設定しているので、当然つながりませんが、つながらないことを確認しましょう。

マネジメントコンソールから、EC2のプライベートIPを確認します。

EC2 Management Console_2018-12-12_09-56-41.png

Cloud9からEC2へPingしてみますが、パケットロスで繋がりません。SecurityGroupが接続を遮断しています。

cloud9-for-sample - AWS Cloud9_2018-12-12_09-58-06.png


SecurityGroupに穴を開ける

Cloud9からEC2へPingできるように、SecurityGroupの穴をあけましょう。

接続の許可はインバウンドルールで設定します。

EC2 Management Console_2018-12-12_10-00-20.png

PingのプロトコルはICMPなので、「すべてのICMP - IPv4」を選択して許可します。

今回はソースを 0.0.0.0/0 としてどこからのアクセスも許可していますが、必要に応じて許可するIPの範囲を絞ってください。

SecurityGroupのグループIDを指定することで、特定のSecurityGroupに属するEC2からのアクセスのみ許可することもできます。

EC2 Management Console_2018-12-12_10-02-30.png


Cloud9からEC2の疎通確認(つながる)

再度、パブリックSubnetのCloud9からプライベートSubnetのEC2へ接続確認してみましょう。

Cloud9からEC2へPingしてみるとつながっていることがわかります。

cloud9-for-sample - AWS Cloud9_2018-12-12_10-03-48.png


おわりに

SecurityGroupのプロトコルをTCP、ポート22で設定すればSSHの接続のみ許可したりすることもできます。

ポート80にすればhttpの接続のみ許可することもできます。

ソースを設定することで特定のグローバルIPからのみアクセスを許可するなんてこともできます。

EC2と合わせて、VPC周りのネットワークも是非理解してみてください。

世界が広がります。

ハンズラボ Advent Calendar 2018 明日15日目は、@sho-hitomiです!