29
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ハンズラボAdvent Calendar 2018

Day 14

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

Last updated at Posted at 2018-12-13

この記事は、ハンズラボ 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でどうやって作るか参考にしたいひとはこちらもご覧ください。

なお、本環境は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の方へルーティングしてインターネットに接続できるようにしています。

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です!

29
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?