mcpField
B
Bulwark

Bulwark

本地服务
github.com安全435 周前更新

关于 Bulwark

Bulwark 是面向 AI Agent 的治理层,位于 Agent 与外部工具之间,适用于需要统一管控工具访问和追踪操作的团队。它通过策略评估、内容检查、凭据注入与审计日志管理 MCP 和 HTTP 调用。

主要功能

  1. 01基于 YAML 的工具访问策略
  2. 02凭据加密存储与调用时注入
  3. 03请求和响应内容扫描及脱敏
  4. 04防篡改审计日志
  5. 05会话管理与速率限制

适用场景

  1. 01限制 Agent 对破坏性工具操作的访问
  2. 02在调用链中检测并遮蔽密钥和个人信息
  3. 03审查会话记录并验证审计日志
  4. 04通过 HTTP 代理治理非 MCP 客户端

MCP 相关

Bulwark 可作为 MCP 网关,以 stdio 或 Streamable HTTP 接收 MCP 客户端调用,并将其转发至上游服务。它会评估策略、检查内容、注入凭据并记录工具调用。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"bpolania-bulwark": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"BULWARK_CONFIG",
"-e",
"BULWARK_SESSION_TOKEN",
"ghcr.io/bpolania/bulwark:v0.2.0"
],
"env": {
"BULWARK_CONFIG": "<BULWARK_CONFIG>",
"BULWARK_SESSION_TOKEN": "<BULWARK_SESSION_TOKEN>"
}
}
}
}
启动命令docker run -i --rm -e BULWARK_CONFIG -e BULWARK_SESSION_TOKEN ghcr.io/bpolania/bulwark:v0.2.0
需要配置的环境变量
BULWARK_CONFIGPath to bulwark.yaml configuration file
BULWARK_SESSION_TOKEN密钥Session token for operator authentication (bwk_sess_...)

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
ocighcr.io/bpolania/bulwark:v0.2.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Bulwark

面向 AI Agent 的开源治理层。

Bulwark 位于 AI Agent 与外部工具之间,负责执行策略、管理凭据、检查内容并维护完整的审计记录。一套策略即可管理所有 Agent,包括 Claude Code、OpenClaw、Codex,以及任何 MCP/HTTP 客户端。

为什么选择 Bulwark?

AI Agent 功能强大,却缺乏治理。它们可以访问任何工具、泄露任何凭据,而且不留下审计记录。Bulwark 可以解决这些问题:

  • 策略执行 — 基于 YAML 的规则控制 Agent 可使用哪些工具,支持 glob 模式、基于范围的优先级和热重载
  • 凭据管理 — Agent 永远不会看到真实密钥。Bulwark 在最后一刻注入凭据,并使用 age 加密静态数据
  • 内容检查 — 扫描请求和响应中的密钥、PII 和提示词注入,并自动拦截或脱敏
  • 审计日志 — 每项操作都会记录在具备防篡改能力的 SQLite 数据库中,并使用 blake3 哈希链
  • 速率限制 — 按会话、操作员、工具或全局设置令牌桶速率限制,并通过预算强制执行进行成本跟踪
  • 原生支持 MCP — 可用作 MCP 网关或 HTTP 正向代理。每个工具调用响应都包含治理元数据

安装

# Homebrew (macOS / Linux)
brew install bpolania/tap/bulwark

# Docker
docker pull ghcr.io/bpolania/bulwark

# From source
git clone https://github.com/bpolania/bulwark.git
cd bulwark && cargo build --release

快速开始:通过 GitHub 对 Claude Code 进行治理

本指南将 Claude Code 通过 Bulwark 连接到 GitHub。每次工具调用都会经过策略评估、审计和凭据注入——整个过程约需 5 分钟。

前提条件: 已安装 Claude Code,拥有 GitHub 个人访问令牌,并安装 Node.js/npm(用于 GitHub MCP 服务)。

1. 初始化并验证
bulwark init my-project && cd my-project
bulwark doctor

doctor 会运行 9 项诊断检查。检查结果都应通过。

2. 存储 GitHub 令牌
bulwark cred add github-token --type bearer_token
# Prompts for the token — hidden input, encrypted with age at rest

在绑定文件中配置凭据与工具的绑定,让 Bulwark 知道应在 GitHub 工具调用时注入此令牌。

3. 配置上游 GitHub 服务

编辑 bulwark.yaml:

mcp_gateway:
  upstream_servers:
    - name: github
      command: "npx"
      args: ["-y", "@modelcontextprotocol/server-github"]
      env:
        GITHUB_PERSONAL_ACCESS_TOKEN: "${GITHUB_TOKEN}"

policy:
  policies_dir: "./policies"
  hot_reload: true

audit:
  enabled: true

inspect:
  enabled: true
  inspect_requests: true
  inspect_responses: true

确保在 shell 中设置了 GITHUB_TOKEN(export GITHUB_TOKEN=ghp_...)。

4. 编写策略
cat > policies/base.yaml << 'EOF'
metadata:
  name: quickstart-policy
  scope: global

rules:
  - name: allow-reads
    description: "Allow all read operations"
    match:
      actions: ["read_*", "get_*", "list_*", "search_*"]
    verdict: allow
    priority: 10

  - name: allow-github-writes
    description: "Allow creating issues, comments, PRs"
    match:
      tools: ["github__*"]
      actions: ["create_*", "update_*"]
    verdict: allow
    priority: 10

  - name: block-destructive
    description: "Block all delete and force-push operations"
    match:
      actions: ["delete_*", "force_push_*"]
    verdict: deny
    priority: 20
    message: "Destructive operations are blocked by policy"

  - name: default-deny
    match: {}
    verdict: deny
    priority: -100
    message: "No policy explicitly allows this action"
EOF

bulwark policy validate
5. 创建会话并连接 Claude Code
# Create a session (--ttl is in seconds: 28800 = 8 hours)
bulwark session create --operator $(whoami) --agent-type claude-code --ttl 28800
# → Token: bwk_sess_7f3a...

export BULWARK_SESSION="bwk_sess_7f3a..."   # paste your actual token

# Register Bulwark as an MCP server in Claude Code
claude mcp add --transport stdio bulwark \
  --env BULWARK_SESSION=$BULWARK_SESSION \
  -- bulwark mcp start
6. 使用 Claude Code——现在已受治理

启动 Claude Code。GitHub 工具会以命名空间形式显示,例如 github__list_issues、github__create_issue 等。

试试看:

“列出我仓库中未关闭的问题”

打开另一个终端:

bulwark audit tail
22:01:03  github__list_issues   ✓ allow   3ms  (allow-reads)

每次调用都会记录判定结果、匹配的规则和耗时。现在试试具有破坏性的操作:

“删除问题 #1”

22:02:01  github__delete_issue  ✗ deny    <1ms (block-destructive)

操作已拦截,耗时不到 1 毫秒——策略评估在内存中完成。Agent 会收到结构化错误,说明是哪条规则拒绝了该操作。

刚才发生了什么

Claude Code 连接的是 Bulwark,而不是直接连接 GitHub。每次工具调用时,Bulwark 都会验证会话、扫描密钥和 PII、评估策略、注入真实的 GitHub 令牌、扫描响应,并记录防篡改审计事件。Agent 的使用体验不变,底层则实现了全面治理。

深入了解

内容检查 — 13 种内置模式可扫描 AWS 密钥、GitHub 令牌、私钥、PII 和提示词注入。在内容到达 Agent 之前就会进行脱敏。

bulwark inspect rules
bulwark inspect scan --text "my key is AKIAIOSFODNN7EXAMPLE"

策略重放 — 在部署策略更改前,基于真实审计历史预览其影响:

bulwark policy test --dir ./new-policies/ --since 1h

审计取证 — 重建会话时间线并验证哈希链:

bulwark session inspect <session-id>
bulwark audit verify
bulwark audit export --since 24h --format json

HTTP 代理模式 — 对于非 MCP Agent,Bulwark 可作为带 TLS 拦截功能的正向代理运行:

bulwark proxy start
bulwark ca export   # trust the CA in your HTTP client

架构

┌─────────────┐     ┌──────────────────────────────────────────────┐     ┌──────────────┐
│             │     │                  Bulwark                      │     │              │
│  AI Agent   │────>│  Session > Inspect > Policy > Inject > Proxy │────>│  Upstream    │
│  (Claude,   │<────│  <── Audit <── Inspect <── Response <─────── │<────│  Tool/API    │
│   Codex,    │     │                                              │     │              │
│   custom)   │     └──────────────────────────────────────────────┘     └──────────────┘
└─────────────┘

集成模式

模式传输方式适用场景
MCP 网关(stdio)stdio/JSON-RPCClaude Code、OpenClaw、任何 MCP 客户端
MCP 网关(HTTP)Streamable HTTP远程 Agent、MCP 注册表、多 Agent 场景
HTTP 代理HTTP/HTTPSCodex、curl、任何 HTTP 客户端

策略示例

# policies/base.yaml
metadata:
  name: my-policy
  scope: global

rules:
  - name: allow-reads
    verdict: allow
    priority: 10
    match:
      actions: ["read*", "get*", "list*"]

  - name: block-destructive-in-prod
    verdict: deny
    priority: 100
    match:
      actions: ["delete*", "drop*"]
    conditions:
      environments: ["production"]

  - name: default-deny
    verdict: deny
    match: {}

完整的策略集(初创公司、企业、开发、多 Agent)请参见 examples/policies/。

命令行界面

bulwark init <path>              # Scaffold a new project
bulwark proxy start              # Start HTTP/HTTPS proxy
bulwark mcp start                # Start MCP gateway (stdio)
bulwark mcp serve                # Start MCP gateway (HTTP)
bulwark doctor                   # Diagnose setup issues (9 checks)
bulwark status                   # Health dashboard
bulwark policy validate          # Validate policy files
bulwark policy test --dir <path> # Test policies against audit log
bulwark session create|list|revoke|inspect
bulwark cred add|list|remove|test
bulwark audit search|tail|stats|export|verify
bulwark inspect scan|rules       # Content inspection
bulwark ca export|path           # CA certificate management
bulwark completions <shell>      # Shell completions (bash/zsh/fish)

Documentation

Development

git clone https://github.com/bpolania/bulwark.git
cd bulwark
cargo build --workspace
cargo test --workspace          # 487 tests
cargo clippy --workspace --all-targets -- -D warnings
Project Structure
crates/
  cli/        # CLI binary and commands
  proxy/      # HTTP/HTTPS forward proxy with TLS MITM
  mcp/        # MCP governance gateway
  config/     # Configuration loading and types
  policy/     # YAML policy engine with hot-reload
  vault/      # Credential storage and session management
  audit/      # Tamper-evident audit logging
  inspect/    # Content inspection (secrets, PII, injection)
  ratelimit/  # Token-bucket rate limiter and cost tracker
  common/     # Shared types and error definitions

License

Apache 2.0. See LICENSE.

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。