infrabroker について
infrabrokerは、ポリシーに沿ったインフラ操作を必要とするチーム向けに、AIエージェントのSSHおよびKubernetesアクセスを仲介します。操作ごとに短命な認証情報を発行し、モデルには渡さずブローカー内に保持します。
主な機能
- 01操作ごとの短命SSH証明書とトークン
- 02SSHおよびKubernetes操作ツール
- 03コマンドポリシー、ドライラン、承認
- 04セッション記録と連鎖監査ログ
- 05MCP stdio、HTTP、mTLSの各トランスポート
活用シーン
- 01ポリシーの範囲内でエージェントにホストコマンドを実行させる
- 02Kubernetesクラスターのリソースを照会・変更する
- 03セッション記録と操作監査を確認する
MCP 対応
stdioまたはOAuth2/OIDC対応HTTPでMCPサーバーを提供し、SSHおよびKubernetesのツールをMCPクライアントに公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
docker run -i --rm ghcr.io/luisgf/infrabroker:3.1.3ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ghcr.io/luisgf/infrabroker:3.1.3stdioツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
infrabroker
AI エージェント向けインフラストラクチャアクセスブローカー — SSH と Kubernetes。モデルが認証情報に触れることはありません。 (以前の名称は ssh-broker)
エージェントはアクションをリクエストします。たとえば、ホストでコマンドを実行したり、クラスターを照会または変更したりします。infrabroker はポリシーに照らしてリクエストを確認し、その単一の操作のために発行された認証情報を使って実行します。認証情報は、独自の CA が発行する一時的でスコープが限定された SSH 証明書、または有効期間が短く、対象にバインドされた ServiceAccount トークンです。実行後は出力のみを返します。キー、証明書、トークンはブローカーのメモリ内に保持され、呼び出し後に破棄されます。モデルのコンテキストに入ることはないため、プロンプトインジェクションを受けたエージェントにも外部へ持ち出せるものはありません。
単一のバイナリ infrabroker は、サブコマンドを選ぶことで、同じエンジン(internal/broker)とツール群(internal/mcpserver)を3種類のトランスポートで提供します。従来のトランスポート別バイナリ broker / mcp-broker / mcp-broker-http も、これらのサブコマンドを呼び出す薄い非推奨のラッパーとして残されているため、既存の設定も引き続き動作します。
- MCP stdio(ローカル、個人利用に推奨) —
infrabroker serve-mcp。 ツール:ssh_execute、ssh_session_open/ssh_session_exec/ssh_session_close、ssh_list_servers、ssh_put_file/ssh_get_file。クラスターを設定している場合は、k8s_get/k8s_list/k8s_logs/k8s_apply/k8s_delete/k8s_list_clustersも利用できます。トランスポート認証はありません。stdio の MCP 仕様が推奨するとおり、ユーザーがプロセスを起動することで分離を実現します。 - MCP HTTP + OAuth2/OIDC(リモート、マルチユーザー) —
infrabroker serve-mcp-http。 Streamable HTTP を使用します。同じツールを提供しますが、各クライアントは、発行者の JWKS に対してローカルで検証されるOIDC ベアラートークンで認証します。ユーザー ID(ユーザー単位の RBAC に使用するグループも含む)は署名サービスに伝播されます。 - HTTP + mTLS —
infrabroker serve-http。クライアント証明書で認証されたネットワークエージェント向けに、POST /v1/ssh_run(単発実行)を提供します。
ドキュメント
この README はランディングページです。詳細は、内容を絞り込んだ単一の情報源となるドキュメントに記載されています。
| ドキュメント | 内容 |
|---|---|
| QUICKSTART.md | 10 分以内に初めての ssh_execute を実行する方法 — 署名者や PKI が不要な、単一バイナリのローカルモード |
| ARCHITECTURE.md | 図、リクエストフロー、設計上の決定、sudo による権限昇格、セッション、複数の CA |
| THREAT_MODEL.md | アクター、信頼境界、セキュリティ制御、明示的な非目標/ギャップ |
| OPERATIONS.md | 運用手順書:起動、ホストの追加、ホットリロード、broker-ctl、PKI のローテーション、設定 |
| MESH.md | NetBird / Tailscale メッシュ上で infrabroker を実行する方法 — オーバーレイ経路の上位にあるセッションレイヤー |
| SANDBOX.md | サンドボックス化されたエージェント(ASP)で infrabroker を使用する方法:エージェントのコードはマイクロ VM 内にあり、認証情報と操作はブローカーの背後に置かれます — 各レイヤーが適用する制約、OIDC の設定例、実際の制限 |
| HA.md | 現在単一インスタンスである理由:状態の一覧、障害要因、複製時に低下する機能 |
| API.md | すべてのサービスの HTTP エンドポイントリファレンス |
| USAGE.md | MCP ツール(SSH + Kubernetes)、ドライラン、監査レビューのガイド(モデル/オペレーター向け) |
| SECURITY.md | 脆弱性の開示ポリシー |
| CONTRIBUTING.md · CODING_STYLE.md | ワークフロー、バージョン管理、Go のスタイル |
infrabroker を選ぶ理由
- 情報流出の防止(プロンプトインジェクション): 一時的なキー/証明書/トークンはブローカーのメモリ内にのみ存在し、モデルのコンテキストに入ることはありません。
- kubeconfig を使わない Kubernetes: 署名者は操作ごとに有効期間の短い バインドされた ServiceAccount トークン(TokenRequest API)を発行します。各クラスターは デフォルトで拒否され、動詞/リソース/名前空間ごとのポリシーが適用されます。また、SSH と同じドライラン、承認、監査のフローを使用します。
- 再利用の防止: 各証明書には数分の TTL と
source-address(ブローカーまたは踏み台の IP)が設定され、ワンショットの場合はforce-commandも設定されます。ホスト/時間/IP の条件外では使用できません。 - 制御された権限昇格:
allow_sudo/allowed_sudo_usersは署名者側にあるため、ポリシーで禁止されている場合、侵害されたブローカーが権限を昇格することはできません。 - CA の侵害範囲を限定: ホストグループごとに 1 つの CA(
ca_keys)を使用します。各キーは Azure Key Vault または ssh-agent(YubiKey PIV / SoftHSM / TPM)に置くこともでき、秘密鍵が HSM の外に出ることはありません。 - 監査/否認防止: 追記専用の Ed25519 チェーンログを使用し、署名者、ブローカー、
sshd間の記録をserialで関連付けます。
システムが意図的に防御しない内容も含む完全な脅威モデルは、THREAT_MODEL.md を参照してください。
仕組み
AI model ──tool call──> broker ──mTLS──> [control-plane] ──mTLS──> signer
(no credential) (ephemeral key (approval + (CA key +
in RAM, never guardrails, policy + RBAC,
on disk) no CA key) signs the cert)
│
└── SSH with the ephemeral cert ──> bastion ──> target host
└─ stdout/stderr/exit_code ─> model
ブローカーは 意図({host, role, purpose, command?, sudo?, pty?, pubkey, …})を送信します。署名者はポリシーからすべての証明書制約を導出し、署名済み証明書を返します。一時的な秘密鍵はブローカー内で生成され、外部に出ることはありません。リクエストフロー、設計上の決定、ProxyJump の各ホップにおける証明書の図については、ARCHITECTURE.md を参照してください。
機能の概要
| 機能 | 一言で言うと | 詳細 |
|---|---|---|
| 一時証明書 | 操作ごとにRAM上でEd25519鍵ペアを生成し、スコープが限定された有効期間数分の証明書を発行します。再利用可能なシークレットはありません。 | ARCHITECTURE |
| 外部署名者 | 独立したcmd/signerがCA鍵とポリシーを保持し、ブローカーは保持しません。 | ARCHITECTURE |
| 複数CA+HSM | ca_keysを使用し、ホストグループごとにCA鍵を設定できます。ローカルPEM、Azure Key Vault、ssh-agent/HSMに対応します。 | ARCHITECTURE |
| AIアクションファイアウォール | ホストごと、またはグループ単位で組み合わせ可能なコマンドポリシー(許可/拒否/require_approval)、POSIX-sh AST解析、ドライランに対応します。ワンショット操作に対する権威ある制御を提供します。 | ARCHITECTURE · USAGE |
| ヒューマン・イン・ザ・ループ承認 | オプションのコントロールプレーンにより、require_approvalコマンドを帯域外承認の対象にできます。署名者がこれを強制します。 | ARCHITECTURE · API |
| アクション予算(動作のガードレール) | エージェントが実行できる「量」を予算で制限します。CNごとの署名レート上限に加え、サブジェクトごとのレート制限と新規性に応じたエスカレーション(以降の新しいホスト/新規コマンドには承認が必要)を設定でき、監視または強制できます。ネットワークツールがエージェントの「到達先」や「支出額」を制限するのに対し、これはアクション自体を制限します。 | OPERATIONS · ARCHITECTURE |
| キルスイッチ | サブジェクト(呼び出し元CN、エンドユーザー、セッションID、証明書シリアル)を凍結します。新しい証明書は発行されず、許可は取り消され、revocation_poll_seconds以内にアクティブなセッションが強制終了されます。 | OPERATIONS |
| 封印付き実行 | ホストごとにオプトイン(sealed_exec)できます。すべてのセッションコマンドに署名者が署名したエンベロープを付与し、対象ホスト上でinfrabroker-shimが検証するため、ブローカーが侵害されてもコマンドごとの認可が維持されます。 | THREAT_MODEL gap 1 · deploy |
| 承認ブリッジ | approval-bridgeは保留中の承認をSlack(Socket Mode)に投稿し、許可/拒否ボタンを表示します。アウトバウンド専用のため、承認権限を持つものがインターネットに公開されることはありません。 | OPERATIONS |
| シークレットのマスキング | デフォルトで有効です。コマンド内に含まれる認証情報は、監査ログ、セッション記録、承認通知でマスキングされます(ベストエフォートのパターンマッチングであり、DLPではありません)。 | THREAT_MODEL gap 8 |
| RBAC | ブローカーCNグループ(mTLS)とエンドユーザーごとのOIDCグループに対応し、フェイルクローズで動作します。 | ARCHITECTURE |
| sudo/PTY | ホストごとに、ポリシーで制御される権限昇格(sudo -n)とPTY割り当てに対応します。 | ARCHITECTURE |
| Kubernetesブローカー | 操作ごとにバインドされたSAトークンを使用するk8s_*ツール、動詞/リソース/名前空間のデフォルト拒否ポリシー、ドライランに対応します。 | USAGE §10 |
| セッション記録 | shell/ptyセッションをASCIIcast v2(.cast)形式で記録し、session_idで索引付けします。 | USAGE §8 |
| チェーン化された監査ログ | 追記専用で、Ed25519署名とSHA-256チェーンを使用し、serialで関連付けます。 | USAGE §7 · API |
| ホットリロード | 再起動せずに、POST /v1/reloadまたはSIGHUPでsigner.jsonを再読み込み(および検証)します。 | OPERATIONS §3 |
既存のソリューションとの比較
SSH アクセス制御や AI エージェントの認証情報セキュリティに対応するツールはいくつかありますが、軽量なセルフホスト可能パッケージで infrabroker が目指す機能をすべて組み合わせたものはありません。
| 機能 | infrabroker | Teleport | Vault + SSH engine | StrongDM | ssh-mcp |
|---|---|---|---|---|---|
| メモリ内の一時証明書(ディスクに保存しない) | ✅ | ✅ | ✅ | ❌ | ❌ |
| ブローカーと署名サービスの分離 | ✅ | ✅ | 一部対応 | ❌ | ❌ |
| MCP ネイティブ(AI エージェント) | ✅ | ✅(2025) | ✅(2025) | ❌ | ✅ |
| MCP トランスポートでの OAuth2/OIDC | ✅ | ✅ | ✅ | ❌ | ❌ |
| コマンドごとのポリシーとドライラン(AI アクションのファイアウォール) | ✅ | ❌ | ❌ | ❌ | ❌ |
| AI コマンドに対する人間参加型の承認 | ✅ | ❌ | ❌ | ❌ | ❌ |
| エージェントごとの動作ガードレール(異常検知/レート制限) | ✅ | ❌ | ❌ | ❌ | ❌ |
| セッション記録(ASCIIcast v2、stdin+stdout+stderr) | ✅ | ✅ | ❌ | 一部対応 | ❌ |
| 暗号学的に連結された監査ログ | ✅ | ❌ | ❌ | 一部対応 | ❌ |
| 単一バイナリ/シンプルなセルフホスト | ✅ | ❌ | ❌ | ❌ | ✅ |
| CA キー用 HSM/KMS | ✅(AKV、ssh-agent/HSM) | ✅ | ✅ | — | — |
Teleport は最も近い商用製品です。短命の SSH 証明書、RBAC を備え、2025 年からは Secure MCP も提供しています。2026 年 1 月に発表された Agentic Identity Framework も、同じ脅威モデルを対象としています。違いは運用上の負荷です。Teleport には専用のコントロールプレーン・クラスター、記録プロキシ、Web UI が必要であり、Go バイナリ+署名サービスより桁違いに大規模です。
HashiCorp Vault SSH secrets engine は、HSM/KMS を完全にサポートする SSH CA であり、2025 年には独自の MCP サーバーも提供していますが、担うのは 署名 のみです。実行レイヤー(engine.go、session.go、MCP ツール)は自分で構築する必要があります。
StrongDM は認証情報を隠しますが、メモリ内で一時証明書を生成するのではなく、長期間有効なシークレットを保存するため、情報流出への耐性は弱くなります。Smallstep SSH CA は OIDC と統合された軽量な SSH CA(cmd/signer に近いもの)ですが、実行ブローカーも MCP レイヤーもありません。ssh-mcp は MCP 経由で LLM に SSH を公開しますが、静的な SSH キーを使用します。これは、このブローカーが防ぐまさにその脆弱性です。CyberArk PAM は同等の JIT 証明書アクセスを提供しますが、AI ワークロード向けではなく、人間のオペレーター向けのクローズドなエンタープライズプラットフォームです。
適した用途: MCP ネイティブな AI エージェントアクセス+メモリ内の一時証明書+独立した署名サービス+ASCIIcast 記録+連結された監査ログを、クラスターなしの小規模な Go バイナリ群で実現します。エンタープライズ機能(Web UI、マルチリージョン HA)はロードマップに含まれています(HANDOFF.md を参照)。
インストール
- ビルド済みバイナリ — 各リリースには、すべてのバイナリを含む
infrabroker_<ver>_{linux,darwin}_{amd64,arm64}.tar.gzと、本番環境で systemd を使う手順でdeploy/install.shが使用するインストーラー用 tarball(infrabroker-v<ver>.tar.gz)が含まれています。 - go install —
go install github.com/luisgf/infrabroker/cmd/infrabroker@latest(純粋な Go で CGO 不要。他のcmd/バイナリも同様です)。 - コンテナー —
ghcr.io/luisgf/infrabroker(docker または podman、マルチアーキテクチャ対応。エントリーポイントは stdio MCP フロントエンドです)。CONTAINERS.md を参照してください。おもちゃのホストを使ってフルスタックを実行する compose デモも含まれています:cd examples/compose && docker compose up --build -d(またはmake demo)。 - ソースからビルド — 以下のクイックスタートを参照してください。
ネイティブバイナリまたはコンテナーを使って、Claude Code に 1 行で登録できます:
claude mcp add infrabroker -- ~/bin/infrabroker serve-mcp -config /secure/path/config.json
claude mcp add infrabroker -- docker run -i --rm -v /secure/path:/config \
ghcr.io/luisgf/infrabroker -config /config/config.json
クイックスタート
最速の方法(ローカル、単一バイナリ): QUICKSTART.mdでは、1つのバイナリと1つのconfig.jsonを使って、git cloneから最初のssh_executeまで10分以内で進められます。署名サービスもPKIも不要です。以下の手順では、完全なリモートスタック(分離された署名サービス)をセットアップします。コンテナ化されたデモはインストールにあります。
# 1. Build (make injects the version from the git tag into every binary)
make install # → ~/bin/{infrabroker,signer,broker,broker-ctl,mcp-broker,...}
# or a single binary: make signer
# (plain `go build ./cmd/...` also works; it reports a dev-<commit> version)
# 2. Generate the local PKI + the two-service config (signer.json + config.json)
infrabroker init # writes pki/, signer.json, config.json; --force to redo
# add --import-ssh-config to import hosts from ~/.ssh/config (Include followed;
# ProxyJump/ProxyCommand hosts are skipped with a note), --register-mcp to run
# `claude mcp add` for you
# 3. Start the signing service (must be running before the broker)
./signer.sh start
# 4. Add a host and reload
broker-ctl host add --name web01 --addr web01.example.com:22 --user deploy --scan \
--groups prod-web --sudo
broker-ctl reload
# (--config is a global flag, before the subcommand; every binary takes --version)
broker-ctl --config /secure/path/signer.json host list
broker-ctl --version # short; add --verbose for build details
stdio MCPをクライアントに登録します。
// Claude Code — ~/.claude.json
"infrabroker": { "type": "stdio", "command": "/Users/<you>/bin/infrabroker",
"args": ["serve-mcp", "-config", "/secure/path/config.json"] }
// OpenCode — ~/.config/opencode/opencode.json (note: type "local", command is an array)
"infrabroker": { "type": "local",
"command": ["/home/<you>/bin/infrabroker", "serve-mcp", "-config", "/secure/path/config.json"],
"enabled": true }
ローカル署名モードと外部署名モード、リモートOAuthフロントエンド、ホストのフィールド、sudoers、PKI、broker-ctlを含む完全なセットアップについては、OPERATIONS.mdをご覧ください。モデル向けのツールの使用方法については、USAGE.mdをご覧ください。
API
完全なリファレンス:API.md。
| サービス | エンドポイント | 認証 | 説明 |
|---|---|---|---|
| 署名サービス | POST /v1/sign | mTLS | 一時的なSSH証明書をリクエストします |
| 署名サービス | GET /v1/hosts | mTLS | アクセス可能なホストを一覧表示します(呼び出し元のグループでフィルタリング) |
| 署名サービス | POST /v1/reload | mTLS | 再起動せずにsigner.jsonをホットリロードします |
| コントロールプレーン | POST /v1/sign, /v1/approvals/{id}, … | mTLS | 転送と人間による承認 |
| Broker HTTP | POST /v1/ssh_run | mTLS | 1回限りのSSHコマンドを実行します |
| MCP HTTP | /.well-known/oauth-protected-resource | なし | OAuth2ディスカバリー(RFC 9728) |
| MCP HTTP | Streamable HTTP | OIDC Bearer | MCPツール |
セキュリティ
セキュリティ体制、すなわち信頼境界、多層防御(RBAC、コマンドポリシー、承認ゲート、ガードレール、送信元アドレス/TTLの固定、連鎖監査、デフォルトで有効なシークレットの秘匿化)、および明示的な非目標(mode=execセッションはブローカーによる事前チェックを受けますが、ホストがsealed_execを有効にしない限りホスト側では強制されません。KRLはありません。シークレットの秘匿化は保証ではなく、ベストエフォートの正規表現マッチングです。…)については、THREAT_MODEL.mdに記載されています。
脆弱性の報告については、SECURITY.mdをご覧ください。CIでは、すべてのプッシュとPRでgofmt、go vet、go test -race、govulncheckを実行します。
テスト
make test # go test -race ./... (cert build, policy/RBAC/sudo/PTY, hops, …)
bash lab/run_signer_lab.sh # external signer: broker without ca_key + policy + denial
bash lab/run_mcp_lab.sh # bastion + target (ProxyJump) MCP scenario
bash lab/run_lab.sh # HTTP/mTLS frontend
ライセンス
Copyright (C) 2026 Luis González Fernández.
このプログラムはフリーソフトウェアです。Free Software Foundationが公開するGNU General Public License v3.0の条件に基づき、再配布および変更が可能です。このプログラムは有用であることを期待して配布されていますが、いかなる保証もありません。全文についてはLICENSEをご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。