DEV Community

韩

Posted on

【5月5日】Coding Agent Harness:99%开发者不知道的AI编程Agent安全护盾 🔥

如果你觉得有用,请留言 — 我每条必读。


【5月5日】Coding Agent Harness:99%开发者不知道的AI编程Agent安全护盾 🔥

先说一个让你后背发凉的数字:目前绝大多数 AI 编程 Agent 都是以 root 权限运行在系统中,拥有完整文件系统权限,直接执行大模型生成的任何代码——没有任何安全边界

今天要介绍的这个 GitHub 开源项目 Coding Agent Harness,用 Rust 写了一个专门给 AI 编程 Agent 用的沙箱执行环境,近 4000 GitHub Stars,但知道它的人少之又少。

让我们来看看 5 个连官方文档都没写清楚的安全模式。


模式一:沙箱代码执行 —— 那层缺失的防护

大多数开发者的做法(危险)

# 危险:直接执行
result = agent.execute(code_string)
Enter fullscreen mode Exit fullscreen mode

用 Harness 的正确做法

from harness import AgentHarness, Policy

policy = Policy()
policy.allow_filesystem("/tmp/agent-workspace")  # 只能在 /tmp
policy.allow_network(False)                       # 禁止网络
policy.max_execution_time = 60                   # 最长60秒
policy.max_tokens = 8192                         # 限制输出

harness = AgentHarness(policy=policy)
result = harness.execute(agent_code)

print(f"安全执行完成: {result.status}")
Enter fullscreen mode Exit fullscreen mode

为什么重要:这个策略在 Rust 运行时层面强制执行,即使攻击者突破了 Python 层,Rust 沙箱依然可以终止并记录违规。


模式二:工具权限范围控制 —— 没人配置的精细化权限

被忽视的宝藏功能:Harness 有比任何 MCP 服务商都细粒度的权限体系,但绝大多数开发者直接 allow_all=True 就完事了。

from harness import ToolScope, PolicyBuilder

# 正确做法:最小权限原则
policy = (
    PolicyBuilder()
    .allow_tool("read_file", path_pattern="**/*.py")      # 只能读 .py
    .allow_tool("write_file", path_pattern="/tmp/output/**")  # 只能写这个目录
    .allow_tool("execute_bash", timeout=30,
                allowed_commands=["python3", "git", "ruff"])
    .deny_tool("delete_file")    # 禁止删除
    .deny_tool("network_request",
               exceptions=["localhost:8080"])
    .build()
)
Enter fullscreen mode Exit fullscreen mode

关键洞察:可以精确到文件路径模式——Agent 能读 .py 但不能读 .env,能写 /tmp 但不能碰你的 home 目录。


模式三:执行审计日志 —— 默认关闭的隐藏超能力

被忽视的真相:Harness 会自动记录每次工具调用、每次文件访问、每次代码执行到不可篡改的审计日志。绝大多数开发者从来没配置过,导致违规行为悄悄溜走。

from harness import AgentHarness, AuditLogger
import json

# 启用审计日志 — 默认是关闭的!
logger = AuditLogger(
    backend="file",
    path="/var/log/agent-audit/audit.jsonl",
    redact_sensitive=True,   # 自动抹除敏感信息
    log_level="verbose"
)

harness = AgentHarness(
    policy=policy,
    audit_logger=logger,
    on_violation="log_and_reject"  # 或 "terminate"
)

# 事后分析违规记录:
with open("/var/log/agent-audit/audit.jsonl") as f:
    for line in f:
        entry = json.loads(line)
        if entry.get("violation"):
            print(f"⚠️  {entry['timestamp']}: {entry['violation_type']}")
            print(f"   工具: {entry['tool']}, 路径: {entry.get('resource', 'N/A')}")
Enter fullscreen mode Exit fullscreen mode

隐藏超能力:这些日志可以接入 SIEM 系统,检测 AI Agent 行为异常,同时满足代码审查追溯的合规要求。


模式四:多 Agent 隔离 —— Google A2A 协议没告诉你的安全真相

Google 的 A2A 协议现在很火(Hacker News 450分),但几乎没人讨论 Agent 互相通信时的安全问题。

用 Harness,可以把多个 Agent 运行在完全隔离的隔舱里:

from harness import Compartment, CompartmentalizedHarness
from harness.policies import PolicyBuilder

# 为不同 Agent 创建隔离隔舱
code_review = Compartment(
    name="code-reviewer",
    policy=(
        PolicyBuilder()
        .allow_tool("read_file", path_pattern="**/*.py")
        .allow_tool("execute_bash", allowed_commands=["pytest", "ruff"])
        .build()
    ),
    resource_limit_mb=512,
)

security_scan = Compartment(
    name="security-scanner",
    policy=(
        PolicyBuilder()
        .allow_tool("read_file", path_pattern="**/*")
        .allow_tool("execute_bash", allowed_commands=["semgrep", "bandit"])
        .allow_network(True)
        .build()
    ),
    resource_limit_mb=1024,
)

harness = CompartmentalizedHarness()
harness.register(code_review)
harness.register(security_scan)

review_result = harness.run("code-reviewer", task=review_task)
scan_result = harness.run("security-scanner", task=scan_task)
# 两个 Agent 内存空间完全隔离,Rust 级别保证
Enter fullscreen mode Exit fullscreen mode

这是 A2A 对话中缺失的一环——A2A 处理通信,Harness 处理安全边界。


模式五:实时 Token 预算强制 —— 省钱的隐藏福利

被忽视的好处:Harness 可以在 Agent 级别、会话级别、任务级别强制 Token 预算,防止 LLM 成本悄悄失控。

from harness import AgentHarness, TokenBudget

budget = TokenBudget(
    max_input_tokens=50000,
    max_output_tokens=10000,
    cost_limit_usd=0.50,      # 硬性成本上限
    on_limit="graceful_stop"  # 或 "terminate", "warn"
)

harness = AgentHarness(
    policy=policy,
    token_budget=budget,
    llm_provider="openai",
    model="gpt-4o"
)

result = harness.execute(task)
print(f"已用 Token: {result.tokens_consumed}")
print(f"成本: ${result.cost_usd:.4f}")
print(f"预算余额: ${budget.remaining():.4f}")
Enter fullscreen mode Exit fullscreen mode

结合 Rust 级别的强制执行,Token 预算无法被绕过,就算 Agent 试图操纵自己的执行上下文也不行。Python 方案给不了你这个保证。


数据来源


核心洞察

AI Agent 生态正在为 Agent 通信建立漂亮的协议(A2A、MCP),但在 Agent 安全方面严重落后。Coding Agent Harness 是少数几个从运行时层面解决这个问题的项目。

上面的模式不是杞人忧天——而是运维成熟度的体现。如果你现在部署 AI Agent 到生产环境而没有这些边界,一道提示词注入就能让你出大事。


延伸阅读


讨论时间

你在用什么方式保护你的 AI Agent? 留言告诉我——我特别想知道:

  • 你是怎么处理多 Agent 通信安全问题的?
  • 生产环境里遇到过提示词注入吗?
  • 你的审计流水线是怎么设计的?

每条留言我都会看,也会回复。如果这篇文章帮你省了调试时间,转给需要它的同事吧。

Top comments (0)