AWSを使ってみる. ( VPC 編 )
VPC
今回はAWSのVPC*1を使ってみます。VPCを利用するとEC2などの仮想サーバを仮想的なプライベートネットワークで起動することが可能です。最近ではユーザがアクセスするサーバとシステムの中核となるサーバをネットワーク的に分離し、後者をプライベートネットワーク内に隠ぺいするシステム構成が多く見られます。
また、SSH等を用いてサーバにログインする際にパブリックIPが割り当てられている少数の踏み台のサーバを経由し、それ以外のサーバプライベートなネットワークでシステム管理するようなセキュリティを確保するためにも利用されます。
AWSコンソールからVPCを選択し、VPC Dashboard から 「Get started creating a VPC」を選択します。
するとどのような形態のVPCを作成するかを選択するメニューが表示されます。
- VPC with a Single Public Subnet Only
これはパブリックなサブネットを1つ作成する選択肢です。パブリックなサブネット内で起動したインスタンスはグローバルIPを付与することで外部のインターネットと接続することが可能です。
- VPC with Public and Private Subnets
これはパブリックなサブネットとプライベートなサブネットを1つづつ作成する選択肢です。プライベートなサブネット内で起動したインスタンスはパブリックなネットワーク内に設置したNATインスタンスを経由してインターネットに接続します。
VPCの作成
今回は「VPC with Public and Private Subnets」を作成してみます。次の画面で構成するネットワーク等の情報が出ますので必要に応じて変更します。
デフォルトでは以下の構成になります。
- 10.0.0.0/16 のネットワークでVPCを構成します。
- 10.0.0.0/24 のサブネットでパブリックなネットワークを構成します
- 10.0.1.0/24 のサブネットでプライベートなネットワークを構成します
- NATインスタンス(EC2)をm1.small構成でElasticIP付きでパブリックなネットワークに設置します
作成が完了すると EC2 Dashbord で EC2がひとつ起動し ElasticIPがひとつ割り当てられています。作られた2つのサブネットを確認してみます。
- パブリックサブネット: Routeのテーブルで一般IPの向き先はインターネットゲートウエイになっている。
- ブライベートサブネット: Routeのテーブルで一般IPの向き先はNATインスタンスになっている。
VPC内のサブネットにインスタンスを作成
まずはパブリックサブネットにEC2を立ち上げます。Step3 の Configure Instance Detail で属するネットワークを選択します。また、このサーバを踏み台に外部からSSH接続をするのでPublic IPを割り当てます。
普通にSSH接続できますし、外部へのアクセスも可能です
[ec2-user@ip-10-0-0-30 ~]$ ifconfig eth0 Link encap:Ethernet HWaddr 06:52:CF:61:65:2D inet addr:10.0.0.30 Bcast:10.0.0.255 Mask:255.255.255.0 .... [ec2-user@ip-10-0-0-30 ~]$ curl http://www.yahoo.co.jp/
次にプライベートサブネットにインスタンスを立ち上げます。ネットワークの選択でプライベート側を選択します。
IPがプライベートIPになって起動していることがわかります。
先ほどパブリックに起動したインスタンスを経由してプライベートなインスタンスに接続します
[ec2-user@ip-10-0-0-30 ~]$ ssh -i .ssh/***.pem ec2-user@ip-10-0-1-223.ap-northeast-1.compute.internal
SSH鍵をあらかじめパブリック側にSCPする必要がありますが問題なく接続できます。
[ec2-user@ip-10-0-1-223 ~]$ ifconfig eth0 Link encap:Ethernet HWaddr 0A:34:16:FB:8B:9F inet addr:10.0.1.223 Bcast:10.0.1.255 Mask:255.255.255.0 ... [ec2-user@ip-10-0-0-30 ~]$ curl http://www.yahoo.co.jp/
ただし、現在の状態ではプライベートセグメントから外部へのアクセスはまだできません。NATサーバのセキュリティ設定がされておらず、全部閉鎖状態になっているからです。
http://docs.aws.amazon.com/ja_jp/AmazonVPC/latest/UserGuide/VPC_NAT_Instance.html#NATSG
を参考に今回は設定してNATインスタンスに割り当てました。これでプライベートネットワークからHTTP/HTTPSの通信は外部に可能となります。
※NATサーバといっても通常のAmazonLinuxなので踏み台のサーバと兼用するとわざわざ踏み台サーバを準備することもないともいえそう。