Amazon VPCでELBとNATを使ってよりセキュアな環境を作る【5日目】
公開するサーバはセキュリティを特に強化する
ELBを介してEC2インスタンスのWebアプリにアクセスするとき、ELB以外からのアクセスを拒否したくなります。また、公開IPアドレス自体も持ちたくありません。公開IPを持たせたくないということでVPCを前提に考えます。そして、ELBをパブリックサブネットに置いて、EC2をプライベートサブネットにすることで実現できます。今回は、VPCを使ってELBとNATインスタンスを使ったセキュアな環境を構築したいと思います。
VPCとELB
ELBとAutoScalingが連携できることは知られていますが、VPC内でも使うことができます。 VPC内のELBのテクニックとして、ELB自体をパブリックサブネットに置いてEC2をプライベートサブネットにおくことがあります。ELBがリバースプロキシとして働いて、EC2はELBからのHTTPインバウンドのみ受け付けるのです。
インターネットへの通信はNATを経由する
ブライベートサブネットのEC2インスタンスをインターネットと通信させるために、NATインスタンスをパブリックサブネット内に用意します。
さて、プライベートサブネット内のインスタンスがNATを経由してインターネットと通信するために必要なことをいくつか挙げたいと思います。
NATインスタンスを起動します。これは、インスタンスを新規に立ち上げる際に「コミュニティAMI」からVPC用NATのAMIを指定することで実現できます。
また、起動したNATインスタンスのDest CheckをDisableに設定します。これは、EC2インスタンスのデフォルト動作として自分を宛て先としない通信を破棄してしまうためです。
ルーティングを設定する
プライベートサブネット内のインスタンスがインターネットとアクセスするためには、ルーティングを設定する必要があります。VPCは、ルーティングの設定をすることができますので記述しましょう。
パブリックサブネットのルーティングです。igw-XXXXXXXXはインターネットゲートウェイを指しています。
プライベートサブネットのルーティングです。eni-XXXXXXXX / i-XXXXXXXXは、NATインスタンスを指しています。外部アドレスが指定されるとNATを行くように設定しています。
NATインスタンスにEIPを割り当てる
NATインスタンスに限らず、あるインスタンスがインターネットとやり取りするためには、接続元となるIPアドレスを指定する必要があります。プライベートサブネットのインスタンスがインターネットとやり取りする際にも同様です。NATインスタンスはプライベートサブネットのインスタンスに代わって通信しますので、NATインスタンスにEIPが必要になります。
ELBのセキュリティグループを設定する
ELBにもセキュリティグループを設定できますので、インバウンドの制御として80番のみ許可し、アウトバウンドとしてEC2が所属するセキュリティグループのみを許可します。
インバウンドは80と443をインターネットから許可します。443はSSL Terminationしているとします。
アウトバウンドは80をWebサーバの所属するセキュリティグループへ許可します。
Webサーバのセキュリティグループを設定する
ELBから呼ばれるWebサーバの所属するセキュリティグループの設定を見てみます。
インバウンドはELBの所属するセキュリティグループからの80のみ受け付けます。
アウトバウンドはNATインスタンスの所属するセキュリティグループのみ許可します。
全体のネットワークをおさらいする
OnDemand NATパターン
NATはプライベートサブネットのインスタンスがアウトバウンド通信するときに必要なので、アウトバウンドさせたくないときはNATインスタンスをSTOPしておけばOKです。必要なときだけNATを立てるので、オンデマンドNATです。
まとめ
VPCを使うことによって、インターネットにアドレスを公開しないプライベートなネットワークを組み、外部からアクセスされないサーバを立てることができます。また、サブネット、ルーティング、セキュリティグループ、NAT等を用いることによってセキュリティを維持したまま必要なサービスのみインターネットに公開することもできます。ここまでくると普通にデータセンターでラックを組んでスイッチやルータの設定をしている感じがします。今回は紹介しませんでしたが、ネットワークACLを使うことによってステートレスなパケットの流れを制御することもでき、必要なものは大体揃っています。AWSはセミナーやイベントでセキュリティという言葉を続けて3回繰り返すほど、強固かつ柔軟な設定をすることができるようになっています。クラウドは危険だという都市伝説は忘れて、セキュアなプラットフォームを安価に直ぐ使うならクラウドしかないぐらいの勢いで使いましょう。