Virtual Private Cloudの略。 重要なので項目として独立させた。最低限セキュアにするにはVPCの下にPUBLIC/PRIVATEのサブネットを作成し、NATをPUBLICサブネットに立てて、PRIVATEはそこのNAT経由で外に出るのが基本。ただし外向きの通信が多い場合は直接GW経由で出ていくようにすればそのサブネットはpublicになる(privateかpublicかはルーティングの違いだけで、後から切り替え可能)。
PublicとPrivateのサブネットをもつVPCを作成した場合はNATインスタンスを作成しないとPrivateサブネットからインターネット通信ができない。しかしこのNATインスタンスはm1.smallのため、無料枠で利用することができない。しかもparavirtualなのでt2.microに変更することもできない。というわけでhvm対応のNATを作成して、送信元のチェックをはずしてルーティングテーブルを変更すればもとのNATは削除してもよい。もしくはテンプレートを使わず手動で作れば良いかと。
仮想プライベートクラウドの略。サブネットを割り当てて、インターネット領域にするのか、プライベート領域にするのかは自由だ。 [VPC with a Single Public Subnet Only]を選ぶと、シンプルだけど全部外にさらされるぞ。Privateネットワークの場合は外に出るのにNATが必要。
「パブリックサブネットのインスタンスはインターネットから直接インバウンドトラフィックを受信できますが、プライベートサブネットのインスタンスはこれができません。また、パブリックサブネットのインスタンスはアウトバウンドトラフィックを直接インターネットに送信できますが、プライベートサブネットのインスタンスはできません。」
「デフォルトでは、インスタンスはインターネットにアクセスできません。インスタンスはデフォルトでパブリック IP アドレスを受け取りません。VPC は、作成方法によってはインターネットゲートウェイを持つ場合があります。」
二つのサブネットを用意。片方がインターネットゲートウェイをもつパブリックネット。そこにNATインスタンスを配置。プライベートのほうにはルーティングテーブルをNATに向けたものを設定し、プライベートゾーンにインスタンスはすれば成功。パブリックネットはPublicIPがないと外部通信できない。
VPC間で通信する場合はVPCピアリングの設定が必要。
インターネットゲートウェイは単一障害点にはならないが、NATは単一障害点になるので注意。
VCP(172.31.0.0/16)の内部にサブネットを複数持てる。サブネット間で通信可能。デフォルトでは二つのAZにサブネットが用意されている。
AZ名 | IPレンジ | 備考 |
ap-northeast-1a | 172.31.16.1~172.31.31.254 | /20 |
ap-northeast-1c | 172.31.0.1~172.31.15.254 | /20 |
なお、細かく分けるとそれだけ使えるIPが少なくなる。/24を2つのサブネットに分けた場合使えるIPは123*2=246となるが、4つに分けた場合は59*4=236となり10も減ってしまう。
ネットマスクの計算に便利なサイト https://note.cman.jp/network/subnetmask.cgi
http://dev.classmethod.jp/cloud/amazon-vpc-elb-nat/
パブリックサブネットのルーティングはigwに直接つないでいるのでNATを経由しない。ゆえに外に出たいのならPublicIP/EIPの割り当てが必要。プライベートサブネットのルーティングをNAT(パブリックに配置したもの)経由にした場合のみプライベートサブネットから外に出られる。VPCデフォルトで作成されたNATがインスタンスタイプを変更したら、PublicIPが付与されてなくってはまった。当然NATでも外に出るにはPublicIPが必要。
VPCに対して割り当てるルーティング情報。一つのサブネットにつき1つまで。
2015/06に導入された。VPCの設定から有効にできる。ただし見づらい! CloudWatchFullAccessのAWSアカウントを作成し、以下のように見ることができた。
# vpcflowlog(作成時に指定した任意のグループ名)のログストリーム一覧表示 aws logs describe-log-streams --log-group-name vpcflowlog --profile=logs # vpcflowlogのログストリーム名を指定して表示 aws logs describe-log-streams --log-group-name vpcflowlog --log-stream-name eni-6595c12d-all --limit=1 --profile=logs # 該当インスタンスに対するフローログを10件表示 aws logs get-log-events --log-group-name vpcflowlog --log-stream-name eni-6595c12d-all --limit=10 --profile=logs
受ける側のEC2でポートが開いていないとREJECTにすら出てこない。Webサーバーを立ち上げてないと80番のログは出てこないということ。
サブネット単位で適用するSGのようなもの。サブネット単位になるのでMySQLサーバーを格納したサブネットであれば3306以外のインバウンドを拒否などすれば一括で対応できる。とはいえ危険なのでSGと併用がお勧め。