EgressView は Model Context Protocol (MCP) サーバーを内蔵しており、AWS Kiro・Anthropic Claude・Anysphere Cursor・Zed などの AI アシスタントからネットワークデータを直接参照できます。
MCP SDK v2 serverは1つのtool定義で両方のprotocol eraを提供します。
2025-11-25 clientは従来のinitialize flow、2026-07-28 clientは
statelessなserver/discoverとrequest単位のmetadataを使用します。互換性のため
legacy fallbackを維持し、sticky sessionは必要ありません。
Transportを選ぶ前に、cloud非依存のDeployment profile
からlocal-stdio、private-http、private-oauth、public-oauthのいずれかを
選びます。管理環境ではEGRESSVIEW_DEPLOYMENT_PROFILEを明示してください。
Transport/認証との矛盾はendpoint起動前に拒否します。
接続後は自然な言葉で質問するだけです:
「過去24時間の脅威サマリーを見せて」
→ 合計18,142セッション: safe 18,117 / warn 25 / danger 0
「今日一番通信した端末はどれ?」
→ セッション数・MAC・ベンダー付きで端末ランキングを表示
「今週、新しいデバイスはネットワークに現れた?」
→ 過去7日間に初めて出現した端末・宛先を一覧表示
「脅威のある通信はある?」
→ Feodo / ThreatFox / URLhaus / Spamhaus DROP にヒットした宛先を表示
「192.168.1.50 はどこに接続している?」
→ その端末の上位宛先を国・組織・脅威レベル付きで表示
「過去6時間のアラートを教えて」
→ 脅威検出・新規デバイス通知・ビーコン候補の一覧
「メモがついている端末を一覧で見せて」
→ メモが登録されている全端末を表示
「192.168.1.97 にメモを追加して:Roomba、OTA アップデートで GitHub に接続」
→ その端末にメモを保存
AIエージェントが適切なツールを自動で選択し、必要であれば複数のツールを組み合わせて回答します。
| ツール名 | 返す情報 |
|---|---|
get_threat_summary |
指定期間の safe / warn / danger セッション数 |
get_traffic_summary |
総セッション数・ユニーク宛先数・ユニーク端末数 |
get_top_destinations |
接続数上位の宛先一覧(国・組織・脅威レベル付き) |
get_device_traffic |
端末ごとのトラフィック(src IP 指定で特定端末の上位宛先) |
get_new_nodes |
指定期間に初出現した端末・宛先 |
get_threat_connections |
脅威判定された通信先(信頼度 low/high 絞り込み可) |
get_alerts |
検出ログ(脅威・新規端末・ビーコン) |
get_devices |
LAN 内の全端末(MAC・ベンダー・状態・最終通信) |
query_connections |
送信元/宛先フィルター付きの通信ログ検索 |
get_device_notes |
端末のメモ一覧(src 省略で全端末、src IP 指定で1端末のメモ) |
set_device_note |
src IP で端末を指定してメモを追加・更新(空文字で削除) |
期間指定を行うツールは period パラメータを受け付けます: 1h / 6h / 24h(デフォルト)/ 7d / 14d
get_devices / get_device_notes / set_device_note は period パラメータを使用しません。
Claude Desktop と同じマシン上でローカルプロセスとして MCP サーバーを起動します。MCP サーバーが EgressView の REST API を HTTP で呼び出します。EgressView はローカルでもリモートサーバー上でも構いません。
Claude Desktop では stdio モードが推奨です。 command ベースの stdio トランスポートはすべての MCP クライアントでサポートされており、URL バリデーションの制限を受けません。
前提条件: Node.js 22+、稼働中の EgressView、API/admin トークン
# 1. クローン(まだの場合):
git clone https://github.com/yo1t/egressview.git
cd egressview
npm install
Claude Desktop の設定ファイル (~/Library/Application Support/Claude/claude_desktop_config.json、macOS の場合):
{
"mcpServers": {
"egressview": {
"command": "node",
"args": ["/absolute/path/to/egressview/mcp-server.js"],
"env": {
"EGRESSVIEW_URL": "http://your-server-ip:3000",
"EGRESSVIEW_TOKEN": "your-admin-token"
}
}
}
}
/absolute/path/to/egressview はクローンした実際のパスに置き換えてください。EGRESSVIEW_URL は EgressView サーバーのベース URL です。リバースプロキシ経由で /egressview/ に公開している場合はそのパスを含めてください(例: http://your-server-ip/egressview)。EGRESSVIEW_TOKEN は EgressView 初回起動時にコンソールへ表示される API/admin トークンです。ブラウザ用ログインパスワードではありません。設定後に Claude Desktop を再起動すると、MCP ツール一覧に egressview が表示されます。
EgressView と同じサーバー上で mcp-server.js を HTTP サーバーとして起動し、リバースプロキシ(Apache または nginx)経由で外部公開します。
Claude Desktop をご利用の方へ: Claude Desktop はリモート MCP サーバーに
https://URL を要求します。リバースプロキシで TLS を終端していない場合は、Option A(stdio)を使用してください。stdio モードならローカル・リモートどちらの EgressView にも HTTP で接続できます。
このオプションは、HTTP トランスポートをネイティブでサポートする MCP クライアント(Anysphere Cursor・Zed・AWS Kiro・Anthropic Claude・カスタムエージェントなど)向けです。
ChatGPT から EgressView の MCP サーバーへ接続する場合は、Codex や Claude Desktop のローカル設定とは別に、ChatGPT 側で remote MCP / app として設定する必要があります。Codex の ~/.codex/config.toml や Claude Desktop の claude_desktop_config.json に追加した設定は、ChatGPT には自動では引き継がれません。
ChatGPT 側から直接接続する remote MCP サーバーは、原則として ChatGPT から到達できる HTTPS URL が必要です。EgressView を家庭内LAN、SOHO、社内ネットワーク、プライベートサブネットなどに置いている場合は、MCP エンドポイントをそのままインターネットへ公開せず、OpenAI の Secure MCP Tunnel など、プライベートな MCP サーバーを安全に接続する仕組みを検討してください。
ChatGPT Apps として公開・共有する場合は、利用者ごとの認証・権限管理も重要です。個人利用の検証では X-Admin-Token による保護でも動作確認できますが、複数ユーザーや外部公開を想定する場合は OAuth などのユーザー単位の認可を検討してください。MCP ツールはネットワーク状態や端末メモを取得できるため、信頼できるクライアントとユーザーだけに利用を限定してください。
# 環境ファイルをコピーして編集:
cp .env.mcp.example .env.mcp
# MCP_PORT=3010、MCP_TOKEN=<専用のランダムtoken>、
# MCP_SERVICE_TOKEN=<scoped egv_... identity>、
# MCP_AUDIT_HMAC_KEY=<専用の32文字以上のsecret>、
# EGRESSVIEW_URL=http://localhost:3000 を設定
# EgressView をリバースプロキシ背後の別ポートで動かしている場合は、
# そのローカルURLを指定してください(例: http://localhost:3002)。
chmod 600 .env.mcp
# 動作確認:
set -a; source .env.mcp; set +a
node mcp-server.js
# → [egressview-mcp] HTTP transport listening on 127.0.0.1:3010/mcp
HTTP tokenモードは3つの異なるcredentialを必要とします。MCP_TOKENはMCP
clientを認証し、MCP_SERVICE_TOKENはnetwork.readとnotes.writeだけを
持つegv_... API identity、MCP_AUDIT_HMAC_KEYはappend-only監査を
仮名化します。これらとEGRESSVIEW_TOKENを同じ値にしません。HTTP runtimeは
browser/admin tokenをAPI呼び出しへ使用しません。stdioモードは変更ありません。
P2-60のOAuth Resource Server境界は、MCP_AUTH_MODE=oauth、
MCP_OAUTH_ISSUER、MCP_OAUTH_RESOURCE、MCP_OAUTH_READ_SCOPE、
MCP_OAUTH_NOTES_WRITE_SCOPE、MCP_SERVICE_TOKEN、
MCP_AUDIT_HMAC_KEYを
設定するとprivate integration testで利用できます。RFC 9728 Protected
Resource Metadataを提供し、issuerのdiscovery/JWKSからRS256署名を検証し、
issuer、有効期限、audience、scopeの不一致をfail-closedで拒否します。
issuerはPKCE S256をmetadataへ公開する必要があります。loopback限定試験を
除きHTTPSが必須です。
既定のMCP_OAUTH_COMPATIBILITY_PROFILE=strictはこのmetadata検証を維持します。
AWS Cognito regional user-pool issuerとの完全一致時だけcognitoを指定でき、
code_challenge_methods_supported fieldの欠落だけを許容します。S256以外を
明示したmetadataや、署名、issuer、有効期限、単一audience、scope検証は緩和
しません。対応client versionごとにPKCE S256のwire trace、両requestのRFC 8707
resource、完全一致callback、refresh rotation、失効を公開前証跡で確認するまで
有効化しないでください。
外部provider scopeはEgressViewの共通permissionへ変換します。
MCP_OAUTH_READ_SCOPEはnetwork.read、
MCP_OAUTH_NOTES_WRITE_SCOPEはnotes.writeを付与します。read-onlyの
access tokenではset_device_noteをtool一覧へ表示せず、直接呼び出しても
403 insufficient_scopeで拒否します。scope昇格時に既存のread scopeを
失わないよう、write challengeには両方のscopeを含めます。
HTTP token/OAuthの両modeで、network.readとnotes.writeだけを持つ専用API
identityを作り、作成時に一度だけ返る平文tokenをMCP_SERVICE_TOKENへ設定します:
curl -sS -X POST http://127.0.0.1:3002/api/auth/api-identities \
-H "X-Admin-Token: $EGRESSVIEW_TOKEN" \
-H 'Content-Type: application/json' \
--data '{"label":"Remote MCP service","permissions":["network.read","notes.write"],"expiresInMs":31536000000}'
OAuth modeはegv_...形式のscoped identityだけを受け付け、
EGRESSVIEW_TOKENへfallbackしません。.env.mcpをmode 0600で保護し、
期限前にidentityをrotationして、確認後に旧identityを失効してください。
監査鍵はopenssl rand -hex 32で一度だけ生成し、service identityをrotation
しても同じ値を維持します。Internet公開gateは次のP2-60で実装します。
現段階のendpointをInternetへ公開しないでください。
既存の <VirtualHost> または設定ファイルに追記します。MCP のブロックは、既存の /egressview/ ProxyPass ルールより前に置く必要があります。
# ─── EgressView MCP サーバー ─────────────────────────────────────────────────
<Location /egressview/mcp>
ProxyPass http://127.0.0.1:3010/mcp flushpackets=on
ProxyPassReverse http://127.0.0.1:3010/mcp
# MCP Streamable HTTP は Accept ヘッダーに両タイプが必要
RequestHeader set Accept "application/json, text/event-stream"
</Location>
# OAuthモードのみ: RFC 9728 metadataのpathを維持して公開
ProxyPass /.well-known/oauth-protected-resource http://127.0.0.1:3010/.well-known/oauth-protected-resource
ProxyPassReverse /.well-known/oauth-protected-resource http://127.0.0.1:3010/.well-known/oauth-protected-resource
# ─── EgressView Web UI(既存のルール — 下に置く) ────────────────────────────
ProxyPass /egressview/ http://127.0.0.1:3002/
ProxyPassReverse /egressview/ http://127.0.0.1:3002/
必要な Apache モジュール: mod_proxy、mod_proxy_http、mod_headers(通常はデフォルトで有効)
sudo apachectl configtest && sudo systemctl reload httpd
server {} ブロック内に追記:
location /egressview/mcp {
proxy_pass http://127.0.0.1:3010/mcp;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
# SSE(ストリーミングレスポンス)のために必要
proxy_set_header Accept "application/json, text/event-stream";
proxy_set_header Connection '';
proxy_buffering off;
proxy_cache off;
proxy_read_timeout 3600s;
}
# OAuthモードのみ: rootとresource固有のmetadata pathを維持
location /.well-known/oauth-protected-resource {
proxy_pass http://127.0.0.1:3010;
}
sudo nginx -t && sudo systemctl reload nginx
# /etc/systemd/system/egressview-mcp.service
[Unit]
Description=EgressView MCP Server
After=network.target egressview.service
[Service]
Type=simple
User=ec2-user
WorkingDirectory=/home/ec2-user/egressview
EnvironmentFile=/home/ec2-user/egressview/.env.mcp
ExecStart=/usr/bin/node /home/ec2-user/egressview/mcp-server.js
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now egressview-mcp
HTTP トランスポートをサポートする MCP クライアント(Anysphere Cursor・Zed・カスタムエージェント)の場合:
{
"mcpServers": {
"egressview": {
"url": "https://your-server/egressview/mcp",
"headers": {
"X-Admin-Token": "your-dedicated-mcp-token"
}
}
}
}
リバースプロキシで TLS を終端している場合は https:// を使用してください(Claude Desktop では必須)。プレーンな http:// で使いたい場合は Claude Desktop では Option A(stdio)を使用してください。
| 変数 | 必須 | デフォルト | 説明 |
|---|---|---|---|
EGRESSVIEW_DEPLOYMENT_PROFILE |
推奨 | 推定 | local-stdio、private-http、private-oauth、public-oauth。deployment profile matrix参照 |
EGRESSVIEW_URL |
✅ | http://localhost:3000 |
EgressView サーバーのベース URL |
EGRESSVIEW_TOKEN |
stdio/setup | — | stdio互換またはHTTP service identity作成時に使うAPI/admin token。HTTP runtime呼び出しはMCP_SERVICE_TOKENを使用 |
MCP_PORT |
HTTP モード | — | MCP HTTP サーバーのローカルポート(例: 3010)。stdio モードの場合は不要 |
MCP_BIND_ADDRESS |
HTTPモード | 127.0.0.1 |
bindするIPv4/IPv6 literal。hostnameは拒否 |
MCP_ALLOW_NON_LOOPBACK |
非loopback bind | false |
明示deployment profileと併せて正確にtrueを設定した場合だけLAN/container/all-interface bindを許可 |
MCP_AUTH_MODE |
HTTP モード | token |
HTTP endpointの認証モード。tokenまたは段階導入中のoauth |
MCP_TOKEN |
HTTP tokenモード | — | private HTTP endpoint専用token。明示設定し、EGRESSVIEW_TOKENと別の値にする |
MCP_OAUTH_ISSUER |
HTTP OAuthモード | — | Authorization Serverの正確なHTTPS issuer URL。loopback HTTPは試験時だけ許可 |
MCP_OAUTH_COMPATIBILITY_PROFILE |
HTTP OAuthモード | strict |
strict、または互換性証跡が完成したAWS Cognito regional user-pool issuerだけcognito |
MCP_OAUTH_RESOURCE |
HTTP OAuthモード | — | JWT audienceの完全一致検証に使うcanonical public MCP resource URL |
MCP_OAUTH_READ_SCOPE |
HTTP OAuthモード | — | 内部network.read permissionへmappingするprovider scope |
MCP_OAUTH_NOTES_WRITE_SCOPE |
HTTP OAuthモード | — | 内部notes.write permissionへmappingするprovider scope |
MCP_SERVICE_TOKEN |
HTTPモード | — | network.readとnotes.writeだけを持つ専用egv_... API identity token |
MCP_AUDIT_HMAC_KEY |
HTTPモード | — | 監査subject/clientの仮名化だけに使う32文字以上の安定した秘密鍵 |
127.0.0.1だけをlistenします。非loopback literal IPは明示profileとMCP_ALLOW_NON_LOOPBACK=trueの両方を必要とし、TLSとnetwork policyで保護しますMCP_TOKENをX-Admin-TokenまたはAuthorization: Bearerで受け取り、EgressView管理tokenへfallbackしませんset_device_note のみ端末メモの書き込みが可能です(.egressview.notes.json への保存。メインDBへの書き込みはありません).env.mcp には非公開API credentialが含まれるため、chmod 600 で保護してくださいRuntimeのlimitと監査はprivate token/OAuthの両HTTP modeへ適用します。stdioは 対象外です。OAuthは利用者/client単位、private tokenは共有private credential 単位で記録・制限します。
3つの独立したバケットがあり、すべてが許可した場合だけ通過します。加えて同時実行数の上限を別に設けています。遅いtool callは、毎分の上限に達するよりずっと早くプロセスを枯渇させるためです。
| 設定 | 既定値 | 目的 |
|---|---|---|
MCP_RATE_LIMIT_GLOBAL |
60/分 | 単一のバーストからホストを保護 |
MCP_RATE_LIMIT_SUBJECT |
30/分 | 侵害された1利用者が全体の枠を消費できない |
MCP_RATE_LIMIT_CLIENT |
30/分 | 異常な1クライアントも同様 |
MCP_MAX_CONCURRENT |
4 | 同時tool call数を制限 |
MCP_MAX_BODY |
256kb |
解析・認証の前にbodyを制限 |
MCP_TRUST_PROXY |
未設定 | クライアントアドレスの設定を許可するproxyのexact IP / IPv4 CIDR(カンマ区切り) |
MCP_REQUEST_TIMEOUT_MS |
30000 | MCP処理1回の締切 |
MCP_API_TIMEOUT_MS |
15000 | 内部EgressView API呼び出し1回の締切 |
締切が無いと、停止した呼び出しがMCP_MAX_CONCURRENT個の枠をすべて占有し、endpointが閉塞します。request締切は内部API呼び出しをabortして応答を終了します。なおMCPのtransportはストリーミングのため、応答を開始した後はステータスを504へ変更できません。ストリーム途中で締切を超えた呼び出しは、ステータスではなく監査のrequest_timeoutとして記録されます。timeout値は1〜600000の整数ミリ秒だけを許可し、不正値は文書記載の既定値へfallbackします。
既定値は意図的に厳しくしています。実測した使用量がまだ無く、誤検知が出てから緩めるのは容易ですが、緩すぎたと気づくのは悪用された後だからです。正当な処理が上限に当たる場合は引き上げてください。
拒否時は429とRetry-Afterを返します。正の整数でない値は上限を無効化せず既定値へfallbackします。設定ミスで上限が消えることはありません。
reverse proxy側の上限も併用してください。 これはNode側の半分にすぎず、ここの不具合や再起動でendpointが無制限になってはいけません。X-Forwarded-ForはEGRESSVIEW_TRUST_PROXYに列挙したproxyアドレスからのみ信頼します(認証ガイド参照)。
全HTTP requestを専用ストア(MCP_AUDIT_DB_PATH、既定.egressview-mcp-audit.db)へ追記します。このstoreの書込検証に失敗した場合、HTTP endpointは起動しません。EgressView本体の監査とは意図的に分離しています。MCPプロセスはscoped API identityで動作しており、本体の監査への書き込み権限を与えると、MCPが侵害された場合に本体の記録を偽造・改竄できてしまうためです。
記録するもの: 仮名化したOAuth subjectとclient ID、tool名、付与scope、成否、理由コード、request ID、処理時間。
記録しないもの: tool引数、MACアドレス、端末メモ本文、access token、生のJWT、providerのエラー文言。クライアントのアドレスは鍵付きハッシュのみを保存し、平文では保存しません。
2つの監査の突き合わせ。 EgressView本体はMCP service identityが何をしたかを記録し(actor: api:<id>)、こちらのストアはそれをどのOAuth subjectが要求したかを記録します。MCPのrequest IDはX-Request-IdとしてEgressViewへ転送されるため、1つの事象を両者で追跡できます。保持期間は必ず揃えてください。片方だけ先に消えると、「何が起きたか」は残るのに「誰が指示したか」が失われます。
理由コード: unauthorized、invalid_token、insufficient_scope、bad_request、not_found、method_not_allowed、payload_too_large、client_error、tool_error、global_rate_limit、subject_rate_limit、client_rate_limit、concurrency_limit、request_timeout、server_error。request単位の行には長さ制限したMCP methodとHTTP statusも記録します。tool呼び出しは長寿命response streamの終了時ではなくhandler完了時に記録し、tool引数、response body、providerのerror本文は保存しません。失敗が連続する場合は調査の合図です。
subjectは専用MCP_AUDIT_HMAC_KEYによるHMACで仮名化するため、識別子を保存せずに同一人物の活動を追跡できます。MCP_SERVICE_TOKENをrotationしてもこの鍵は維持してください。意図的に変更した場合は新しい仮名化namespaceになります。180日より古い記録は起動時と、その後24時間ごとに削除します。プロセスを長期間稼働させても保持期間が効き続けます。EgressView本体の監査保持期間と揃えています。
MCP_AUTH_MODE=tokenに戻します。ローカル収集、ブラウザUI、stdio、private HTTPは動作を継続しますMCP_SERVICE_TOKENをrotateします。 EgressViewで新しいscoped API identityを発行し、.env.mcpを更新して再起動し、その後で旧identityを失効させます公開MCP endpointはfail-closedで401を返します。それ以外は動作を継続します。ルーター収集、ブラウザUI、stdioクライアント、private HTTPモードはいずれも影響を受けません。IdP障害をEgressViewの障害として扱わないでください。
P2-60には、公開DNSを作成する前に必ず成功させるfail-closed gateが
あります。このgateはDNS、証明書、load balancer、security group、
Keycloak、EgressView設定を作成・変更しません。成功結果も
ready_for_manual_dns_reviewであり、DNS公開は別途レビューする操作です。
DNS未公開のALBまたはreverse proxyに対して実行します。
MCP_GATE_CONNECT_ADDRESSへstaging targetを指定しても、TLS SNIとHTTP
Hostにはcanonical hostnameを維持します。これは
curl --connect-toと同じ考え方です。
cp .env.mcp-gate.example .env.mcp-gate
chmod 600 .env.mcp-gate
cp docs/mcp-publication-evidence.example.json \
.egressview-mcp-publication-evidence.json
set -a
. ./.env.mcp-gate
set +a
npm run mcp:publication-gate
2つのlocalファイルはいずれもgitignoreされています。Bearer tokenは
mode 0600の環境ファイルだけに置き、試験直後に削除してください。
証跡JSONと生成レポートにはtoken、tool引数、通信観測、IP/MAC、credentialを
記録しません。
dual-era gateは証跡schema v3を要求します。旧templateはversion番号だけを 書き換えず、新しいtemplateへ置き換えてください。client protocolと互換性fieldは 実際のclient試験結果から記録する必須項目です。
すべて成功済みで、deployした40文字のGit commitと一致し、試験から30日以内 でなければなりません。
/healthz、/readyz、全有効routerの収集が継続したreject-replay、または
replay検知後にfamily全体を失効して現行refresh tokenも拒否するrevoke-family2025-11-25と2026-07-28の両方を検査するunsupported-random-loopback-portを
明示記録できる2025-11-25で同じtool discoveryを完了したMCP_GATE_OAUTH_COMPATIBILITY_PROFILE=cognitoの場合、設定したissuer/resourceと
一致するcognitoCompatibility証跡も必須です。PKCE S256、authorization/token
両requestのresource、access tokenとrefresh後のaudience、対応確認済みclientの
完全一致callback、旧refresh tokenとrevoke後tokenの拒否、試験した
Inspector・Claude Code・Copilot CLI versionを記録します。Cognito callback制約は
明示し、Copilot対応済みとは
表記しません。このprofileではKeycloak DB restore証跡は不要です。
JWKS障害試験ではMCP processをcold startしてください。起動済みprocessが 有効なcached JWKSで署名検証を継続するのは正常であり、discoveryの fail-closed証跡にはなりません。
CLIは続けて次を確認します。
401 challengeになる2025-11-25のinitializeと2026-07-28のserver/discoverが成功する-32020、未対応versionが-32022を返すset_device_noteを試した時の403と、write tokenでのtool表示429とRetry-Afterrate probeはstaging processのglobal 1分bucketを意図的に使い切ります。 公開中のendpointでは実行しないでください。
EgressViewはJWTをoffline検証するため、Keycloak sessionやrefresh familyを
失効しても、発行済みaccess tokenはexpまで無効になりません。そのため
MCP_GATE_REVOKED_EXPIRED_TOKENは短いaccess token TTLの経過後に検査します。
reject-replayはreplay request自体の失敗と現行familyの継続を要求します。
Keycloak 26.7.0の実測に一致するrevoke-familyはreplay検知後に現行familyも
失敗することを要求します。この方式ではreplay requestが最後の短命access tokenを
発行する可能性があるため、どちらの方式でもaccess token寿命を15分以下にします。
即時遮断が必要なら最初にpublic proxy routeを外し、access tokenを即時失効
できるとは表現しません。
成功するとmode 0600の.egressview-mcp-publication-gate.jsonを生成します。
deploy commit、実行日時、hostname、router数、各分類の成否だけを記録し、
秘密情報は保存しません。失敗時はnonzeroで終了し、DNS公開を禁止します。
公開後の確認に失敗した場合はWeb/MCPのDNS aliasを削除し、MCP proxy routeを 無効化してVPN/SSM運用へ戻します。applicationの確認済みreleaseとKeycloak DBは、それぞれ事前試験したrollback手順だけで復元します。router収集と local recovery administratorは常に利用可能な状態を維持してください。
AWS Kiro、Anthropic Claude、Anysphere Cursor などの製品名は、各社の商標または登録商標です。EgressView はこれらの企業と提携・承認・後援関係にありません。