2012年10月22日月曜日

SUZ-LAB最前線(VPCのサブネット/ ルーティング/セキュリティ)

スズキです。
SubnetのCIDRの設計方針は下記が最新のものとなります。
(本記事のものは少し古い考え方です)

VPCのSubnetのCIDRの設計方針(一例として)

VPCの設計に関しては、今まで、いろいろと経験し社内でも議論し、
SUZ-LAB(cloudpack)的にも一つのパターンができつつあったので、
このタイミングで形式知にしてみました。(つまりCDPです!)

まずは、百聞は一件に如かず、ということで構成図からです。
まあ、わかる人は、この図だけで、すべてが分かると思います。

余談ですがIaaS(この言葉でAWSをくくるのは嫌なのですが...)で現状ぶっちぎっている
(と勝手に思っている)AWSの、隠れた「ぶっちぎり」要因は下記だと思っています。
  1. プレミアムサポート
  2. シンプルアイコン
(1)のプレミアムサポートのすばらしさは、いろいろなところで言われている話なので、
ここで詳しくは書きませんが、"cloudpack"のお客様へのサポートは、AWSの
プレミアムサポートを、お手本にしています。(まだまだ足元にも及びませんが...)

(2)のシンプルアイコンの凄さは、恥ずかしながら、この時期になるまで
気づきませんでした...

今どういうことが起きているかというと、(初めての)お客様との設計のやり取りが、
下記のような図で、特にアイコンの説明も必要なく、いきなり深いレベルで
できてしまっています。

お互いアイコン(プロダクト)に対する認識の共有ができているため、話が非常に早いのです!
僕らも、アイコンの説明などの付帯資料を作成する必要もありません!
このあたりは、お互いに、かなりの工数削減(この言葉は使いたくないけど)にも
なっていると思います。

シンプルアイコン(とCacoo)がなかったら、CDPが生まれたかどうかも、あやしいところです。


話を戻して、上図の設計方針を説明します。

サブネット

下記の3つの視点でサブネットを設計しています。
  1. Availability Zone
  2. インターネットアクセスに対するルーティング
  3. 配置するコンポーネント(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の切り方は、もう少し吟味する必要がありそう...
--------
http://www.suz-lab.com

0 コメント: