シングルアーム(One-arm)とデュアルアーム(Two-arm)の2つのデプロイメントモデルを、ビル警備のたとえ話で直感的に理解しましょう。
ファイアウォールのデプロイメントモデルは、オフィスビルの警備体制にそっくりです。 ビルに入ってくる来客(トラフィック)をどうチェックし、どう受付処理するかの違いです。
| AWSの概念 | ビル警備のたとえ |
|---|---|
| ファイアウォールアプライアンス | 警備員(来客をチェックする人) |
| NIC(ネットワークインターフェイス) | 警備員が配置される出入口の数 |
| トラフィック検査 | 身分証の確認・手荷物検査 |
| NAT処理 | 来客用の入館証を発行(内部IDへ変換) |
| NATゲートウェイ | 入館証発行を担当する受付カウンター(別料金) |
| シングルアーム | 1つの出入口に立つ警備員。検査だけ担当し、入館証発行は別の受付へ |
| デュアルアーム | 外用・内用2つの出入口に立つ警備員。検査も入館証発行も一人でこなす |
シングルアームは、ビルの1つの出入口だけに立つ警備員です。 来客(トラフィック)が通るたびに身分証を確認しますが、入館証の発行は別の受付カウンター(NATゲートウェイ)にお任せします。
ファイアウォールアプライアンスに単一のENI(Elastic Network Interface)をアタッチします。 トラフィックはルートテーブルによってファイアウォールに転送され、検査後に同じインターフェイスから戻されます。 送信元/宛先のIPアドレス変換(NAT)は行わないため、インターネットへの通信には別途NATゲートウェイを配置する必要があります。
デュアルアームは、外向き出入口と内向き出入口の2カ所に立つ警備員です。 来客の身分証確認(検査)だけでなく、入館証の発行(NAT処理)も自分で行います。 別の受付カウンター(NATゲートウェイ)が不要なので、人件費(=AWSコスト)が削減できます。
ファイアウォールアプライアンスに2つのENIをアタッチします。 1つ目はパブリックサブネットに、2つ目はプライベートサブネットに接続されます。 トラフィックはプライベート側のENIから入り、ファイアウォールが検査し、送信元NATを実行して、パブリック側のENIからインターネットに出ていきます。 NATゲートウェイを経由しないため、そのぶんコストを大幅に削減できます。
| 比較項目 | シングルアーム(One-arm) | デュアルアーム(Two-arm) |
|---|---|---|
| NIC数 | 1つ | 2つ(パブリック+プライベート) |
| トラフィック検査 | 対応 | 対応 |
| NAT処理 | 別途NATゲートウェイが必要 | アプライアンス自体で処理 |
| 構成の複雑さ | シンプル | やや複雑 |
| NATゲートウェイ | 必要(追加コスト) | 不要(コスト削減) |
| ベンダーNATサポート | 不要 | 必要(前提条件) |
| コスト効率 | 低い(NAT GW課金あり) | 高い(NAT GW不要) |
| ビルのたとえ | 警備員は検査のみ。入館証は別窓口 | 警備員が検査+入館証発行を兼任 |
NATゲートウェイは時間単位と処理データ量に基づく二重課金のサービスです。 大規模なトラフィックを処理する環境では、この費用が無視できないレベルになります。
シングルアーム = 警備員(月給あり)+ 別の受付カウンター(入館証発行の外注費が毎月かかる)
デュアルアーム = 警備員(月給あり)のみ。入館証発行も自分でやるので外注費ゼロ
NATゲートウェイを追加配置
構成のシンプルさを優先
NAT GW費用を削減
# シングルアーム: プライベートサブネットのルートテーブル # トラフィックをファイアウォールENIに転送 aws ec2 create-route \ --route-table-id rtb-private-xxxxx \ --destination-cidr-block 0.0.0.0/0 \ --network-interface-id eni-firewall-xxxxx # NATゲートウェイの作成(シングルアームでは必須) aws ec2 create-nat-gateway \ --subnet-id subnet-public-xxxxx \ --allocation-id eipalloc-xxxxx
Resources: NatGateway: Type: AWS::EC2::NatGateway Properties: SubnetId: !Ref PublicSubnet AllocationId: !GetAtt EIP.AllocationId PrivateRoute: Type: AWS::EC2::Route Properties: RouteTableId: !Ref PrivateRouteTable DestinationCidrBlock: 0.0.0.0/0 NetworkInterfaceId: !Ref FirewallENI
# シングルアーム: NATゲートウェイ(必須) resource "aws_nat_gateway" "main" { allocation_id = aws_eip.nat.id subnet_id = aws_subnet.public.id } # プライベートルート → ファイアウォールENI resource "aws_route" "private_to_fw" { route_table_id = aws_route_table.private.id destination_cidr_block = "0.0.0.0/0" network_interface_id = aws_network_interface.fw.id }
# デュアルアーム: プライベートサブネットのルートテーブル # トラフィックをファイアウォールのプライベート側ENIに転送 aws ec2 create-route \ --route-table-id rtb-private-xxxxx \ --destination-cidr-block 0.0.0.0/0 \ --network-interface-id eni-fw-private-xxxxx # NATゲートウェイは不要! # ファイアウォールアプライアンスがNATを処理
Resources: # NATゲートウェイは不要! FirewallPublicENI: Type: AWS::EC2::NetworkInterface Properties: SubnetId: !Ref PublicSubnet SourceDestCheck: false FirewallPrivateENI: Type: AWS::EC2::NetworkInterface Properties: SubnetId: !Ref PrivateSubnet SourceDestCheck: false PrivateRoute: Type: AWS::EC2::Route Properties: RouteTableId: !Ref PrivateRouteTable DestinationCidrBlock: 0.0.0.0/0 NetworkInterfaceId: !Ref FirewallPrivateENI
# デュアルアーム: NATゲートウェイは不要 # 2つのENIを作成 resource "aws_network_interface" "fw_public" { subnet_id = aws_subnet.public.id source_dest_check = false } resource "aws_network_interface" "fw_private" { subnet_id = aws_subnet.private.id source_dest_check = false } # プライベートルート → FWプライベートENI resource "aws_route" "private_to_fw" { route_table_id = aws_route_table.private.id destination_cidr_block = "0.0.0.0/0" network_interface_id = aws_network_interface.fw_private.id }
Created by SSuzuki1063
AWS SAP Learning Resources