はじめに
AWSの基礎的なネットワークの構築ついて、AWSサービスであるVPCを用いて、最もシンプルな構成から理解を深め、その後にクラウドアーキテクチャの設計原理に基づいて、どうセキュリティを強化するのか、可用性を向上させるのかなど各条件についても整理したいと思います。手を動かすような作業ではなく、そもそもの概念的な部分について解説していきます。また今回はVPCを用いたネットワーク構築について書きたいため、AWS関連の用語についての説明は一部省いております。
VPCとは
Virtual Private Cloudの略であり、言い換えると自分用のクラウド環境が作れるサービスです。つまりVPCを用いることで、誰でもプライベートなネットワーク空間が構築可能ということです。このようなネットワーク領域を構築することで、簡単にサーバーを配置することができます。次にVPCを用いた最低限のネットワーク構成を考えてみたいと思います。
最もシンプルなネットワーク構成
VPCを用いた最も簡単なネットワーク構成は以下のように構築できるかと思います。
まずはAWSクラウドの中で、VPCを用いて自分用のネットワーク空間を構築します。その中にサーバーを配置するための箱の役割を果たすサブネットを配置し、その上にEC2(サーバー)を置いたという構成になります。加えて、IGW(インターネットゲートウェイ)を配置し、インターネットからサーバーにアクセスできるようにします。ここまで来ると、後はデプロイだけに思えてしまいますが、このネットワーク構成では多くの問題があります。
例えば一番最初に対策しなければならない問題として、セキュリティ面での問題が挙げられると思います。EC2(サーバー)からインターネットに出れること自体は良いのですが、上のネットワーク構成では、インターネットから自由にEC2(サーバー)に対して、アクセス出来てしまいます。言い換えると、勝手に中身を覗かれる、もしくは書き換えられてしまいます。例えばDBサーバーであれば問題です。そこで最低限のセキュリティ強化が必須となります。
セキュリティの強化
以下の構成図が完成図です。外部からEC2(サーバー)にアクセスされないように、サブネットを分ける作業を行っています。
仕組みとしては、外部からアクセスされたくないもの(EC2)を守る設計となっています。具体的には、EC2(サーバー)からインターネットにはアクセスできるが、外部(インターネット)からEC2にはアクセスできないようなネットワークを構築します。
これを実現するために最初にするべきことは、外部(インターネット)からアクセスされても良いインスタンス(AWSリソース)を入れる箱、外部からアクセスされたくないインスタンスを入れる箱を作成することです。つまりサブネットをもう一つ作成し、一つはインターネットと直接アクセスできるサブネット、もう一つはインターネットと直接繋がっていないサブネットを作成します。それが上の図にもあるパブリックサブネットとプライベートサブネットです。ただのサブネットに対して、パブリックIPアドレスを割り当て、(ルートテーブルに)デフォルトゲートウェイをIGWに設定することで、配置されたインスタンスにパブリックIPアドレスが付与され、インターネットと通信できるようなパブリックサブネットを作成することが出来ます。またVPC内のみのプライベートなIPアドレスしか持たせないようなプライベートサブネットも作成します。(各サブネットのルートテーブルはデフォルトでIGWに繋がっていないため、そのままデフォルトゲートウェイを触らないでオッケーです。)
次に使用しているAWSサービスのうち外部からのアクセスを避けたいものと、別にアクセスされても構わないものの二つに分類し、前者をプライベートサブネット、後者をパブリックサブネットに配置します。今回の場合、EC2は外部からアクセスされたくないため、プライベートサブネットに配置します。
最後にプライベートサブネットからインターネットまでの道を構築します。パブリックサブネットは既にパブリックIPアドレスを持ち、ルートテーブルのデフォルトゲートウェイにIGWを設定しているため、インターネットとの相互アクセスを実現しています。ただプライベートサブネットは、パブリックサブネットと違い、インターネット側からのアクセスは許可したくないという条件があり、ここで使えるのがNATゲートウェイです。NATとはNetwork Address Translationの略であり、プライベートIPアドレスをパブリックIPアドレスに変換する機能を持つため、プライベートサブネット内のインスタンスが持つ、プライベートIPアドレスをパブリックなものに変換してくれます。したがって、IGWとの繋がりを持つパブリックサブネットにNATゲートウェイを配置することで、プライベートサブネット → インターネットのみの道を構築することが出来ます。(ちなみにプライベートサブネットからインターネットまでは①〜⑤の順で通信します。)
更なるセキュリティ強化には、インスタンス単位のステートフルなファイヤーウォールであるセキュリティグループと、サブネット単位のステートレスなファイヤーウォールであるネットワークACLの二つの設定がありますが、今回は飛ばします。
可用性の向上
次に考えるべきことは可用性についてです。可用性とは、システムが利用できる時間の割合を示す言葉です。具体的に可用性が高いシステムとは、稼働時間が長いシステムのことを表します。ネットワークを構築する段階で、可用性のことを考えることは非常に大切であり、それを実現できるようなサービスもAWSは取り扱っています。
ここで新しく追加されたコンポーネントはALB(Application Load Balancer)と呼ばれるものです。名称から分かる通り、アプリケーションに対するアクセスの負荷分散装置(Load Balancer)です。具体的にはALBを通して、異なる二つのAZに存在するEC2インスタンスに負荷を分散させることで、システムの高可用性を実現する構成です。以下に上記のネットワークにおける、インターネットとの通信を示します。
おわりに
ここまで読んでいただきありがとうございました。更に複雑な構成についても今後勉強する中で、残していこうと思います。誤字、修正すべき箇所がありましたら、お手数ですがコメント等でご連絡していただければと思います。