マルチアカウントAWSにおける社内サービス連携の設計 — TGW・PrivateLink・Route53の使い分けと落とし穴

AWS マルチアカウント環境でのサービス間接続方式(TGW・PrivateLink・VPC Peering・インターネット経由)をコスト計算付きで比較。Route53 Private Hosted Zone の落とし穴、IPAM の実務的な使い方、中央 egress 集約の設計判断まで整理します。

はじめに

マルチアカウント AWS を運用していると、「アカウント A のサービスからアカウント B の API を呼びたい」という場面が頻繁に出てきます。このとき、TGW(Transit Gateway)を使うのか、PrivateLink を使うのか、あるいはインターネット経由でいいのか——判断を誤ると月額コストが数倍になったり、DNS が通らなくて本番障害になったりします。

この記事では、接続方式の選択基準をコスト計算付きで示し、Route53 や IPAM まわりの「知らないとハマる」ポイントを整理します。

サービス間接続方式の選択

まず、AWS アカウント間(VPC 間)でサービスを繋ぐ方式を整理します。

方式概要向いているケース
インターネット経由パブリック IP で通信。NAT GW or EIP が必要外部 SaaS 連携、低トラフィック
VPC Peering2 VPC を直結。推移的ルーティング不可固定の 2 VPC 間通信
Transit Gateway (TGW)ハブ&スポーク型。多対多の接続3+ VPC の汎用接続、中央 egress
PrivateLinkサービス単位の公開。NLB 経由特定 API の共有、SaaS 型公開

「インターネット経由だけど AWS 内通信」の罠

Route53 の Public Hosted Zone で名前解決して、実際の通信が AWS リージョン内で閉じていても、AWS の課金上はインターネット通信扱いになります。物理経路と論理的扱いは別です。

「AWS 内だからタダでしょ?」は危険な誤解です。

実際のコスト計算

前提料金(US 東部基準)

リソース料金
TGW アタッチメント$0.05/hr
TGW データ処理$0.02/GB
インターネット egress$0.09/GB(月 100GB 無料、10TB 以降は段階的に低下)
NAT Gateway$0.045/hr + $0.045/GB
PrivateLink Interface Endpoint$0.01/hr/AZ + $0.01/GB

シナリオ 1: 2 アカウント間

TGW は両側にアタッチメントが必要なので、固定費が 2 × $0.05 × 720h = $72/月 から始まります。PrivateLink は 1AZ の場合 $0.01 × 720h = $7.2/月

月間データ量Internet (egress のみ)Internet + NAT GWTGWPrivateLink (1AZ)
10 GB$0 (無料枠内)$32.40 + $0.45 = $32.85$72.20$7.30
100 GB$0 (無料枠内)$32.40 + $4.50 = $36.90$74.00$8.20
500 GB$36.00$32.40 + $22.50 = $54.90$82.00$12.20
1 TB$88.47$32.40 + $46.08 = $78.48$92.40$17.40
5 TB$450.35$32.40 + $230.40 = $262.80$174.00$58.40
10 TB$891.69$32.40 + $460.80 = $493.20$276.00$107.20

※ Internet (egress のみ) は NAT GW を既存流用する前提、月 100GB の無料枠を適用 ※ Internet + NAT GW は NAT GW の固定費 + データ処理費を加算

損益分岐点:

結論: 2 アカウント・サービス単位の連携なら PrivateLink が圧倒的に強い。

シナリオ 2: 5 VPC(5 アカウント)に拡張

TGW の固定費は 5 アタッチメント × $36/月 = $180/月

PrivateLink には 2 つのトポロジがあります。

月間データ量Internet (egress)TGWPrivateLink ハブPrivateLink メッシュ
100 GB$0$182.00$29.80$145.00
500 GB$36.00$190.00$33.80$149.00
1 TB$88.47$200.40$39.00$154.20
5 TB$450.35$280.00$79.00$194.00
10 TB$891.69$380.00$129.00$244.00

※ 全 VPC 間で均等にトラフィックが分散する前提

TGW vs Internet の損益分岐点は約 225 GB/月 まで下がります(VPC 数が増えると TGW の固定費分散効果が出るため)。

使い分け:

NAT Gateway の扱い

NAT GW は「private サブネットからインターネットに出るための踏み台」であって、通信そのものが NAT を要求するわけではありません。

NAT GW を使わない代替手段

方式内容向いているケース
Public Subnet + EIPLambda/ECS を public subnet に配置シンプルな構成、少数のサービス
IPv6 + Egress-Only IGWIPv6 で外に出るIPv6 対応サービス
既存 NAT GW の流用他の用途で既に存在する NAT GW を使う多くの企業環境

多くの企業環境では、外部 API 連携や OS パッチ取得のために既存の NAT GW を持っているので、サービス間通信での増分コストは $0.045/GB のデータ処理料金のみというのが実態です。NAT GW の固定費($32.40/月)は既に支払っているケースが多い。

TGW で中央 egress 集約

分散配置 vs 中央集約

分散(各 VPC に NAT GW)集約(中央 egress VPC)
NAT GW 固定費$32.40 × VPC 数$32.40 × AZ 数(1 VPC)
データ処理NAT GW: $0.045/GBNAT GW: $0.045/GB + TGW: $0.02/GB
Network Firewall各 VPC に配置(高コスト)1 箇所に集約
EIP 数VPC 数 × AZ 数AZ 数のみ
運用分散して監視一元管理

5 VPC × 2 AZ の場合:

データ処理量が少ない場合は集約の方が安くなります。ただし、集約の本当の価値はコストではなく運用の一元化です。

集約構成が正当化される理由

マルチアカウント設計原則

ここまでのネットワーク設計を含め、マルチアカウント環境の設計原則を整理します。

アカウント分離

ネットワーク

サービスを他のVPCに公開したい?
├── Yes, 特定のAPI/サービス → PrivateLink
├── Yes, 汎用的な接続(3+ VPC) → TGW
├── Yes, 2VPC固定 → VPC Peering
└── 外部サービス連携 → Internet

CIDR 設計

DNS 戦略

セキュリティ・ログ

運用

IPAM の実務的な使い方

「CIDR の銀行」

IPAM(IP Address Manager)は、VPC の CIDR を集中管理する仕組みです。銀行に例えると:

階層設計の例

Top Pool: 10.0.0.0/8
├── ap-northeast-1 Pool: 10.0.0.0/12
│   ├── prod:   10.0.0.0/14
│   ├── stg:    10.4.0.0/14
│   ├── dev:    10.8.0.0/14
│   └── shared: 10.12.0.0/14
└── us-east-1 Pool: 10.16.0.0/12
    ├── prod:   10.16.0.0/14
    └── ...

セットアップ手順

  1. Organizations の管理アカウントで IPAM を作成
  2. Delegated Admin を Network アカウントに委任
  3. Pool 階層を作成(Top → Region → Environment)
  4. RAM で Environment Pool を各アカウントに共有
  5. Allocation Rule で CIDR サイズの上限・下限を設定

Terraform からの利用例

resource "aws_vpc" "main" {
  ipv4_ipam_pool_id   = data.aws_vpc_ipam_pool.prod.id
  ipv4_netmask_length = 24  # /24 を自動割り当て
  # cidr_block は指定しない — IPAM が空きから自動で割り当てる
}

cidr_block を直接指定する代わりに、ipv4_ipam_pool_id + ipv4_netmask_length を使うことで、IPAM が空き CIDR を自動で割り当てます。

便利機能

機能内容
Compliance MonitoringPool の Allocation Rule に違反する VPC を検出
HistoryCIDR の割り当て履歴を追跡(いつ誰が作ったか)
Public IP Insightsパブリック IP の使用状況を可視化
Overlap DetectionCIDR の重複を自動検出
Auto-import既存 VPC の CIDR を Pool に自動取り込み

料金と注意点

ハマりどころ:

Route53 Private Hosted Zone の落とし穴

TGW で繋いでも PHZ は自動では見えない

これが最大の落とし穴です。TGW で L3(ルーティング)レベルの接続を確立しても、DNS 解決は別レイヤーです。

アカウント A に auth.prod.internal の PHZ を作り、TGW でアカウント B と繋いでも、アカウント B の EC2 から auth.prod.internal名前解決できません

「見える」の 2 つの意味

意味クロスアカウント
(A) PHZ リソース自体が見えるコンソールや API で PHZ を管理できる所有アカウントのみ。RAM で共有不可
(B) VPC のリゾルバがレコード解決できるdig auth.prod.internal が応答を返すクロスアカウント可能(要設定)

(B) を実現するには明示的な設定が必要です。

解決策 3 つ

1. VPC Association の 2 段階手順

# アカウント A(PHZ 所有者): 認可を作成
aws route53 create-vpc-association-authorization \
  --hosted-zone-id Z1234567890 \
  --vpc VPCRegion=ap-northeast-1,VPCId=vpc-aaaa1111

# アカウント B(VPC 所有者): 関連付けを実行
aws route53 associate-vpc-with-hosted-zone \
  --hosted-zone-id Z1234567890 \
  --vpc VPCRegion=ap-northeast-1,VPCId=vpc-bbbb2222

問題: PHZ × VPC の組み合わせ分だけ手順が必要。10 PHZ × 20 VPC = 200 回の手順。組み合わせ爆発します。

2. Route53 Resolver Rules + RAM 共有(従来型)

Network アカウントに Resolver Inbound/Outbound Endpoint を作成し、Forwarding Rule を RAM で全アカウントに共有します。

spoke VPC → Resolver Rule (RAM共有) → Outbound Endpoint → Inbound Endpoint → PHZ

設定量は減りますが、Resolver Endpoint のコスト($0.125/hr × ENI 数)が追加されます。

3. Route53 Profiles(現代の推奨)

Route53 Profiles は 2024 年に登場した機能で、複数の PHZ・Resolver Rule・DNS Firewall Rule Group を 1 つの Profile に束ねて、RAM で配布できます。

[Network アカウント]
  Profile "corp-dns"
    ├── PHZ: auth.prod.internal
    ├── PHZ: billing.prod.internal
    ├── Resolver Rule: on-prem forwarding
    └── DNS Firewall: malware domain block

     ↓ RAM で共有

[spoke アカウント]
  VPC に Profile を attach するだけ → 全 PHZ が解決可能に

VPC 側は associate-profile を 1 回実行するだけ。PHZ が増えても Profile に追加するだけで全 spoke に自動反映されます。

推奨アーキテクチャ

中央 Network アカウント(DNS ハブ)
  ├── 全サービスの PHZ を管理
  ├── Route53 Profile を作成
  ├── RAM で全アカウントに共有
  └── Resolver Endpoint(on-prem 連携がある場合)

spoke アカウント
  └── VPC に Profile を attach(1 回で完了)

PHZ まわりの落とし穴まとめ

落とし穴対策
TGW で繋いでも PHZ が見えないProfiles で配布
PHZ 関連付け VPC 数の quota(デフォルト 300)Profiles なら Profile 単位で管理
Profiles の対応リージョン主要リージョンは対応済み、確認が必要
IaC 対応Terraform aws_route53profiles_* リソースで管理可能
PHZ と Public Hosted Zone の名前衝突PHZ が優先される(Split Horizon DNS)。意図しない場合はゾーン名を分ける

まとめ

接続方式の選択

コスト判断

DNS は別レイヤー

IPAM は最初にやる

マルチアカウント環境のネットワーク設計は「後から直す」コストが非常に高い領域です。CIDR・DNS・接続方式の 3 つは、最初のアカウント設計時に決めてください。

← Back to all posts