ぺーぺーSEのブログ

備忘録・メモ用サイト。

VPCまとめ

VPCについてまとめる。

概念まとめ

以下についてまとめる。

VPC

AWSアカウント内に作成する仮想的なネットワーク。
会社や自宅のLANみたいなもんだと思えばいい。
作成にあたり、以下のような特徴・注意点がある。

  • ネットマスクはは「/28」~「/16」の範囲
  • 一度作成したVPCはサイズ変更不可能
  • テナンシーの設定
    • 1つの物理サーバを1ユーザで専有することをシングルテナンシー複数ユーザで共有することをマルチテナンシーという * VPC内に作成されるインスタンスを専用テナンシーインスタンスにするには「ハードウェア専有」を、VPC内に作成されるインスタンスを作成時に指定されたテナンシー属性を使用するには「デフォルト」を選択する
    • 基本的には「デフォルト」でよい

『シングルテナンシーのメリット』

シングルテナンシーで作成したDedicated Hostは以下の事ができるようになる。

  • 「ライセンス持ち込み(Bring Your Own Licenses)」
    • サーバ単位の既存のライセンスであるWindows Server, SQL Server, SUSE Linux Enterprise Serverやその他のエンタープライズシステムや製品を、クラウドに持ち込める。
    • Dedicated Hostのソケット数や物理コア数を確認することができますので、実際のハードウェアに適するソフトウェアライセンスを取得・使用できる。
  • コンプライアンスや規制への準拠」
    • Dedicated Hostを配置することで、ユーザが完全に専有するハードウェア上で、アプリケーションを実行することができる。
  • 「利用の追跡」
    • AWS Configを使うことで 、各Dedicated Host上にあるインスタンスの開始・停止といった利用履歴を追跡することができる。
    • このデータは、ライセンスメトリクスの利用量との確認に使える。
  • インスタンス配置の制御」
    • 各Dedicated Host上のEC2インスタンスの配置を、細かい粒度で制御できる。

サブネット

VPC内に作成する仮想的なサブネット。
1つのサブネットは1つのアベイラビリティゾーン(AZ)に所属する。
作成にあたり、以下のような特徴・注意点がある。

  • サブネットで指定したIPアドレスの範囲のうち、最初の4つと最後の1つは使用できない
    • 10.0.0.0/24 のサブネットを例にして言うと、予約されているアドレスは以下の5つで利用可能なIPアドレスは251個
      • 10.0.0.0(ネットワークアドレス)
      • 10.0.0.1(VPC ルーター
      • 10.0.0.2(DNS へのマッピング用)
      • 10.0.0.3(将来の利用のためにAWSで予約)
      • 10.0.0.255 (ネットワークブロードキャストアドレス)
  • サブネットのCIDRのネットマスクに「/27」以上をつける
    • ELBを設置するサブネットには、サブネット全体で8個以上のIPアドレスの余りが必要
    • サブネット内にELB以外にもEC2インスタンスを配置することができるが、無計画にEC2を稼働させまくると、IPが不足してELBのスケールアウトができなくなる
  • EC2で使っていたSecurityGroupは使えない!
    • EC2のSecurityGroupとVPC内で使うSecurityGroupは別物
    • EC2のSecurityGroupはInboundだけ設定できるが、VPCのSecurityGroupはOutboundまで制御することができる
  • すべてのサブネットはルートテーブルが設定されている必要がある

ルートテーブル

ルートテーブルはVPCに1つ仮想的に存在するルータに対して、そのサブネットのルーティングの設定を行うもの。
デフォルトでルートテーブルに
Destination:10.0.0.0/16(vpc)」 -「Target:local」
が設定されている(vpc内からvpc内へのルーティング)。
送信先が「10.0.0.0/16(vpc)」のリクエストをルータがキャッチした場合「local」へルーティングする。
VPC内の該当サブネットからインターネットへ接続したい場合、
Destination:0.0.0.0/0」-「Target:インターネットゲートウェイ
を設定する。
作成にあたり、以下のような特徴・注意点がある。

  • ルートテーブルでは上の定義が優先される
  • VPC/サブネットからインターネットにアクセスするためにはパブリックサブネットである必要がある
    • この設定が有効でないとEC2のLinuxからyumすら実行できない

プライベートサブネットパブリックサブネット

設定項目としてこれらがVPCに備わっているのではなく、そのサブネットのルートテーブルの設定によってこれが決まる。
ルートテーブルで「0.0.0.0/0 」がインターネットゲートウェイに流れるような設定になっているのが「パブリックサブネット」、そうではないのが「プライベートサブネット」。

インターネットゲートウェイ

VPCからインターネットを接続するためのゲートウェイ
似た単語に「カスタマーゲートウェア」「仮想プライベートゲートウェイ」があるが、これらはVPN接続するとき以外は関係ない。
「NATゲートウェイ」もNATしたいとき以外関係ない。

DHCPオプションセット

VPCで使われるDHCPサービスの定義を行うもの。
独自のDNS・NTP・NetBIOSサーバを構築・設定したい場合に使用する。
以下の設定が可能。

  • Name Tag
    • 定義を識別する名前
  • Domain Name
  • Domain name servers
    • DHCPで配布するDNSサーバのIPアドレスを指定する、最大4つ
    • Windowsの場合参照先DNSサーバとして設定され、Linuxの場合resolv.confのnameserverに設定される
  • NTP servers
  • NetBIOS name servers
    • DHCPで配布するNetBIOSネームサーバ(WINSサーバ)のIPアドレスを指定する、最大4つ
  • NetBIOS node type
    • DHCPで配布するNetBIOSのノードタイプを指定する
    • 1、2、4、8から指定する

Elastic IP (EIP)

  • プライベートIPについて
  • パブリックIPについて
    • すべてのサブネットに、そのサブネット内で起動されるインスタンスがパブリックIPアドレスを受け取るかどうかを決定する属性があり、デフォルトでは、デフォルト以外のサブネットではこの属性がfalseに設定されており、デフォルトのサブネットではこの属性がtrueに設定されている。
    • サブネットのパブリックIPのアドレス動作を変更するには「サブネットのアクション」の「自動割り当てパブリックIPの変更」から変更する
    • パブリック IP アドレスはデフォルトのネットワークインターフェイス(eth0)に割り当てられる。
    • パブリック IP アドレスとインスタンスとの関連付けを解除すると、そのアドレスは解放されて使用できなくなる。

固定のパブリックIPアドレスが必要な場合は、EIPアドレスを使用する。

EC2-ClassicEC2-VPC
EC2-ClassicはVPCに所属しないEC2、EC2-VPCVPCに所属するEC2。

Elastic Network Interface (ENI)

ENIは、VPCインスタンスにアタッチできる仮想ネットワークインターフェイス。 ENIには以下の属性を含めることができる。 * プライマリプライベート IP アドレス。 * 1つ以上のセカンダリプライベート IP アドレス。 * プライベート IP アドレスごとに 1 つの Elastic IP アドレス。 * 1つのパブリック IP アドレス。 * eth0のElastic Network Interfaceについては、インスタンスを起動したときに自動的に割り当てることができる。 * ただし既存のネットワークインターフェイスを使用するのでなく、eth0のElastic Network Interfaceを作成する場合のみ。 * 1つまたは複数のセキュリティグループ。 * MAC アドレス。 * 送信元/送信先チェックフラグ。 * 説明。

エンドポイント

エンドポイントは、VPCインスタンスがプライベート IP アドレスを使用して、他のサービスのリソースと通信できるようにする。
現在はAmazon S3との接続のエンドポイントのみがサポートされており、同じリージョン内のエンドポイントのみがサポートされている。

NATゲートウェイ

サブネット内に作成するNATの仕組み。EIPを設定する必要がある。
「NAPインスタンス」もあるが、基本的にはNATゲートウェイでいい。
http://docs.aws.amazon.com/ja_jp/AmazonVPC/latest/UserGuide/vpc-nat-comparison.html

ピアリング接続

VPC ピア接続は、プライベートIPアドレスを使用して2つの VPC 間でトラフィックをルーティングすることを可能にするネットワーク接続。
どちらのVPCインスタンスも、同じネットワーク内に存在しているかのように、相互に通信できる。
VPCピア接続は、自分のVPC間、または、1つのリージョン内の他のAWS アカウントにあるVPCとの間に作成できる。

セキュリティ

VPCのセキュリティとしてネットワークACLセキュリティグループが使用できる。

ネットワークACL

ネットワークアクセスコントロールリスト(ACL)は、サブネットのインバウンドトラフィックとアウトバウンドトラフィックを制御するファイアウォールとして動作するセキュリティのオプションレイヤー。
ネットワークACLがサブネットのインバウンド・アウトバウンドのトラフィックを制御するのに対し、セキュリティグループはインスタンス単位のインバウンド・アウトバウンドのトラフィックを制御する。

セキュリティグループ

セキュリティグループは、インスタンスの仮想ファイアウォールとして機能し、インバウンドトラフィックとアウトバウンドトラフィックをコントロールする。
VPC 内でインスタンスを起動した場合、そのインスタンスは最大5つのセキュリティグループに割り当てることができる。
セキュリティグループは、サブネットレベルでなくインスタンスレベルで動作する。
このため、VPC内のサブネット内のインスタンスごとに異なるセキュリティグループのセットに割り当てることがでる。
起動時に特定のグループを指定しないと、インスタンスVPC のデフォルトのセキュリティグループに自動的に割り当てられる。

VPN接続

VPNの接続の設定には「仮想プライベートゲートウェイ」と「カスタマーゲートウェイ」の2つを使用する。

仮想プライベートゲートウェイ

VPN接続においてのAmazon VPC側に配置するゲートウェイ
複数のカスタマーゲートウェイからのVPN接続を受け付けることが可能。(「仮想プライベートゲートウェイ:カスタマーゲートウェイ」=「1:N」)
仮想プライベートゲートウェイとカスタマーゲートウェイはセットで作成する必要がある。

カスタマーゲートウェイ

VPN接続においてのユーザ側(自社のデータセンタなど)の定義を行う仮想的なVPN装置。
仮想プライベートゲートウェイとカスタマーゲートウェイはセットで作成する必要がある。

設定方針

自分なりのVPC設計方針。

VPC

「10.0.0.0/16」、「10.1.0.0/16」、「10.2.0.0/16」、、、
のように作成する。

サブネット

VPCが「10.0.0.0/16」の場合、
「10.0.0.0/24」、「10.0.1.0/24」、「10.0.2.0/24」、、、
のように作成する。
VPCが「10.1.0.0/16」の場合、
「10.1.0.0/24」、「10.1.1.0/24」、「10.1.2.0/24」、、、
のように作成する。
ELBを用いる場合等、基本的に同一のサービスで2つのサブネットを作成し、異なるAZを設定する。

ルートテーブル

基本的に、同一VPC間、およびVPCからインターネットへのルーティングを設定する。

Destination Target
10.0.0.0/16 (VPC) local
0.0.0.0/0 インターネットゲートウェイ

セキュリティ

設定簡易化のためネットワークACLは使用せず(全てのトラフィックを通す)、セキュリティグループを使用する。
セキュリティグループは下記を作成する。

Security Group In-Bound Out-Bound
default-sg tcp/udp/icmp全通し 全通し
ssh-sg 22のみ通す 全通し
public-web-sg 80と443のみ通す 全通し
app-sg public-web-sgからは通す 全通し
db-sg app-sgからは通す 全通し

基本的な通信用のdefault-sgとSSH用のssh-sgを作成。
その他、サービスの入り口(public-web-sg)、アプリ層(app-sg)、DB層(db-sg)を作成。
一部まったく同じ設定だが、レイヤとセキュリティグループの区切りを合わせている。

VPC作成手順

VPCウィザードを使用せずに先述の方針に沿って設定する手順。

(1)VPCの作成

設定項目 設定値
ネームタグ sample-vpc
CIDRブロック 10.0.0.0/16
テナンシー デフォルト

(2)サブネットの作成

設定項目 設定値
ネームタグ sample-vpc-subnet0
VPC sample-vpc
アベイラビリティーゾーン ap-northeast-1a
CIDRブロック 10.0.0.0/24

※ルートテーブル(メインルートテーブル)、ネットワークACLも同時に作成される。

後々、ELB等を作成して冗長性・耐障害性を持たせたい場合はAZの異なる下記のようなサブネットも作成しておく。

設定項目 設定値
ネームタグ sample-vpc-subnet1
VPC sample-vpc
アベイラビリティーゾーン ap-northeast-1c
CIDRブロック 10.0.1.0/24

(3)インターネットゲートウェイの作成

設定項目 設定値
ネームタグ sample-vpc-igw

(4)インターネットゲートウェイVPCへアタッチ

「インターネットゲートウェイ」→「VPCにアタッチ」から「sample-vpc-igw」をsample-vpcにアタッチする。

(5)ルートテーブルの更新

Nameタグに「sample-vpc-main-rt」とつける。
さらに下記のようにルーティングの定義を更新する。

Destination Target
10.0.0.0/16 local
0.0.0.0/0 sample-vpc-igw

ルートテーブルを上記のように設定したサブネットは「パブリックサブネット」となる。

(6)ネットワークACLの更新

Nameタグに「sample-vpc-default-acl」とつける。

(7)セキュリティグループの作成

以下の5つを作成する。
※デフォルトで1つ作成されているので、default-sgにリネームして再利用してもよい。

ネームタグ--- グループ名 説明 VPC
default-sg default-sg 任意 sample-vpc
ssh-sg ssh-sg 任意 sample-vpc
public-web-sg public-web-sg 任意 sample-vpc
app-sg app-sg 任意 sample-vpc
db-sg db-sg 任意 sample-vpc

それぞれのセキュリティグループに対して下記を設定する。

インバウンドルール

Security Group タイプ プロトコル ポート 送信元
default-sg すべてのTCP TCP (6) すべて 0.0.0.0/0
すべてのUDP UDP (17) すべて 0.0.0.0/0
すべてのICMP ICMP (1) すべて 0.0.0.0/0
ssh-sg SSH (22) TCP (6) 22 自社・自宅のGIP/32
public-web-sg HTTP (80) TCP (6) 80 0.0.0.0/0
HTTPS (443) TCP (6) 443 0.0.0.0/0
app-sg すべてのトラフィック すべて すべて public-web-sg
db-sg すべてのトラフィック すべて すべて app-sg

■アウトバウンドルール

Security Group タイプ プロトコル ポート 送信元
default-sg すべてのトラフィック すべて すべて 0.0.0.0/0
ssh-sg すべてのトラフィック すべて すべて 0.0.0.0/0
public-web-sg すべてのトラフィック すべて すべて 0.0.0.0/0
app-sg すべてのトラフィック すべて すべて 0.0.0.0/0
db-sg すべてのトラフィック すべて すべて 0.0.0.0/0