
信頼できないワークロードのためのegressファイアウォール。
CI ジョブ、AI コーディングエージェント、サンドボックス化されたコンテナは、任意の外部リクエストを送信できます。侵害された依存関係、プロンプトインジェクション、悪意のあるビルドステップは、シークレットの持ち出し、外部への通信、リバースシェルの確立を行う可能性があります。ほとんどのチームは、ワークロードから何が出ていっているのかについてまったく可視性を持っておらず、ましてやそれを止める手段などありません。
iron-proxy は、信頼できないワークロードとインターネットの間に位置する、組み込み DNS サーバーを備えた MITM 外向きプロキシです。ネットワーク境界でデフォルト拒否を強制するため、ワークロードは明示的に許可したドメインにのみ到達できます。本物のシークレットがサンドボックスに入ることはありません。ワークロードはプロキシトークンを使用し、iron-proxy が外向き通信時に本物の認証情報に差し替えるため、侵害されたワークロードが持ち出せるのはプロキシの外では無価値なトークンだけです。
単一バイナリ。単一の YAML 設定。
169.254.169.254、fd00:ec2::254、fd20:ce::254)とループバックはデフォルトで拒否されます。proxy.upstream_deny_cidrs または IRON_PROXY_UPSTREAM_DENY_CIDRS で上書きできます。HTTP_PROXY、HTTPS_PROXY、SOCKS5 設定によるプロキシ設定をネイティブにサポートするツール向けの、オプションのトンネルリスナー。SET ROLE を注入し、SQL AST 走査によってクライアントによるロール変更の試み(SET ROLE、set_config('role', ...)、DO ブロックなど)を拒否する、オプションのリスナー。アプリケーションが共有サービスアカウントユーザーとして接続する場合に、PostgreSQL の行レベルセキュリティと組み合わせてテナントごとのデータ分離を実現します。(使用する場合)PgBouncer を pool_mode = session で実行する必要があります — トランザクションまたはステートメントのプールモードはクエリ間でバックエンドを暗黙的に再バインドし、ポリシーを無効化してしまいます。詳細は docs.iron.sh を参照してください。CI パイプライン、GitHub Actions、AI エージェント(Claude Code、Cursor、Codex)、および完全には信頼していないコードを実行するあらゆる環境向けに構築されています。
Docker イメージは Docker Hub で入手でき、Linux/macOS(amd64/arm64)向けのビルド済みバイナリは GitHub Releases にあります。
またはソースからビルドします:```bash go build -o iron-proxy ./cmd/iron-proxy
## クイックスタート```bash
cd examples/docker-compose
docker compose up
これにより iron-proxy と、プロキシ経由で 5 つのリクエストを送信するデモクライアントが起動します。ログを確認して、許可されたリクエスト、ブロックされたリクエスト、シークレットが書き換えられたリクエストを確認してください:```bash docker compose logs proxy
すべてのリクエストは構造化されたJSON監査エントリを生成します:```json
{
"host": "httpbin.org",
"method": "GET",
"path": "/headers",
"action": "allow",
"status_code": 200,
"duration_ms": 142,
"request_transforms": [
{ "name": "allowlist", "action": "continue" },
{
"name": "secrets",
"action": "continue",
"annotations": { "swapped": [{ "secret": "OPENAI_API_KEY", "locations": ["header:Authorization"] }] }
}
]
}
拒否されたリクエストには rejected_by フィールドが含まれ、WARN レベルでログに記録されます。完全なスキーマについては
監査ログ形式 を参照してください。
iron-proxy は、提供された CA によって署名されたリーフ証明書をオンザフライで生成することで TLS を終端します。クライアントコンテナはこの CA を信頼する必要があります。```bash
mkdir -p certs
openssl genrsa -out certs/ca.key 4096
openssl req -x509 -new -nodes
-key certs/ca.key
-sha256 -days 3650
-subj "/CN=iron-proxy CA"
-addext "basicConstraints=critical,CA:TRUE"
-addext "keyUsage=critical,keyCertSign"
-out certs/ca.crt
### 2. Docker ネットワークを作成する
iron-proxy はコンテナが DNS を向けられるよう固定 IP を必要とします:```bash
docker network create --subnet=172.20.0.0/24 iron-proxy
シークレットを含む env ファイルを作成します(これはバージョン管理に含めないでください):```bash echo "OPENAI_API_KEY=sk-real-key" > .env
## 検出
### 検出の仕組み
`detect` コマンドは、ファイルシステムをスキャンして、既知のAIエージェント設定ファイル、MCPサーバー設定、およびエージェント関連のアーティファクトを探します。
```bash
# 現在のディレクトリをスキャン
agent-audit detect
# 特定のパスをスキャン
agent-audit detect --path /path/to/project
# 詳細出力付きでスキャン
agent-audit detect --verbose
# 検出結果をJSONとして出力
agent-audit detect --format json
| カテゴリ | 例 |
|---|---|
| エージェント設定 | .cursor/mcp.json, claude_desktop_config.json, .continue/config.json |
| MCPサーバー | mcp.json, mcp_config.json, .mcp/ ディレクトリ |
| エージェント指示 | .cursorrules, CLAUDE.md, .github/copilot-instructions.md |
| ツール定義 | tools.json, functions.json, agent.yaml |
| プロンプトファイル | prompts/, system_prompt.txt, instructions.md |
[+] Scanning: /home/user/project
[+] Found 3 agent configuration(s):
1. .cursor/mcp.json
Type: MCP Server Configuration
Agent: Cursor
Servers: 2
2. CLAUDE.md
Type: Agent Instructions
Agent: Claude Code
Size: 4.2 KB
3. .github/copilot-instructions.md
Type: Agent Instructions
Agent: GitHub Copilot
Size: 1.8 KB
audit コマンドは、検出された設定に対してセキュリティチェックを実行し、脆弱性、設定ミス、およびリスクのあるパターンを特定します。
# 現在のディレクトリを監査
agent-audit audit
# 特定のパスを監査
agent-audit audit --path /path/to/project
# 重大度でフィルタリング
agent-audit audit --severity high
# 特定のルールを除外
agent-audit audit --exclude-rule MCP001
# 特定のルールのみを実行
agent-audit audit --include-rule MCP001,MCP002
# 出力形式
agent-audit audit --format json
agent-audit audit --format sarif
agent-audit audit --format markdown
| ルールID | 重大度 | 説明 |
|---|---|---|
| MCP001 | 高 | 認証なしでMCPサーバーが公開されている |
| MCP002 | 高 | MCPサーバー設定にハードコードされたシークレット |
| MCP003 | 中 | 安全でないトランスポート(HTTP)を使用するMCPサーバー |
| MCP004 | 中 | 過度に広い権限を持つMCPサーバー |
| MCP005 | 低 | 検証なしでユーザー入力を受け入れるMCPサーバー |
| AGT001 | 高 | エージェント指示にプロンプトインジェクションパターンが含まれている |
| AGT002 | 中 | エージェントが機密ファイルにアクセスできる |
| AGT003 | 中 | エージェントが制限なしでシェルコマンドを実行できる |
| AGT004 | 低 | エージェント指示に安全ガードレールが欠如している |
| TOL001 | 高 | ツール定義が任意のコード実行を許可している |
| TOL002 | 中 | ツール定義に入力検証が欠如している |
| TOL003 | 低 | ツール定義にレート制限が欠如している |
[+] Auditing: /home/user/project
[+] Found 3 agent configuration(s)
[+] Running 12 rules...
[HIGH] MCP001: MCP server exposed without authentication
File: .cursor/mcp.json
Line: 5
Server: filesystem-server
Detail: Server 'filesystem-server' is configured with no authentication
and exposes the entire home directory.
[HIGH] MCP002: Hardcoded secret in MCP server configuration
File: .cursor/mcp.json
Line: 12
Server: api-server
Detail: API key found in plaintext: "sk-****...****"
[MEDIUM] AGT002: Agent can access sensitive files
File: CLAUDE.md
Line: 8
Detail: Agent instructions reference ~/.ssh and ~/.aws directories.
[+] Summary: 2 high, 1 medium, 0 low
[+] Exit code: 1
| コード | 意味 |
|---|---|
| 0 | 問題は見つかりませんでした |
| 1 | 高重大度の問題が見つかりました |
| 2 | 中重大度の問題が見つかりました |
| 3 | 低重大度の問題が見つかりました |
| 4 | スキャンエラーが発生しました |
report コマンドは、監査結果から包括的なレポートを生成します。
# Markdownレポートを生成
agent-audit report --format markdown --output report.md
# JSONレポートを生成
agent-audit report --format json --output report.json
# SARIFレポートを生成(CI/CD統合用)
agent-audit report --format sarif --output report.sarif
# HTMLレポートを生成
agent-audit report --format html --output report.html
| 形式 | ユースケース |
|---|---|
markdown | ドキュメント、プルリクエストコメント |
json | プログラムによる処理、カスタムツール |
sarif | GitHub Code Scanning、CI/CD統合 |
html | 人間が読めるレポート、ダッシュボード |
# .github/workflows/agent-audit.yml
name: Agent Security Audit
on: [push, pull_request]