【入門編】 GLB(Gateway Load Balancer)のエンドポイントサービスとVPCエンドポイント – クラウド&コンテナネットワーク実践ガイド

こんにちは!クラウドやコンテナネットワークの世界へようこそ。第一線でSREとしてインフラと格闘している私ですが、日々の現場では「どうやって安全かつスマートにパケットを目的地へ届けるか」というパズルに頭を悩ませています。

AWSやGCPといったメガクラウドの世界では、ロードバランサー(負荷分散装置)が大活躍します。ウェブサイトへのアクセスをさばく ALB(Application Load Balancer)や、超高速でTCP/UDPを流す NLB(Network Load Balancer)は、みなさんも聞いたことがあるのではないでしょうか。

しかし、今回スポットを当てるのは、ちょっと通な実務派ロードバランサー GLB(Gateway Load Balancer) です。そして、それを支える VPCエンドポイント と エンドポイントサービス の仕組みについて、一歩ずつ優しく紐解いていきましょう!

難しいネットワーク用語や英語のヘッダー名はいったん脇に置いて、まずは身近な「郵便配達」に例えて全体像を覗いてみてくださいね。

—

1. なぜGLBとVPCエンドポイントが必要なの?(現実世界に例えてみよう)

みなさんは、ネットショッピングで買った荷物を自宅に届けてもらうとき、配達員さんがどうやって動いているか意識したことはありますか?

例えば、あなたが「ちょっと怪しい海外の雑貨」を大量に買ったとしましょう。安全のために、自宅の玄関に届く前に、一度「セキュリティチェック専門の検査所(防火・防犯チェック)」を必ず経由させなければならないルールがあるとします。

クラウドの世界でも全く同じことが起きるんです。
インターネットからやってきた大切なリクエスト(荷物)を、自分たちのシステムの心臓部(VPC)に入れる前に、「ファイアウォール専用のVPC」に一度寄り道させて、怪しい通信がないか検査させたい。

ここで、こんな疑問が湧き上がってきますよね。

  • 「別のVPC(お隣さんのお家)にある検査所に、どうやってパケット(荷物)を安全に渡せばいいんだろう?」
  • 「インターネット経由でパケットを外に出したら、セキュリティ的に危なくない?」

この「お隣のVPCにあるセキュリティ装置へ、安全かつ確実にパケットを横流しする仕組み」こそが、今回学ぶ AWS PrivateLink と GLB(Gateway Load Balancer)エンドポイント なんです!

—

2. GLBとエンドポイントサービスの基本を押さえよう

仕組みをもう少しだけ技術寄りに整理してみましょう。登場人物は主に3つです。

1. 利用者側のVPC(コンシューマーVPC): ウェブアプリなどが動いている通常の環境。
2. 検査側のVPC(プロバイダーVPC): ファイアウォールやIDS/IPS(不正侵入検知システム)などの安全装置が並んでいるセキュリティ専用の環境。
3. GLB(Gateway Load Balancer): 検査側のVPCの中で、複数のセキュリティ装置にバランスよく荷物(パケット)を振り分ける交通整理員。

ここでポイントなのが、「異なるVPC同士は、基本的に直接お互いのIPアドレスが見えない(通信できない)」というAWSの強固なセキュリティの壁です。

この壁を安全に穴あけせずに突破するために、AWSは 「VPCエンドポイントサービス」 という仕組みを用意してくれています。

イメージとしては、お隣の検査所(プロバイダーVPC)が、「うちの検査サービスを使いたいなら、専用の窓口(エンドポイントサービス)を作るから、そこに向かって専用のパイプを繋いでね」と窓口を用意してくれる状態です。利用者側のVPCは、その窓口に向かって自分たちのVPC内に 「GLBエンドポイント」 という名の「専用ポスト」を設置します。

利用者VPCから出たパケットは、この専用ポスト(GLBエンドポイント)にスポッと投げ込まれると、AWSの内部ネットワーク(PrivateLink)という秘密の地下トンネルを通って、一瞬でお隣のセキュリティVPCへワープするのです!

—

3. 実践!CloudFormation/Terraformで構築する世界

「理屈は分かったけれど、実際にどうやって設定するの?」という声が聞こえてきそうですね。安心してください。実務でそのまま使えるインフラコード(今回はTerraformを想定したイメージ)を見ていきましょう。

まずは、検査側(プロバイダーVPC)で「うちのGLBを使っていいよ!」というエンドポイントサービスを公開する設定です。

# 1. 検査側VPCで動く GLB の作成(すでにある前提のターゲットグループを指定)
resource "aws_lb" "gateway_lb" {
  name               = "security-glbs"
  load_balancer_type = "gateway"
  subnets            = [aws_subnet.security_internal.id] # 検査用サブネット

  # 日本語コメント:ファイアウォールアプライアンスが待ち受けるターゲットグループを指定
  default_action {
    type             = "forward"
    target_group_arn = aws_lb_target_group.firewalls.arn
  }
}

# 2. 他のVPCから利用できるように「VPCエンドポイントサービス」として公開する
resource "aws_vpc_endpoint_service" "glb_service" {
  acceptance_required        = false # 自動承認にする場合はfalse
  gateway_load_balancer_arns = [aws_lb.gateway_lb.arn]

  tags = {
    Name = "security-glbs-endpoint-service"
  }
}

お隣の検査側で「サービス窓口」ができたら、今度はアプリが動いている利用者側(コンシューマーVPC)で、その窓口につながる「専用ポスト(GLBエンドポイント)」を自分のVPC内に設置します。

# 3. 利用者側VPCに「GLBエンドポイント」を設置する
resource "aws_vpc_endpoint" "consumer_glb_endpoint" {
  service_name      = aws_vpc_endpoint_service.glb_service.arn # プロバイダーのサービス名
  vpc_endpoint_type = "GatewayLoadBalancer"
  vpc_id            = aws_vpc.consumer.id
  subnet_ids        = [aws_subnet.consumer_inspection.id]    # 検査用ポストを置くサブネット

  tags = {
    Name = "to-security-glb-endpoint"
  }
}

これだけで、利用者側VPCのサブネットから見えないネットワークの壁を越え、パケットを安全にセキュリティVPCへ流すための「パイプライン」が完成しました!

—

4. パケットはどこを走る?ルーティングの魔法

パイプ(エンドポイント)を作っただけでは、パケットは勝手に動いてくれません。最後に「ルートテーブル(道案内図)」の設定が必要です。

ここが実務で一番ハマりやすいポイントなので、よーく見ていきましょう!

インターネットからやってきたパケット、あるいはアプリから外へ出ていくパケットを、一度セキュリティ装置(GLBエンドポイント)に強制送還(リダイレクト)させる必要があります。

利用者側VPCのルートテーブルは、次のように設定します。

# ルートテーブル設定例(利用者側VPCのアプリ用サブネットから見た世界)
- 送信先 (Destination): 0.0.0.0/0 (すべての宛先)
  ターゲット (Target): vpce-1234567890abcdef0 (先ほど作ったGLBエンドポイントのID)

この設定を入れると、パケットの動きはこうなります:

1. アプリから外へ行こうとするパケットが発生する。
2. ルートテーブルに従い、パケットは vpce-1234567890abcdef0(GLBエンドポイント)へ吸い込まれる。
3. AWSの裏側のプライベートネットワーク(PrivateLink)を通り、一瞬でお隣のセキュリティVPCのGLBへ到着する。
4. GLBが背後で待ち構えるファイアウォール群(EC2などで動くアプライアンス)にパケットをバトンタッチし、怪しくないか検査する。
5. 検査をクリアしたきれいなパケットが、インターネットへ旅立っていく!

どうでしょう? 郵便配達の例えとリンクしてイメージが湧いてきましたか?

—

まとめ:複雑なネットワークをシンプルに安全に

今回は、クラウドにおけるロードバランサーの使い分けの中でも、少し玄人好みな GLBのエンドポイントサービスとVPCエンドポイント について解説しました。

  • 異なるVPC間でのセキュアなパケットのやり取りには AWS PrivateLink が大活躍する。
  • セキュリティ装置(ファイアウォールなど)の前に GLB を置き、それを エンドポイントサービス として外部公開する。
  • 利用者側VPCには GLBエンドポイント という「専用ポスト」を置き、ルートテーブルでパケットを強制的に送り込む。

最初は「VPCエンドポイント? サービス?」と文字面だけで難しく感じてしまうかもしれませんが、一つひとつの部品が「誰から誰へ荷物を渡すためのものか」を整理していけば、決して怖くありません。

現場のSREとして、安全で頑丈なネットワークを設計・構築する際の引き出しの一つとして、ぜひ今回の内容を役立ててくださいね。それでは、また次回の技術解説でお会いしましょう!

コメント

タイトルとURLをコピーしました