ネットワーク保護(HTTPS、ファイアウォール)

ネットワーク保護の全体像

Weaviate を本番環境で安全に運用する際は、通信経路の暗号化 (HTTPS/TLS)最小限のポート公開/ファイアウォール制御 の 2 本柱で考えます。まず「どこで TLS を終端するか」を決め、そのうえで REST/GraphQL (既定 8080)・gRPC (既定 50051) など本当に必要なポートだけを許可し、その他は環境ごとのファイアウォールや NetworkPolicy で遮断します。weaviate.ioweaviate.io


1. HTTPS/TLS の導入パターン

導入パターン 適用先 メリット 注意点
① Weaviate 本体で直接 TLS 終端 単一ノードや小規模 Docker Compose 追加コンポーネント不要。--scheme https --tls-certificate --tls-key などの起動フラグを指定するだけ 証明書の発行・更新・秘密鍵管理を自分で行う必要がある
② リバースプロキシ/Ingress で TLS 終端 (推奨) Kubernetes, ECS/Fargate, VM など Let’s Encrypt 自動更新・WAF / DDoS 防御と統合しやすい。Weaviate は HTTP で待ち受けるだけ プロキシ側で gRPC も扱える設定 (HTTP/2, h2c) が必須
③ サービスメッシュ (Istio / Linkerd) 大規模マイクロサービス環境 mTLS による Pod 間暗号化を自動化。ゼロトラストに近い構成 メッシュの学習コスト・運用負荷が高い

1-1. Docker Compose で自己署名証明書を使う例

yaml
weaviate: image: semitechnologies/weaviate:1.22 command: - --tls-host 0.0.0.0 - --tls-port 8080 - --scheme https - --tls-certificate /certs/server.crt - --tls-key /certs/server.key volumes: - ./certs:/certs:ro ports: - "8080:8080"

このように –tls-certificate / –tls-key で PEM を渡すだけで暗号化通信が有効になります。stackoverflow.com

1-2. Kubernetes で Ingress + Cert-Manager を使う流れ(概要)

  1. helm repo add weaviate https://weaviate.github.io/weaviate-helm

  2. Helm values で service.type: ClusterIPingress.enabled: true を設定。

  3. Cert-Manager で ACME Issuer を作成し、Ingress に cert-manager.io/cluster-issuer: letsencrypt アノテーションを付与。

  4. Ingress コントローラ (NGINX, Traefik 等) が TLS を終端し、バックエンド Pod へは HTTP/8080 で転送。

補足: Weaviate Cloud Service (WCS) を利用する場合はポート 443 で自動的に TLS が有効化されているため追加設定は不要です。weaviate.io


2. 必要ポートとファイアウォール設定

用途 デフォルト 調整方法 ファイアウォールでの扱い
REST / GraphQL API TCP 8080 --port CLI フラグまたは SERVICE_PORT helm value 外部公開が必要なら LB で 443→8080 (内部) に転送
gRPC API TCP 50051 GRPC_PORT 環境変数 初期は内部のみ許可。クライアントが gRPC を使う場合のみ外部公開を検討
Prometheus Metrics TCP 2112 PROMETHEUS_MONITORING_ENABLED=true 基本的にクラスタ内 (Prometheus サーバ側) のみ許可
  • 境界ファイアウォール (AWS Security Group / GCP Firewall / Azure NSG): 8080 や 50051 を直接開けず、TLS 終端用の 443 のみパブリックに開放する

  • Kubernetes NetworkPolicy: アプリケーション‐Weaviate 間の入出力を namespaceSelector / podSelector で限定

  • 内部ロードバランサ: GKE 公式チュートリアルでは port 8080 / 50051 を Internal LB に束ね、VPC 内だけに公開しています。cloud.google.com


3. 運用時のベストプラクティス チェックリスト

項目 推奨設定
TLS バージョン/暗号スイート TLS 1.2 以上、AES-256 系のみ許可 (Checklist 推奨) weaviate.io
証明書ライフサイクル ACME 90 日更新/Secrets Store CSI Driver で自動ローテーション
IP 制限 管理 API 用に IP allow list もしくは VPN 経由のみに制限
DDoS / WAF Cloud Armor, AWS WAF, Azure Front Door 等を LB 前段に配置
ノード間通信 サービスメッシュまたは VPC 内部ネットワークのみ許可し、外部からの直接到達を遮断
監査ログ Ingress/LB のアクセスログ、Weaviate 自体のリクエストログを集中管理 (Cloud Logging, CloudWatch Logs など)
脆弱性対策 公式 Docker イメージを追従し、イメージスキャン (Trivy 等) を CI に組み込む

4. まとめ

  1. HTTPS/TLS は必須 — 小規模なら Weaviate 本体で、可用性を重視するならリバースプロキシ/Ingress で終端。

  2. ファイアウォールは最小権限 — 8080・50051 など必要ポートだけを内部向け/ロードバランサ向けに開放。

  3. クラスタ内部の分離 — NetworkPolicy・サービスメッシュでノード間を mTLS+最小許可に。

  4. 運用自動化 — 証明書更新、ログ収集、脆弱性スキャンをパイプラインに組み込み、定期監査を実施。

これらを実施することで、Weaviate のネットワーク面の攻撃面積を最小に抑え、安全にベクトル検索サービスを提供できます。

ChatGPT4o 生成日:2025/06/20