#
ドキュメント

Document

自分のための備忘録です。

VPC(Virtual Private Cloud)

aws VPC(AWS::EC2::VPC)の説明。

ゴール

パブリックサブネットとプライベートサブネットにそれぞれインスタンスを作成して、パブリックなインスタンス経由でプライベートなインスタンスにSSH接続

用語

  • リージョン
    • リージョンの中にアベイラビリティゾーンがある
  • アベイラビリティゾーン
  • VPC
  • サブネット
  • インターネットゲートウェイ
  • NAT(Network Address Translation)ゲートウェイ
    • プライベートIPとグローバルIPを変換
    • サブネットに配置(サブネットと1対1とは限らない)
    • NATゲートウェイを配置したサブネッはパブリックサブネットになる
    • NATゲートウェイは厳密にはNAPT(=IPマスカレード)
    • NATゲートウェイとインターネットゲートウェイの違い以下を参照 https://milestone-of-se.nesuke.com/sv-advanced/aws/internet-nat-gateway/
  • ルートテーブル
  • セキュリティグループ
    • セキュリティグループは、複数組み合わせて適用するのが一般的
    • VPCのデフォルト(セキュリティグループ ID (sg-xxxxxxxx))のセキュリティグループ

      同じセキュリティグループに割り当てられているネットワークインターフェイス(および関連付けられているインスタンス)からのインバウンドトラフィックを許可します。 https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/VPC_SecurityGroups.html#DefaultSecurityGroup

    • セキュリティグループはステートフル
      ref. https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/VPC_SecurityGroups.html

NAT(Network Address Translation)はIPアドレスを変換する技術です。一般的には、プライベート  IPアドレスをグローバルIPアドレスに変換する技術とされています。

https://www.infraexpert.com/study/ip10.html

NATには1つ大きな問題があります。
それはNATにはブロードバンドルータが保持しているグローバルIPアドレスの
数しか同時に接続が出来ないという事です。
LAN側に接続されている複数のPCを1つのグローバルIPアドレスに変換して、
インターネットにパケットを送信した場合、そのパケットの返信はすべて
ブロードバンドルータのグローバルIPアドレス宛に返ってきます。
この時にブロードバンドルータはNATテーブルを見ても、どのPCのアドレスに
置き換えればよいのかを判断することが出来ないわけです。
そんな問題を解決するために考え出されたのが、
NAPT(IPマスカレード)という機能です。

https://www.itbook.info/study/nat4.html

作成手順

概要

  1. VPCを構成
  2. インスタンス作成

詳細

  1. VPC作成

    • ターゲットにlocalが設定されたルートを持つルートテーブルが自動で作成される
  2. インターネットゲートウェイ作成&VPCアタッチ

  3. パブリックサブネット用ルートテーブル作成

    • ターゲットにインターネットゲートウェイを指定
  4. パブリックサブネット作成

    • パブリックサブネット用ルートテーブルに関連付ける
  5. パブリックサブネットにNATゲートウェイ作成

  6. プライベートサブネット用ルートテーブル作成

    • ターゲットにNATゲートウェイを指定
  7. プライベートサブネット作成

    • プライベートサブネット用ルートテーブルに関連付ける
  8. プライベートサブネットにEC2インスタンス作成

    • パブリックIPは割り当てない
    • セキュリティグループにVPCのdefaultを設定
  9. パブリックサブネットにEC2インスタンス作成

    • パブリックIPを割り当てる
    • インバウンドルールでSSHを許可したセキュリティグループを設定
      • セキュリティグループはステートフル
    • セキュリティグループにVPCのdefaultを設定(プライベートサブネットのインスタンスに接続するため)

サブネット

  • パブリックサブネット
    • パブリックサブネットのルートテーブルはインターネットゲートウェイへのルートを持つ
    • パブリックサブネットのインスタンスは(原則)グローバルIPを持つ
  • プライベートサブネット
    • パブリックサブネットのルートテーブルはNATゲートウェイへのルートを持つ
    • プライベートサブネットのインスタンスはパブリックIPを持たない

※ NATゲートウェイはインターネットゲートウェイ作成後でなければ、作成に失敗する。

プライベートサブネット

プライベートサブネットのインスタンスにSSH接続

プライベートサブネットにSSHで接続するにはパブリックサブネットの踏み台サーバーを経由する

ssh -oProxyCommand='ssh -W %h:%p  public@example.com' private@192.168.xxx.xxx

~/.ssh/config

# public
Host public
  HostName        example.com
  IdentityFile    /path/to/private/key
  User            public

# private
Host aws_web01
  HostName        192.168.xxx.xxx
  IdentityFile    /path/to/private/key
  User            private
  ProxyCommand   ssh -W %h:%p public

プライベートサブネットのインスタンスからインターネットへアクセス

NATゲートウェイを使用。
NATゲートウェイはプライベートサブネットからインターネットに接続するためのゲートウェイ。

  • NATゲートウェイをパブリックサブネットに設置して、それを経由してインターネットゲートウェイへアクセスする
  • NATゲートウェイを設定していない場合、サブネットのインスタンスからはインターネットにアクセスできないので、sudo yum updateなども実行できない

※ NATゲートウェイからインターネットゲートウェイに対するルートテーブルは作成しなくてもよい。

セキュリティグループ

セキュリティグループとネットワークACLの違い

アクセス制御を担当するセキュリティグループとネットワークACLの違い。

  • セキュリティグループはインスタンスのアクセスを制御
    • ステートフル
  • ネットワークACLはサブネットのアクセスを制御
    • ステートレス

VPCのdefaultセキュリティグループ

同じセキュリティグループに属したインスタンスからの接続を許可する。 ※ defaultセキュリティグループはVPC単位。

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

IP v6用のNATゲートウェイ

料金

以下サービスは有料。

  • VPN接続
  • AWS Private Link
  • NATゲートウェイ

チェックリスト

踏み台サーバーを経由してSSHに接続

  • VPCにインターネットゲートウェイを作成しましたか
  • 踏み台サーバー用パブリックサブネットを作成しましたか
  • パブリックサブネット用ルートテーブルを作成しましたか
  • パブリックサブネット用ルートテーブルにインターネットゲートウェイへのルートを作成しましたか
  • パブリックサブネットにNATゲートウェイを作成しましたか
  • 踏み台サーバーにVPCデフォルト(default)セキュリティグループを適用しましたか
  • 踏み台サーバーにSSHを許可するセキュリティグループを適用しましたか
  • プライベートサブネットを作成しましたか
  • プライベートサブネット用ルートテーブルを作成しましたか
  • プライベートサブネット用ルートテーブルにNATゲートウェイへのルートを作成しましたか
  • プライベートサブネットに配置したサーバーにVPCデフォルト(default)セキュリティグループを適用しましたか

参考

Appendix

  • ファイアーウォール:VPCのセキュリティグループ
  • ネットワークACL(Access Control List)
  • AWS Private Link:インターネとを経由することなくVPCに配置された他のサービスと通信するのに必要
  • DHCP オプションセット:【要調査】