egressview

認証とreverse proxy

English

EgressViewは緊急用ローカル管理者を常に維持します。Google OIDCは任意の追加ログイン方式で、ローカル復旧経路を無効化できません。

このページで得られるもの: 自分を締め出すことのないログイン経路と、EgressViewを動作マシン以外から安全に開くための設定です。

reverse proxyとHTTPSの節は読まなくて構いません — EgressViewを同じマシンでしか開かない場合、または信頼できるLAN内だけで使う場合は不要です。パスワード保護は既定で有効なので、無防備な状態にはなりません。

HTTPSを有効にする

既定では平文HTTPで待ち受けます。loopbackなら問題なく、信頼できるLAN内でも許容できます。許容できなくなるのは、ログインパスワードが自分の管理外を通る瞬間です。別の端末からEgressViewを使う前にHTTPSを有効にしてください。インターネットから到達できる構成では必須と考えてください。

.egressview.jsonへ追記して再起動します。

"https": { "enabled": true }

自己署名証明書(.egressview-cert.pem / .egressview-key.pem、有効期間10年)がopensslコマンドで自動生成されます。ブラウザは一度警告を出します。その証明書を保証する第三者がいないためであり、ここで警告を受け入れるのは想定された手順であって、回避策ではありません。

自分の証明書を使う場合は次のように指定します。

"https": { "enabled": true, "certPath": "/path/to/cert.pem", "keyPath": "/path/to/key.pem" }

ローカル管理者

Google OIDC

Google OAuth 2.0のWeb applicationを作成し、承認済みredirect URIを次に設定します。

https://YOUR_EGRESSVIEW_ORIGIN/api/auth/oidc/callback

設定 → 一般 → 認証と監査でclient ID、client secret、許可emailまたはdomainを1件以上設定します。EgressViewはAuthorization Code + PKCE、state、nonce、Google JWKS署名、issuer、audience、有効期限、verified email、allowlistを検証してから、通常の失効可能なsessionを作成します。

ブラウザのロール

検証済みのログイン経路から、サーバー側でロールを割り当てます。

ログイン ロール 権限
ローカル管理者 admin 設定、認証情報、認証、バックアップ、運用機能のすべて
許可メールに明示したGoogleアカウント operator ネットワーク情報と端末メモの更新
許可ドメインだけに一致したGoogleアカウント viewer ネットワーク情報の閲覧のみ

認証のallowlistは管理者権限の指定ではありません。emailまたはdomain allowlistに含まれるだけでGoogle利用者が管理者になることはありません。 また、生成AIへのデータ送信と課金が発生し得るため、operatorにはAI分析を 許可しません。

ブラウザロール未対応版からの更新時は、既存のローカルsessionだけを管理者 として維持します。既存OIDC sessionは一度失効し、再ログイン時に検証済みの allowlist一致からロールを割り当て直します。

Reverse proxy境界

公開URLを指定し、自分で管理するproxy addressだけを信頼します。

EGRESSVIEW_PUBLIC_URL=https://egressview.example.com
EGRESSVIEW_TRUST_PROXY=10.41.0.10
EGRESSVIEW_SECURE_COOKIES=true

EGRESSVIEW_TRUST_PROXYはカンマ区切りのexact IPまたはIPv4 CIDRです。全proxyを信用する設定は禁止です。forwarded client/protocol headerはrate limit、監査用pseudonym、Secure cookie判定に影響します。

reverse proxyが設定済みのSUBPATHを除去してapplicationへ転送する場合は、 同じ値をX-Forwarded-Prefixでも送信してください。たとえば /egressview/を公開し、applicationのrootへ転送するproxyは X-Forwarded-Prefix: /egressviewを送ります。これにより、同一processで 公開専用hostの/とprivateなsubpath accessを両立できます。

既定値はclientごとに1分間600 API read、120 API mutationです。通常trafficを観測した上で、必要な場合だけEGRESSVIEW_RATE_LIMIT_READSEGRESSVIEW_RATE_LIMIT_WRITESを変更してください。

Agentのingestは別枠で、アドレスごとに1分間1500件です(EGRESSVIEW_AGENT_INGEST_WRITES_PER_IP)。Agentは人ではなく、1台で1分間に30バッチ送ることがあるため、専用枠が必要です。120のmutation枠を共有すると、同じアドレスから来る5台目のAgentが弾かれます。これはAgentがNAT越しにHubへ到達する構成では即座に起きます。Agent1台あたりは別途1分間30回に制限されます(EGRESSVIEW_AGENT_INGEST_REQUESTS_PER_MINUTE)。

上限を超えるとHubはRetry-After付きの429を返し、Agentはbackoffして再送するため、観測は失われず遅延します。ただし遅延も避けたいものです。画面上は「Hubの表示が少し古い」という形で現れ、理由を示すものが何も出ません。GET /api/agents/ingest-metricseventLoopDelayMsを返します。ingestがWeb UIを待たせ始めているかどうかは、この値で判断してください。

監査

設定画面でlogin、logout、security変更、CSRF拒否、更新APIの最近のeventを確認できます。Append-only rowは生のemail/client IPではなく、request IDとkeyed hashを保存します。既定保持期間は180日です。