目的・やりたいこと

後述の参考URLの「4) North-South: Transit GatewayとNLB/ALBまたはリバースプロキシによるインターネットからの通信の一元化」の構成図において、Central Ingress VPCとCentral Egress VPCが分かれているが、IGWのコストを節約するためにもできれば一つのVPCに集約したい。

Goal:Spoke VPCのEC2からインターネット接続しつつ、外部からWebアクセスされる

対象者

AWS Network Firewallを導入して、インバウンドトラフィックもアウトバウンドトラフィックも検査VPC経由で検査させたい構成を考えている方

対象となる技術

  • Transit Gateway

参考URL

AWS Network Firewallのデプロイモデル

注意事項

  • このモデルでは、クライアントのソースIPアドレスが保持されず、ソースIPアドレスは通信を終端するアプライアンスのIPアドレスとなります。そのため、送信元IPアドレスベースで制御するセキュリティ機能を利用する場合は注意が必要です。
  • ALB/NLBのターゲットはインスタンスIDではなくIPアドレス指定になります。

作業の流れ

概要図

  • 参考構成

    AWSの外部から流入するトラフィックを一元化することが可能です。このシナリオでは、Web Application Firewall(WAF)やサードパーティのLoad Balancer(LB)などのマーケットプレイスのネットワークアプライアンスが、Ingress VPCに展開されます。このアプライアンスは、通信を終端し、バックエンドインスタンスへの新しい接続を確立します(リバースプロキシとも呼ばれます)。この方法では、クライアントとサーバーの間にアプリケーションロジックを導入することができ、また、セキュリティ目的で使用することもできます。ALBやNLBなどのAWSサービスをこの構成で導入することも可能です。
    図は、集約管理型の導入モデルにおいて、Ingress VPCとNetwork Firewallを組み合わせた場合のアーキテクチャを示しています。

  • 検証した構成

ここからInspection VPCを割愛して、Inspection VPCを経由せず、離れたVPCにあるEC2へのインバウンドとからのアウトバウンドを、インバウンドとアウトバウンドを兼ねた1つのCentral VPC経由でやるだけのシンプルな構成にした。

事前作業

  1. Spoke VPCにあるEC2に入る必要があるため、パブリックサブネットに踏み台EC2を設置
  2. Spoke EC2やその他必要なVPCやそのサブネット、ルーティングテーブル、NATGW、IGWなどはVPC作成時にリソースマップを使って事前一括作成済み

検証手順

1.ターゲットグループの作成
ここでそういえば異なる離れたVPCにあるインスタンスをターゲットにするにはどうすればいいんだろう?という根本的な疑問に気づいた
しかしそれにはしっかり実現する方法があった
ALBのターゲットに別VPCにあるインスタンスを指定する
この通りに「Other private IP address」でターゲットインスタンスのIPを指定し、「Include as pending below」をクリックすればOK
サイトはピアリングを使用しているが、こちらはTGWでルーティングするのでOK

2.ALBの作成
1.で作成したターゲットグループを指定してALBを作成
AZを2つ指定するために、1つ空のAZを作成しました。当然IGWがないと注意されますが気にしない

3.TGWの作成
ASNは適当(65000)

4.続いて2つのTGWアタッチメント(TGW Attach1とTGW Attach2)の作成
– TGW Attach1

– TGW Attach2

5.TGWルートテーブルはデフォルト生成のままでOK

6.ルートテーブルのルート追加
Central pubsub RTとCentral TGW sub RTで、Spoke VPC(10.1.0.0/16)へのルートを追加

・Central pubsub RT

・Central TGW sub RT

Spoke privatesub1 RTとRTSpoke privatesub2 RTで、TGWへのデフォルトルートを追加

・Spoke privatesub1 RT

・Spoke privatesub2 RT

このままではTGWルートテーブルにデフォルトルートがなく、EC2が外に出れないため、デフォルトルートを追加

とここで本来ならターゲットグループのターゲットへのヘルスチェックが通るはずが、何をしてもUnhealthyのまま

何かヘルスチェックの設定ミスってるかもしれないと思いつつ、今回の目的は達成できるのでこれは一旦保留に

確認

  • Spoke VPCのEC2から外にping OK
[ec2-user@ip-10-1-154-125 ~]$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=49 time=3.68 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=49 time=2.49 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=49 time=2.46 ms
  • 外部からALB DNS(Central-ALB-1430243037.ap-northeast-1.elb.amazonaws.com)を指定してEC2にインターネットWebアクセスもOK

所要時間

2時間

ユースケース

3) North-Southのトラフィック保護:インターネットゲートウェイの集約
4) North-South: Transit GatewayとNLB/ALBまたはリバースプロキシによるインターネットからの通信の一元化
この3)と4)の統一化をしたいケース、すなわち、
3) Transit Gatewayに接続されたVPCからのインターネットトラフィックを集約

4) AWSの外部から流入するトラフィックを一元化
において、IGWを2台ではなく1台にして節約したいケースで活用できる