メインコンテンツまでスキップ

セキュリティガイド

マーケットプレイス版 AGENTIC STAR のセキュリティ構成と、本番環境に向けた強化手順を解説します。

初期構成の方針

マーケットプレイス版は最小コストで導入可能な構成がデフォルトです。全コンポーネントが単一レプリカ(replica=1)で構成されており、購入後にセキュリティ・可用性要件に応じて段階的にスケールアップできます。

ゼロトラスト通信アーキテクチャ

AGENTIC STAR は、ゼロトラストセキュリティモデルに基づく通信アーキテクチャを採用しています。

marketplace-agent namespace 内の Pod には Envoy サイドカープロキシが自動注入され、アウトバウンド通信は Envoy を経由して ExtAuth Service(外部認可サービス)による認可制御を受けます。

コンポーネント役割
Envoy Injection WebhookPod 作成時に Envoy サイドカーコンテナを自動注入する MutatingWebhook
Envoy サイドカー各 Pod 内でアウトバウンド通信をインターセプトし、ExtAuth Service に認可リクエストを送信
ExtAuth Service認可ポリシーに基づき通信の許可/拒否を判定する外部認可サービス

セキュリティ構成レベル

AGENTIC STAR では、セキュリティと可用性の要件に応じて 3 つの構成レベルを定義しています。

レベル名称replicaFailurePolicyAntiAffinityPDBゼロトラスト保証
Level 1初期構成(デフォルト)1Ignoreなしなしベストエフォート
Level 2推奨構成2Failありあり保証あり
Level 3本番構成3+Failありあり保証あり + 高可用性

ゼロトラスト保証レベルの違い

  • ベストエフォート — 正常時は Envoy 経由の通信が保証されますが、Webhook 障害時にサイドカー未注入の Pod が起動する可能性があります
  • 保証あり — Webhook 障害時は Pod 作成自体がブロックされるため、サイドカー未注入の状態は発生しません

各レベルの推奨用途

レベル推奨用途説明
Level 1開発環境、PoC、機能検証コスト最適化を優先。セキュリティ要件が厳しくない環境向け
Level 2本番環境の最小構成ゼロトラスト通信が保証される最小構成。本番環境での利用を開始する際の推奨レベル
Level 3ミッションクリティカルな本番環境高可用性を備えたゼロトラスト保証構成。サービスの継続性が重要なワークロード向け

初期構成(Level 1)の制約事項

初期構成はコスト最適化を優先しており、以下の制約があります。本番環境での利用には Level 2 以上へのアップグレードを強く推奨します。

単一レプリカ構成のリスク

コンポーネント初期構成障害時のリスク
ExtAuth Servicereplica=1, PDB 無効ゼロトラスト認可が停止
Envoy Injection Webhookreplica=1, PDB 無効サイドカー未注入 Pod が起動
NGINX Ingress Controllerreplica=1全外部アクセスが停止
Keycloak(認証基盤)replica=1ユーザー認証が不可
Gate Services(ルーティング)replica=1API 経路が停止

Envoy Injection Webhook の制約

初期構成では failurePolicy: Ignore が設定されています。Webhook Pod が障害やノードメンテナンスにより停止した場合、サイドカーなしで起動した Pod は認可制御をバイパスして外部サービスと直接通信できる状態になります。この状態は Pod が再起動されるまで継続します。

NetworkPolicy 未適用

初期構成では NetworkPolicy が適用されていません。クラスター内の任意の Pod から任意のサービスへの通信が可能な状態です。

コンポーネント別セキュリティ推奨値

セキュリティ基盤

ExtAuth Service

設定項目Level 1Level 2Level 3
replicaCount123
autoscaling.minReplicas123
pdb.enabledfalsetruetrue
pdb.minAvailable11

Envoy Injection Webhook

設定項目Level 1Level 2Level 3
webhook.replicaCount122
webhook.pdb.enabledfalsetruetrue
webhook.pdb.minAvailable11
webhook.mutating.failurePolicyIgnoreFailFail
危険

failurePolicy: Fail に変更する場合、Webhook のレプリカ数を必ず 2 以上にしてください。単一レプリカで Fail に設定すると、Webhook 障害時にすべての Pod 作成がブロックされます。

認証・ルーティング

Keycloak

設定項目Level 1Level 2Level 3
replicas123
JDBC-ping クラスタリング不要有効(自動)有効(自動)
注記

Keycloak は replicas=2 以上で JDBC-ping によるクラスタリングが自動有効化されます。セッション共有が行われるため、1 台の障害時でも認証セッションが継続します。

NGINX Ingress Controller

設定項目Level 1Level 2Level 3
autoscaling.minReplicas123
autoscaling.maxReplicas5510
autoscaling.targetCPU70%70%70%
autoscaling.targetMemory80%80%80%

Gate Services

設定項目Level 1Level 2Level 3
autoscaling.minReplicas122

アプリケーション

Agent Executor / AgenticAI Admin / AgenticAI ExtAPI

設定項目Level 1Level 2Level 3
autoscaling.minReplicas122

データストア

Qdrant(ベクトル DB)

設定項目Level 1Level 2Level 3
replicaCount113(cluster: true)
clusterfalsefalsetrue
loadBalancer.enabledfalsefalsefalse
dashboard.enabledfalsefalsefalse
危険

loadBalancer.enabled および dashboard.enabled は、本番環境では必ず false にしてください。有効化すると Qdrant への外部アクセスが可能になり、ベクトルデータの漏洩リスクがあります。

MongoDB

設定項目Level 1Level 2Level 3
podAntiAffinityPresetsoftsofthard

監視基盤

Prometheus

設定項目Level 1セキュリティ推奨
securityContext.runAsNonRoottrue維持(変更不要)
securityContext.runAsUser1000維持(変更不要)
securityContext.fsGroup2000維持(変更不要)
retention30d監査要件に応じて延長
storage50Giデータ量に応じて増量

Loki

設定項目Level 1セキュリティ推奨
auth_enabledfalse本番環境では true を検討
retention_period7d監査要件に応じて延長(30d 以上)
storage10Giログ量に応じて増量

NetworkPolicy によるネットワーク分離

初期構成では NetworkPolicy が含まれていません。クラスターのセキュリティ要件に応じて、以下の NetworkPolicy の適用を推奨します。

前提条件

NetworkPolicy の動作には、CNI プラグイン(Calico / Cilium 等)の対応が必要です。AGENTIC STAR の AKS クラスタは Calico が有効化されており、NetworkPolicy をそのまま適用できます。

Qdrant アクセス制限

Qdrant にはベクトル化されたデータが格納されており、不正アクセスによるデータ漏洩を防ぐためアクセス元を制限します。

YAML
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: qdrant-allow-authorized-only
namespace: qdrant
spec:
podSelector:
matchLabels:
app: qdrant
policyTypes:
- Ingress
ingress:
# namespace 内通信(クラスター P2P)
- from:
- podSelector: {}
# 許可された外部 namespace からのアクセス
- from:
- namespaceSelector:
matchLabels:
name: agent-executor
ports:
- port: 6333
protocol: TCP
- port: 6334
protocol: TCP
ヒント

Qdrant Helm chart の networkPolicy.enabled: truenetworkPolicy.allowedNamespaces を設定することで、同等の NetworkPolicy を Helm 経由で適用することも可能です。

データベースアクセス制限

PostgreSQL へのアクセスを必要なコンポーネントのみに制限します。

YAML
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: restrict-postgresql-access
namespace: autonomous-agent
spec:
podSelector:
matchLabels:
app: postgresql
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
name: agent-executor
- namespaceSelector:
matchLabels:
name: agenticai-admin
- namespaceSelector:
matchLabels:
name: gate-services
ports:
- port: 5432
protocol: TCP

ExtAuth Service へのアクセス制限

ExtAuth Service は認可制御の中核であるため、Envoy サイドカーからのみアクセスを許可します。

YAML
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: extauth-service-allow-envoy-only
namespace: proxy-system
spec:
podSelector:
matchLabels:
app: extauth-service
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector: {}
podSelector:
matchLabels:
sidecar: envoy

監視基盤のアクセス制限

Prometheus / Loki などの監視基盤へのアクセスを制限し、メトリクス・ログデータの漏洩を防ぎます。

YAML
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: prometheus-allow-internal-only
namespace: observability
spec:
podSelector:
matchLabels:
app.kubernetes.io/name: prometheus
policyTypes:
- Ingress
ingress:
# Grafana / Alertmanager からのアクセス
- from:
- podSelector: {}
# Alloy からの Remote Write
- from:
- namespaceSelector: {}
podSelector:
matchLabels:
app.kubernetes.io/name: alloy
ports:
- port: 9090
protocol: TCP

TLS / SSL 設定

初期構成では自己署名証明書が使用されています。本番環境ではカスタムドメインと正規 SSL 証明書の設定が必要です。

ドメインの取得、DNS 設定、SSL 証明書の設定手順についてはドメイン設定ガイドを参照してください。

アップグレード手順

Level 1 → Level 2(推奨構成)

Step 1: ExtAuth Service の values 上書きファイルを作成

YAML
# security-upgrade-values.yaml
# Level 2: 推奨構成(ゼロトラスト保証あり)

replicaCount: 2
autoscaling:
minReplicas: 2

pdb:
enabled: true
minAvailable: 1

webhook:
replicaCount: 2
pdb:
enabled: true
minAvailable: 1
mutating:
failurePolicy: Fail
注記

AntiAffinity は Helm chart のデフォルト値(preferred)が自動的に適用されるため、明示的な上書きは不要です。

Step 2: 各コンポーネントのレプリカ数を引き上げ

以下の各コンポーネントの values ファイルで minReplicas を 2 以上に設定します。

YAML
autoscaling:
minReplicas: 2

対象コンポーネント:

  • agent-executor
  • agenticai-admin
  • agenticai-extapi
  • gate-services
  • ingress-nginx
  • librechat-auth(replicas: 2

Step 3: Helm upgrade を実行

curl
helm upgrade extauth-service ./extauth-service \
-n proxy-system \
-f current-values.yaml \
-f security-upgrade-values.yaml

Step 4: 変更を確認

curl
# Pod 分散配置の確認
kubectl get pods -n proxy-system -o wide

# PDB 作成の確認
kubectl get pdb -n proxy-system

# FailurePolicy の確認
kubectl get mutatingwebhookconfiguration envoy-injector-webhook \
-o jsonpath='{.webhooks[0].failurePolicy}'
# 期待値: Fail

# Envoy 注入の動作確認
kubectl rollout restart deployment/agent-executor -n agent-executor
kubectl get pods -n agent-executor
# 期待値: 全 Pod が READY 2/2

Level 2 → Level 3(本番構成)

Step 1: values 上書きファイルを作成

YAML
# production-values.yaml
# Level 3: 本番構成(高可用性)

replicaCount: 3
autoscaling:
minReplicas: 3

webhook:
replicaCount: 2

Step 2: Helm upgrade を実行

curl
helm upgrade extauth-service ./extauth-service \
-n proxy-system \
-f current-values.yaml \
-f security-upgrade-values.yaml \
-f production-values.yaml

Step 3: 変更を確認

curl
# extauth-service の Pod が 3 台起動していること
kubectl get pods -n proxy-system -l app=extauth-service

# webhook の Pod が 2 台起動していること
kubectl get pods -n proxy-system -l app=envoy-injector-webhook

本番環境セキュリティチェックリスト

ゼロトラスト通信

  • ExtAuth Service のレプリカ数が 2 以上であること
  • Envoy Injection Webhook のレプリカ数が 2 以上であること
  • failurePolicyFail に設定されていること
  • PDB が有効化されていること
  • 全ワークロード Pod で Envoy サイドカーが注入されていること(READY 2/2)

ネットワーク分離

  • Qdrant へのアクセスが必要な namespace のみに制限されていること
  • PostgreSQL へのアクセスが必要なコンポーネントのみに制限されていること
  • ExtAuth Service へのアクセスが Envoy サイドカーからのみに制限されていること

TLS / 証明書

  • 自己署名証明書から CA 発行証明書に置き換えられていること
  • 全 Ingress で SSL リダイレクトが有効であること(デフォルト有効)
  • 証明書の自動更新が設定されていること

データストア

  • Qdrant の loadBalancer.enabledfalse であること
  • Qdrant の dashboard.enabledfalse であること
  • PostgreSQL の接続情報が Kubernetes Secret で管理されていること

可用性

  • 各コンポーネントのレプリカ数が 2 以上であること
  • PDB が有効化されていること
  • AntiAffinity により Pod が異なるノードに分散されていること

監視・ログ

  • Prometheus のメトリクス保持期間が監査要件を満たしていること
  • Loki のログ保持期間が監査要件を満たしていること
  • アラート通知が適切に設定されていること

用語集

用語説明
FailurePolicy: IgnoreWebhook 障害時も Pod 作成を続行する設定。サイドカーが注入されないまま Pod が起動するリスクがある
FailurePolicy: FailWebhook 障害時は Pod 作成を拒否する設定。サイドカー未注入の Pod は起動しないが、Webhook 障害中は新規 Pod の作成がブロックされる
PodDisruptionBudget (PDB)ノードメンテナンスやアップグレード時に、最低限の Pod 数を保証する仕組み
Pod AntiAffinity同一ワークロードの Pod を異なるノードに分散配置するための設定
NetworkPolicyKubernetes 標準のネットワークアクセス制御機能。Pod 間の通信を Ingress / Egress レベルで制限する。CNI プラグインの対応が必要