egressview

Deployment profile

English

EgressViewは、収集、SQLite、browser、REST、MCPのdomain logicを特定cloudから 分離します。AWS、他CSP、オンプレミスでも同じapplicationとDB schemaを使用します。 Load balancer、公開DNS、WAF、IdPはruntime必須要素ではなく、交換可能なdeployment adapterとして扱います。

Profile matrix

Profile 公開範囲 MCP transport 認証 TLS IdP 想定outbound
local-stdio local process/private API stdio scoped EgressView API identity stdioには不要。API経路を保護 なし private EgressView API、任意の内部DNS
private-http LAN/VPN/private subnet限定 HTTP 専用MCP token + scoped API identity loopback以外は必須 なし private EgressView API、任意の内部DNS
private-oauth LAN/VPN/private subnet限定 HTTP OAuth/OIDC scope + scoped service identity 必須。内部CAを利用可能 内部OIDC provider 内部issuer/JWKS、EgressView API
public-oauth 審査済みproxy経由のInternet HTTP OAuth/OIDC scope + scoped service identity public trust TLS必須 OIDC provider issuer/JWKS、EgressView API

MCP processのEGRESSVIEW_DEPLOYMENT_PROFILEへ上記4値のいずれかを設定します。 未設定時は互換性のため、stdioをlocal-stdio、HTTP token modeを private-http、HTTP OAuth modeをpublic-oauthと推定します。明示profileが MCP_PORTまたはMCP_AUTH_MODEと矛盾する場合、MCP endpoint起動前に停止します。

Phase 1でprivate HTTPのcontrolを強制します。HTTPは既定で127.0.0.1へbind します。非loopbackのMCP_BIND_ADDRESSは、deployment profileを明示し、かつ MCP_ALLOW_NON_LOOPBACK=trueを設定した場合だけ許可します。名前解決によって 公開範囲が変わることを避けるためhostnameは拒否します。全HTTP profileで、 network.readnotes.writeだけを持つ専用MCP_SERVICE_TOKEN、append-only 監査、rate・同時実行上限、body上限、request/API timeoutを使用します。 endpoint token、service identity、監査鍵、管理tokenは別々の値にします。

Application自体は平文HTTPを提供するため、非loopback経路はTLS reverse proxy または同等の信頼できるprivate transportと、firewall、security group、 network policyで保護します。bindの明示承認はnetworkの安全性を保証しません。 offline modeとfrontend assetのself-hostは、後述の必須portability gateで検証します。

内部CAを使う場合、保護したPEM trust bundleをNODE_EXTRA_CA_CERTSへ指定して Nodeを起動し、各MCP clientのtrust storeにも同じCAを登録します。CA配布の代わりに TLS certificate検証を無効化しません。

Threat modelと必須control

Boundary 主な脅威 必須control
Local stdio 悪意あるlocal process、API identity漏洩 OS account分離、mode 0600のclient設定、scoped identity、rotation
Private network LAN侵害、token盗聴、意図しないroute公開 loopback外のTLS、firewall/VPN、専用credential、最小権限、監査、rate/timeout上限
Private OAuth 内部IdP侵害、内部CA誤用、stale token PKCE S256、issuer/audience/resource完全一致、内部CAの安全な配布、短命access token、refresh replay対策
Public OAuth Internet scan、credential replay、DoS、proxy迂回 公開gate、public TLS、OAuth、WAF/proxy上限、application direct ingress禁止、append-only監査、rollback
Offline runtime CDN、enrichment、cloud AI、updateからの隠れたegress asset同梱、outbound deny、local agent/model、egress遮断integration test

Private networkも既定では信頼しません。private HTTPでbrowser管理tokenを流用せず、 平文LANへBearer tokenを送信しません。0.0.0.0へのbindはprivateである証拠に ならないため、firewall、security group、network policy、proxy境界も検証します。

外部依存matrix

機能 現在のInternet依存 Private代替 Offline目標
Router収集とSQLite なし 同じruntime 対応
MCP stdio/private HTTP install後はなし private API、任意の内部TLS local MCP clientで対応
Browser graph library/world map runtime依存なし self-host asset 対応
Reverse DNS resolver依存 内部DNS 任意
RDAP、threat feed、OUI更新 public service 必要なら管理mirror 状態を表示して無効化
Browser OIDC 現行の任意機能はGoogle local管理者、将来の汎用内部OIDC local管理者
MCP OAuth issuer依存でCSP非依存 self-host OIDC + 内部CA issuer/JWKSが全て内部ならprivate OAuth
AI Insights Ollamaまたはcloud provider Ollama/private互換endpoint local modelのみ
Package更新 install/upgrade時のnpm registry 内部npm mirror 署名済みsource bundle。lock済み依存のinstall後はoffline稼働

Claude CodeやGitHub Copilot等のcloud agentは、MCP endpointがprivateでもagent自身の Internet接続を必要とします。完全閉域ではMCP対応local agentとOllama等のlocal modelを使用します。

AWS mapping

週末に予定しているAWS構成はpublic-oauth profileの実装であり、別editionでは ありません。

同じapplicationをオンプレミスのreverse proxy・内部Keycloak、または他CSPの同等 serviceでも利用できます。AWS構築はMCP protocol/publication gate完了まで publishDns=falseを維持します。

オフラインモード

エアギャップ環境や外向き通信を遮断した環境では EGRESSVIEW_OFFLINE_MODE=true を設定します。有効化されるのは正確に true の場合だけです。綴り間違いで「隔離されているつもり」の状態が生まれないようにしています。

保証するのは「外向きリクエストを試行しない」ことであり、「失敗する」ことではありません。実行してタイムアウトさせる方式では、パケットは出てしまい、EgressViewの稼働が外部に伝わり、タイムアウト分だけ起動も遅れます。そのため各機能は、通信を行うモジュールが組み立てられる前に判定されます。クラウドプロバイダのSDK clientも生成しないので、認証情報の解決も接続の確立も発生しません。

起動前に無効化されるもの

RDAP、GeoIP、脅威フィード、WiresharkのOUIベンダーデータベース、手動脅威調査、Google OIDC、Anthropic / OpenAI / Bedrock の各AIプロバイダ。

影響を受けないもの

ルーターのSSH収集、SQLiteの保存とmigration、Web UI、stdio および private HTTP のMCP。いずれも定義上ローカルで完結します。

明示設定時のみ許可されるもの

機能 有効化する変数
内部DNS / PTR EGRESSVIEW_INTERNAL_DNS
自己ホストのOllama EGRESSVIEW_OLLAMA_URL

これらは隔離網の内部で到達可能な場合がありますが、loopbackまたはprivate IPの接続先を指定するまでは無効のままです。offline modeでは、DNSによって許可済み接続先が隔離網外へ向けられることを防ぐためhostnameを拒否します。MCPのprivate OAuthはMCP設定ガイドに記載したMCP OAuth設定で別途構成します。

失われる機能

通信先の組織名・国・座標が表示されず、脅威判定は既にキャッシュ済みの情報だけで行われ、未知のMACプレフィックスにはベンダー名が付きません。既存のキャッシュはそのまま利用でき、更新が止まるだけです。

起動ログに無効化した機能が列挙されます。GET /api/status も同じ状態を返すため、UIは空欄を放置せず「オフラインモードのため無効」と説明できます。

フロントエンドのasset

D3、TopoJSON、world atlasは固定版を同一オリジンから配信し、CSPは外部オリジンを一切許可しません。オフラインモードでのページ読み込みで外部リクエストは発生しません。

Install/upgradeとruntime隔離は別の境界です。署名付きportable source bundleは、 native依存を導入先OS/CPUへ合わせるため、一時的にnpm registryへ接続します。 署名付きdistribution guideを参照してください。 Install完了後、service起動前にoffline modeを有効化して外向き接続を遮断します。

Portability gate

各release candidateでnpm run test:portabilityを実行します。同じapplication artifactを、外向きDNSと非loopback socketを拒否した状態で起動し、次を検証します。

CIではLinux hostと、--network noneで起動した汎用Debian containerの両方で 実行します。このcontainerをAWS外の基準runtimeとし、AWS credentialとmetadata serviceを与えません。別audit fileを使った正の対照で、遮断したDNS試行が実際に 記録されることも必須にするため、検出器の配線漏れによる偽の0件では合格しません。

このgateはfirewallを開かず、DNSを公開せず、cloud infrastructureも作成しません。 また、運用環境の周辺networkがprivateであることまでは証明しないため、そこは deployment側のcontrolとして別途確認します。