パソコはじめに
企業ネットワークにおけるセキュリティ強化において、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. 証明書動的生成
3. 暗号化処理の倍増
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単位での一元管理
- ネットワーク境界の明確化
制約
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. 管理の簡素化
3. Google Cloudサービス連携
AWSが適している場面
1. 柔軟性重視
2. 横断的管理
- アカウント跨ぎリソース管理
- 複数リージョンでの統一ポリシー
3. 細かい制御
まとめ
TLSインスペクション技術
重要ポイント
- 2重暗号化: クライアント-プロキシ-サーバー間での独立した暗号化
- 証明書管理: Private CAによる動的証明書生成
- パフォーマンス最適化: Keep-Alive設定による小規模環境での改善効果
- 運用考慮: 証明書配布とクライアント設定の重要性
クラウドファイアウォール設計
設計思想の違い
- GCP: ネットワーク中心設計による統合管理
- AWS: リソース中心設計による柔軟性
選択基準
- 統一性重視 → GCP VPCファイアウォール
- 柔軟性重視 → AWS Security Group
企業のセキュリティ要件と運用体制に応じて、適切な技術選択を行うことが重要です。TLSインスペクションでは特に、セキュリティ強化と開発生産性のバランスを考慮した設計が求められます。
本記事の技術情報は、実際のエンタープライズ環境での検証結果に基づいており、具体的な実装時は追加の要件検討が必要です。