TLSインスペクション技術とクラウドファイアウォール設計思想の深掘り解説

パソコ(ブログアシスタント) パソコ

パソコだよ!今日も一緒に学んでいこう!

はじめに

企業ネットワークにおけるセキュリティ強化において、TLS通信の監視・制御と適切なファイアウォール設計は重要な要素です。本記事では、TLSインスペクションの技術的仕組みと、Google Cloud Platform(GCP)とAmazon Web Services(AWS)におけるファイアウォール設計思想の違いについて詳しく解説します。

Part 1: TLSインスペクション技術の深掘り

HTTPS通信の基本的な仕組み

まず、通常のHTTPS通信がどのように行われるかを理解しましょう。

1. 証明書とは何か

証明書の構成要素

1
2
3
4
証明書 = 公開鍵 + メタデータ + CA署名
- 公開鍵: 暗号化に使用される鍵
- メタデータ: ドメイン名、有効期限、発行者情報
- CA署名: 認証局によるデジタル署名

2. HTTPS通信の流れ

Step 1: 接続開始

1
クライアント → "example.comに接続したい" → サーバー

Step 2: 証明書交換

1
サーバー → "私の証明書です(公開鍵含む)" → クライアント

Step 3: 証明書検証

  • ドメイン名の一致確認
  • 信頼できるCAによる署名確認
  • 有効期限チェック

Step 4: 暗号化鍵交換

1
2
クライアント → "共通鍵候補をサーバーの公開鍵で暗号化" → サーバー
サーバー → "秘密鍵で復号して共通鍵を取得" → 暗号化通信開始

3. ハイブリッド暗号方式

HTTPS では効率性のために2種類の暗号化を併用:

公開鍵暗号(RSA/ECDSA)

  • 用途: 共通鍵の安全な受け渡し
  • 特徴: 安全だが処理が重い

共通鍵暗号(AES)

  • 用途: 実際のデータ通信
  • 特徴: 高速だが鍵の共有が課題

TLSインスペクションの技術的仕組み

通常の暗号化通信vs TLSインスペクション

通常のHTTPS(インスペクションなし)

1
クライアント ←→ [暗号化通信] ←→ サーバー
  • 中間者は通信内容を読み取れない
  • tcpdumpでも暗号化されたバイナリデータのみ

TLSインスペクション有効時

1
クライアント ←→ [暗号化A] ←→ プロキシ ←→ [暗号化B] ←→ サーバー

詳細な処理フロー

1. サーバーとの接続確立

1
プロキシ → 外部サイトに接続 → 本物の証明書取得

2. 偽証明書の動的生成

1
Private CA → 外部サイト名義の証明書生成 → クライアントに送信

3. 2つの暗号化接続の管理

1
2
接続A: クライアント ←→ プロキシ(偽証明書使用)
接続B: プロキシ ←→ 外部サイト(本物証明書使用)

4. 通信内容の検査

1
暗号化されたデータ → プロキシで復号 → 平文で検査 → 再暗号化して転送

Private CAの実装例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# Private CA Pool作成
resource "google_privateca_ca_pool" "tls_inspection" {
  tier = "DEVOPS"  # 個別証明書追跡不要
  publishing_options {
    publish_ca_cert = false
    publish_crl     = false
  }
}

# 自己署名CA作成
resource "google_privateca_certificate_authority" "main" {
  type = "SELF_SIGNED"
  config {
    subject {
      organization = "Enterprise Security CA"
      common_name  = "tls-inspection-ca"
    }
    x509_config {
      ca_options {
        is_ca = true  # CA権限有効
      }
    }
  }
}

# TLSインスペクション用ポリシー
resource "google_network_security_tls_inspection_policy" "main" {
  ca_pool = google_privateca_ca_pool.tls_inspection.id
}

パフォーマンスへの影響と対策

処理時間への影響要因

1. 2重のTLSハンドシェイク

  • 通常: 1回のハンドシェイク
  • TLSインスペクション: 2回のハンドシェイク

2. 証明書動的生成

  • 初回アクセス時に数百ms〜数秒の遅延

3. 暗号化処理の倍増

  • データを2回暗号化/復号
  • CPU負荷が約2倍

4. データ検査処理

  • 全パケットのスキャン
  • バッファリング遅延

小規模環境での最適化

Keep-Alive設定の最適化

1
2
3
4
5
6
7
8
# 推奨設定(小規模環境)
keep_alive_timeout = "600s"    # 10分
max_connections    = "unlimited"

# 理由
# - 同時接続数: 5-20人程度
# - リソース影響: 最小限
# - セッション再利用効果: 大幅なパフォーマンス向上

結果的な改善効果

1
2
3
4
5
6
7
# 初回接続: 遅い(証明書生成 + ハンドシェイク)
git fetch  # 3-5秒

# 以降: 高速(Keep-Alive活用)
git status  # 0.1秒
git pull    # 0.2秒
git push    # 0.3秒

証明書配布の考慮事項

クライアント側での証明書インストール

1
2
3
4
5
6
7
# Private CA証明書をクライアントに配布
# 方法1: 手動インストール
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ca.crt

# 方法2: Dockerイメージに埋め込み
COPY ca.crt /usr/local/share/ca-certificates/
RUN update-ca-certificates

Part 2: GCP vs AWS ファイアウォール設計思想比較

根本的な設計思想の違い

GCP: ネットワーク中心設計

基本概念

1
VPCネットワーク = ファイアウォールルールの管理単位

実装パターン

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
resource "google_compute_firewall" "web_servers" {
  network = google_compute_network.main.name  # VPCに設定
  target_tags = ["web-server"]                # タグで適用対象指定
  
  allow {
    protocol = "tcp"
    ports    = ["80", "443"]
  }
}

resource "google_compute_instance" "web1" {
  network_interface {
    network = google_compute_network.main.name  # 同じVPC
  }
  tags = ["web-server"]  # ファイアウォールルール適用
}

AWS: リソース中心設計

基本概念

1
Security Group = 独立したファイアウォール設定リソース

実装パターン

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
resource "aws_security_group" "web_servers" {
  name_prefix = "web-servers"  # 独立したリソース
  
  ingress {
    from_port   = 80
    to_port     = 443
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

resource "aws_instance" "web1" {
  security_groups = [aws_security_group.web_servers.id]  # 直接アタッチ
}

設計思想の詳細比較

1. ファイアウォールルールの適用方法

GCP: ネットワーク境界での制御

1
VPC作成 → ファイアウォールルール定義 → タグでインスタンス選択

利点

  • ネットワーク設計との一体化
  • VPC単位での一元管理
  • ネットワーク境界の明確化

制約

  • VPC境界内でのみ有効
  • 他のVPCルールは適用不可

AWS: リソース直接制御

1
Security Group作成 → インスタンスに直接アタッチ

利点

  • 柔軟なリソース配置
  • VPC跨ぎ適用可能
  • アカウント跨ぎ参照可能

制約

  • 複雑な構成時の管理難易度増加

2. 横断的適用の違い

AWSの柔軟性例

1
2
3
4
5
6
# 複数VPCに同一Security Groupを適用
resource "aws_security_group" "common_rules" {
  # VPC-Aのインスタンス
  # VPC-Bのインスタンス(VPC Peering経由)
  # VPC-Cのインスタンス(Transit Gateway経由)
}

GCPの制約例

1
2
3
4
5
6
7
8
# VPCごとに個別のファイアウォールルールが必要
resource "google_compute_firewall" "vpc_a_rules" {
  network = google_compute_network.vpc_a.name
}

resource "google_compute_firewall" "vpc_b_rules" {
  network = google_compute_network.vpc_b.name
}

3. 管理の複雑性

GCP: ネットワーク中心管理

1
2
利点: ネットワーク設計の整合性強制
課題: VPC設計の変更が困難

AWS: リソース中心管理

1
2
利点: 柔軟なリソース配置・管理
課題: 複雑な構成での一元管理難易

実装レベルでの違い

タグベース制御の実装

GCP例: Cloud Workstations

1
2
3
4
5
6
7
8
9
resource "google_compute_firewall" "workstation_control_plane" {
  network = google_compute_network.main.name
  target_tags = ["cloud-workstations-instance"]  # Google Cloudが自動付与
  
  allow {
    protocol = "tcp"
    ports    = ["443", "980"]
  }
}

AWS例: 同等機能

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
resource "aws_security_group" "workstation_sg" {
  ingress {
    from_port = 443
    to_port   = 980
    protocol  = "tcp"
  }
}

resource "aws_instance" "workstation" {
  security_groups = [aws_security_group.workstation_sg.id]
  tags = {
    Service = "workstation"  # 管理用タグ(ファイアウォールとは独立)
  }
}

階層化制御の実装

GCP: 優先度ベース階層制御

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# 高優先度: 特定通信許可
resource "google_compute_firewall" "allow_management" {
  priority = 1000
  target_tags = ["management"]
}

# 中優先度: 基本通信許可  
resource "google_compute_firewall" "allow_basic" {
  priority = 60000
}

# 低優先度: デフォルト拒否
resource "google_compute_firewall" "deny_all" {
  priority = 65535
  deny {
    protocol = "all"
  }
}

AWS: Security Group + NACL組み合わせ

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# インスタンスレベル: Security Group
resource "aws_security_group" "instance_sg" {
  # 許可ルールのみ
}

# サブネットレベル: Network ACL
resource "aws_network_acl" "subnet_nacl" {
  # 許可・拒否ルール
  ingress {
    rule_no = 100
    action  = "allow"
  }
  
  ingress {
    rule_no = 200
    action  = "deny"
  }
}

選択指針とベストプラクティス

GCPが適している場面

1. ネットワーク設計重視

  • 明確なネットワーク境界が必要
  • ネットワークセキュリティポリシーの統一

2. 管理の簡素化

  • 少数のVPCでの運用
  • 設計変更頻度が低い

3. Google Cloudサービス連携

  • マネージドサービスとの統合
  • 自動タグ付与機能の活用

AWSが適している場面

1. 柔軟性重視

  • 複雑なマルチVPC構成
  • 頻繁な構成変更

2. 横断的管理

  • アカウント跨ぎリソース管理
  • 複数リージョンでの統一ポリシー

3. 細かい制御

  • リソース単位でのきめ細かい制御
  • 動的な設定変更

まとめ

TLSインスペクション技術

重要ポイント

  1. 2重暗号化: クライアント-プロキシ-サーバー間での独立した暗号化
  2. 証明書管理: Private CAによる動的証明書生成
  3. パフォーマンス最適化: Keep-Alive設定による小規模環境での改善効果
  4. 運用考慮: 証明書配布とクライアント設定の重要性

クラウドファイアウォール設計

設計思想の違い

  • GCP: ネットワーク中心設計による統合管理
  • AWS: リソース中心設計による柔軟性

選択基準

  • 統一性重視 → GCP VPCファイアウォール
  • 柔軟性重視 → AWS Security Group

企業のセキュリティ要件と運用体制に応じて、適切な技術選択を行うことが重要です。TLSインスペクションでは特に、セキュリティ強化と開発生産性のバランスを考慮した設計が求められます。


本記事の技術情報は、実際のエンタープライズ環境での検証結果に基づいており、具体的な実装時は追加の要件検討が必要です。

この記事をシェアX Facebook はてブ
技術ネタ、趣味や備忘録などを書いているブログです
Hugo で構築されています。
テーマ StackJimmy によって設計されています。