SubnetのCIDRの設計方針は VPCのSubnetのCIDRの設計方針(一例として) が最新のものとなります。
(本記事のものは少し古い考え方です)
VPCの設計に関しては、今まで、いろいろと経験し社内でも議論し、 SUZ-LAB(cloudpack)的にも一つのパターンが
出来つつあったので、 このタイミングで形式知にしてみました。
まずは、百聞は一件に如かず、ということで構成図からです。 わかる人は、この図だけで、すべてが分かると思います。
余談ですがIaaSで現状ぶっちぎっているAWSの、隠れた「ぶっちぎり」要因は下記だと思っています。
(1)のプレミアムサポートのすばらしさは、いろいろなところで言われている話なので、 ここで詳しくは書きませんが、cloudpackのお客様へのサポートは、AWSの プレミアムサポートを、お手本にしています。
(2)のシンプルアイコンの凄さは、恥ずかしながら、この時期になるまで 気づきませんでした
今どういうことが起きているかというと、(初めての)お客様との設計のやり取りが、 下記のような図で、特にアイコンの説明も必要なく、いきなり深いレベルで出来てしまっています。
お互いアイコン(プロダクト)に対する認識の共有ができているため、話が非常に早く進みます。従って、私たちもアイコンの説明などの付帯資料を作成する必要もありません!このあたりは、お互いに、かなりの工数削減にもなっていると思います。
シンプルアイコン(とCacoo)がなかったら、CDPが生まれたかどうかも、あやしいところです。
話を戻して、上図の設計方針を説明します。
サブネット
下記の3つの視点でサブネットを設計しています。
- Availability Zone
- インターネットアクセスに対するルーティング
- 配置するコンポーネント(ELB/EC2/RDS)のIPアドレス(任意/固定)
1.Availability Zoneごとに同じ種類のサブネットを配置し、例えば下記のように CIDRで各AZを区別できるようにします。
- A Zone: 10.0.0.0/18
- B Zone: 10.0.64.0/18
- C Zone: 10.0.128.0/18
- D Zone: 10.0.192.0/18
当然、CIDR(ネットワークアドレスやサブネットマスク)はシステム規模によって 変更するべきです。
2.インターネットアクセス(IGW)に対するルーティングは下記の3種類とします。 そして、例えば下記のようにCIDRで各ルーティングの種類を区別できるようにします。
- Public: 10.0.0.0/23
インターネット(IGW)へのInbound/Outboundの両アクセスが可能 - Protected: 10.0.2.0/23
インターネット(IGW)へのOutboundのみNAT経由でアクセス可能 - Private: 10.0.4.0/23
インターネット(IGW)へのアクセスは不可能
Privateサブネットに配置しているEC2で、インターネットへのOutboundアクセスが 必要になった場合、そのEC2はProtectedサブネットに再配置することで対応します。
3.IPアドレスを固定にするコンポーネント(EC2)と、任意のIPアドレスが付与されてしまうコンポーネン(ELB/RDS/AS)は、別のサブネットに配置します。 なぜなら、両コンポーネントを同居させてしまうと、固定で使いたいIPアドレスが、 任意に付与されるIPアドレスに、先に使われてしまう可能性があるからです。
- 任意: 10.0.0.0/24
- 固定: 10.0.1.0/24
ACT/STBなサーバは3つのAZを使わず、IPアドレス固定のEC2を配置する サブネットで、2つのAZのみで構成(EC2を配置)することになります。
ルーティング
上述(サブネット)の通りPublic/Protected/Privateの3種類を用意します。 Virtual Private Gateway(VPG)へのVPN接続は、上記の必要なサブネットに 追加するようにして、それ用にサブネットを作成することは行いません。
ほとんどの場合は、PrivateサブネットにVPGをアタッチして、踏み台(Temp)経由で 他のサブネット(Protected/Public)にアクセスする形になると思います。
セキュリティ
アクセス制限方法は、おおまかに下記の5種類方法があると思います。
- Network ACL: サブネットに対するアクセス制限
- セキュリティーグループ: EC2/ELB/RDSに対するアクセス制限
- OS: iptablesやtcp wrapperなどで制限
- サーバ: apacheやpostgresqlなどで制限
- アプリケーション: アプリケーションプログラム内で制限
基本的にセキュリティグループでアクセス制限を行うことにします。
ただし、PublicサブネットとProtected/Privateサブネットに対しては それぞれ下記のように、必要最低限のアクセス許可を実施しておきます。
- External Network ACL: 10.0.0.0/23
Publicサブネットに設定。デフォルト設定(Inbound/Outboundがすべて許可) だが、拒否リストで指定IPからのアクセス制限も必要に応じて実施。 - Internal Network ACL: 10.0.2.0/22
Protected/Privateサブネットに設定。InboundはVPC内のみアクセス可能。 Outboundはすべて許可。
当然、VPG経由の他拠点からのアクセスがある場合は、Netowrk ACLにしかるべき設定を 実施する必要があります。
CIDRの切り方は、もう少し吟味する必要がありそうです。