keisyuのブログ

最近めっきりエンジニアリングしなくなった厄年のおじさんがIT技術をリハビリするブログ。

AWSを使ってみる. ( VPC 編 )

VPC

今回はAWSVPC*1を使ってみます。VPCを利用するとEC2などの仮想サーバを仮想的なプライベートネットワークで起動することが可能です。最近ではユーザがアクセスするサーバとシステムの中核となるサーバをネットワーク的に分離し、後者をプライベートネットワーク内に隠ぺいするシステム構成が多く見られます。
また、SSH等を用いてサーバにログインする際にパブリックIPが割り当てられている少数の踏み台のサーバを経由し、それ以外のサーバプライベートなネットワークでシステム管理するようなセキュリティを確保するためにも利用されます。

AWSコンソールからVPCを選択し、VPC Dashboard から 「Get started creating a VPC」を選択します。
するとどのような形態のVPCを作成するかを選択するメニューが表示されます。

f:id:keisyu:20140228122820j:plain:w300

  • VPC with a Single Public Subnet Only

これはパブリックなサブネットを1つ作成する選択肢です。パブリックなサブネット内で起動したインスタンスグローバルIPを付与することで外部のインターネットと接続することが可能です。

  • VPC with Public and Private Subnets

これはパブリックなサブネットとプライベートなサブネットを1つづつ作成する選択肢です。プライベートなサブネット内で起動したインスタンスはパブリックなネットワーク内に設置したNATインスタンスを経由してインターネットに接続します。

VPCの作成

今回は「VPC with Public and Private Subnets」を作成してみます。次の画面で構成するネットワーク等の情報が出ますので必要に応じて変更します。
f:id:keisyu:20140228125107j:plain:w300
デフォルトでは以下の構成になります。

  • 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の向き先はインターネットゲートウエイになっている。

f:id:keisyu:20140228134800j:plain:w300

  • ブライベートサブネット: Routeのテーブルで一般IPの向き先はNATインスタンスになっている。

f:id:keisyu:20140228134808j:plain:w300

VPC内のサブネットにインスタンスを作成

まずはパブリックサブネットにEC2を立ち上げます。Step3 の Configure Instance Detail で属するネットワークを選択します。また、このサーバを踏み台に外部からSSH接続をするのでPublic IPを割り当てます。
f:id:keisyu:20140228143913j:plain:w300
普通に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になって起動していることがわかります。
f:id:keisyu:20140228144958j:plain:w300
先ほどパブリックに起動したインスタンスを経由してプライベートなインスタンスに接続します

[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なので踏み台のサーバと兼用するとわざわざ踏み台サーバを準備することもないともいえそう。