NATゲートウェイの作成
サブネットはパブリックとプライベートと分けて作成するのが一般的ですが、このパブリックサブネットを作成した際にパブリックIPを設定します。つまり、インターネット接続することを目的としたサブネットです。
また、プライベートサブネットにはDBなどのリソースを配置するため、インターネットに接続しないようにする必要がありますが(VPC外からの接続は×)、プライベートサブネットからインターネットへの通信は可能にする必要があります。
上記の仕組みを実現するためには、ネットワーク変換する機能すなわちAWSが提供するNATゲートウェイです。
NATゲートウェイは、インスタンスの送信元IPアドレスをNATゲートウェイのIPアドレスに置き換えます。パブリックNATゲートウェイの場合、これは NATゲートウェイElasticIPアドレスです。プライベートNATゲートウェイの場合、NATゲートウェイのプライベートIPアドレスです。インスタンスに応答トラフィックを送信するとき、NATデバイスはアドレスを元の送信元IPアドレスに変換します。(AWSドキュメント参照)
画像のように、"sample-ngw-01"という名前でサブネット(subnet-public01)に設定し、"sample-ngw-02"という名前でサブネット(subnet-public02)を選択してNATゲートウェイを二つ作ります。
ルートテーブルの作成
インターネットゲートウェイやNATゲートウェイを通してリソース間の入り口を作成しましたが、経路が作成されていません。サブネット間の通信回路を設定するために、AWSにはルートテーブルという機能が提供されています。「このサーバーはこの経路を通って接続する」といったルールを設定します。
ここで設定するのは送信先を指定する必要があり、IPアドレスやCIDRの設定と次はどこを経由するか、といったターゲットを指定する必要があります。
用途 | 名前 | local:送信先(ターゲット) | 外部:送信先(ターゲット) | サブネット |
---|---|---|---|---|
① | sample-rt-public | 10.0.0.0/16(local) | 0.0.0.0/0(igw) | subnet-(publick01, publick02) |
② | sample-rt-private01 | 10.0.0.0/16(local) | 0.0.0.0/0(ngw-01) | subnet-private01 |
③ | sample-rt-private02 | 10.0.0.0/16(local) | 0.0.0.0/0(ngw-02) | subnet-private02 |
( local => 同一VPC内のリソースにアクセスするとき )
①パブリックサブネット(public01,02)にインターネットと通信できるように全ての通信が可能な宛先IPを0.0.0.0/0、宛先IPが10.0.0.0/16の範囲内の場合はlocalに通信を転送する。(イメージ図で赤矢印)
②プライベートサブネット(private-01)内のリソースはインターネットに送信する際は、NATゲートウェイ(ngw-01)を経由してアクセスされる。(イメージ図の緑矢印)
③プライベートサブネット(private-02)内のリソースはインターネットに送信する際は、NATゲートウェイ(ngw-02)を経由してアクセスされる。(イメージ図のピンク矢印)
セキュリティグループの作成
VPC内にルートテーブルを作成したことによって、通信経路を設定しましたがまだやることがあります。実はこの設定のままだと、インターネットを通してどんなアクセスも許可してしまい、セキュリティ上問題があるためアクセス制御の設定をする必要があります。
そこでAWSのセキュリティグループを利用します。セキュリティグループでは、外部からのアクセス制御としてポート番号とIPアドレスを設定します。
ポート番号は、コンピュータが通信に使用するプログラムを識別するための番号です。よくWebサービス上で見かける通信でHTTP(80番)やHTTPS(443番)が存在し、またサーバーに接続してメンテナンスをする時に使われるSSH(22番)があります。
今回は、全てのリソースに接続するための入口となる「踏み台サーバー」とリクエストや処理を分散する「ロードバランサー」の2つのセキュリティグループを作成します。
名前 | VPC | インバウンドルール① | インバウンドルール② |
---|---|---|---|
sample-sg-bastion | sample-vpc | SSH(0.0.0.0/0) | なし |
sample-sg-elb | sample-vpc | HTTP(0.0.0.0/0) | HTTPS(0.0.0.0/0) |
参考
AWSではじめるインフラ構築入門 翔泳社出版