ネットワーク保護の全体像
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 で自己署名証明書を使う例
このように –tls-certificate / –tls-key で PEM を渡すだけで暗号化通信が有効になります。stackoverflow.com
1-2. Kubernetes で Ingress + Cert-Manager を使う流れ(概要)
-
helm repo add weaviate https://weaviate.github.io/weaviate-helm -
Helm values で
service.type: ClusterIP、ingress.enabled: trueを設定。 -
Cert-Manager で ACME Issuer を作成し、Ingress に
cert-manager.io/cluster-issuer: letsencryptアノテーションを付与。 -
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. まとめ
-
HTTPS/TLS は必須 — 小規模なら Weaviate 本体で、可用性を重視するならリバースプロキシ/Ingress で終端。
-
ファイアウォールは最小権限 — 8080・50051 など必要ポートだけを内部向け/ロードバランサ向けに開放。
-
クラスタ内部の分離 — NetworkPolicy・サービスメッシュでノード間を mTLS+最小許可に。
-
運用自動化 — 証明書更新、ログ収集、脆弱性スキャンをパイプラインに組み込み、定期監査を実施。
これらを実施することで、Weaviate のネットワーク面の攻撃面積を最小に抑え、安全にベクトル検索サービスを提供できます。
ChatGPT4o 生成日:2025/06/20