AI Agent 一旦拥有文件读写、命令执行、浏览器操作和数据库查询能力,它就不再是普通聊天机器人,而是一个能改变系统状态的自动化执行者。本文给出一份团队可直接使用的 Agent 安全治理清单,覆盖权限、密钥、沙箱、网络、审批和审计。

Agent 安全治理清单:权限、密钥、沙箱、网络与审计日志

AI Agent 一旦拥有文件读写、命令执行、浏览器操作和数据库查询能力,它就不再是普通聊天机器人,而是一个能改变系统状态的自动化执行者。本文给出一份团队可直接使用的 Agent 安全治理清单,覆盖权限、密钥、沙箱、网络、审批和审计。

一、安全原则

团队级 Agent 安全治理建议遵守 5 条原则:

原则 说明
最小权限 Agent 只能访问完成任务所需的最小文件、命令和系统
默认拒绝 未显式允许的操作默认禁止
高风险审批 删除、部署、迁移、外发数据必须人工确认
全程审计 每次工具调用、命令输出、diff、审批都要可回放
可撤销 任务必须能暂停、终止、回滚或人工接管

二、权限模型

2.1 RBAC 角色设计

yaml
roles:
  viewer:
    can:
      - task.read
      - event.read
      - report.read

  developer:
    can:
      - task.create
      - task.run
      - task.cancel
      - diff.read

  reviewer:
    can:
      - task.approve_low_risk
      - pull_request.create
      - report.comment

  admin:
    can:
      - policy.update
      - secret.bind
      - task.approve_high_risk
      - audit.export
权限 说明
task.run 允许启动 Agent 执行
task.approve_low_risk 审批低风险扩大范围,例如多改几个文件
task.approve_high_risk 审批部署、迁移、外部发送等高风险动作
policy.update 修改安全策略
secret.bind 绑定密钥到项目或任务

三、文件系统策略

Agent 最常见的风险是“顺手改了不该改的文件”。

yaml
filesystem_policy:
  mode: scoped
  allow_read:
    - "src/**"
    - "tests/**"
    - "package.json"
    - "README.md"
  allow_write:
    - "src/features/billing/**"
    - "tests/features/billing/**"
  require_approval_write:
    - "migrations/**"
    - "infra/**"
    - ".github/workflows/**"
  deny:
    - ".env"
    - ".npmrc"
    - "id_rsa"
    - "**/*.pem"

参数说明

参数 说明
allow_read Agent 可以读取的路径
allow_write Agent 可以直接写入的路径
require_approval_write 可以写,但必须人工审批
deny 永远禁止访问的路径
mode scoped 表示按任务范围授权,readonly 表示只读

四、命令执行策略

命令策略要同时看命令本身和运行上下文。

python
import shlex

DENY_PATTERNS = [
    ["rm", "-rf"],
    ["chmod", "777"],
    ["curl", "|", "sh"],
    ["docker", "system", "prune"],
]

APPROVAL_PREFIXES = [
    ["git", "push"],
    ["kubectl", "apply"],
    ["alembic", "upgrade"],
    ["terraform", "apply"],
]


def classify_command(command: str) -> str:
    tokens = shlex.split(command)
    joined = " ".join(tokens)

    for pattern in DENY_PATTERNS:
        if " ".join(pattern) in joined:
            return "deny"

    for prefix in APPROVAL_PREFIXES:
        if tokens[: len(prefix)] == prefix:
            return "approval_required"

    if tokens[:2] in [["npm", "test"], ["pytest", "-q"], ["ruff", "check"]]:
        return "allow"

    return "approval_required"

五、密钥治理

Agent 不应该直接看到长期密钥。推荐使用短期令牌和运行时注入:

yaml
secret_policy:
  injection: runtime_only
  ttl_minutes: 30
  expose_to_model: false
  redact_patterns:
    - "sk-[A-Za-z0-9]{20,}"
    - "ghp_[A-Za-z0-9]{30,}"
    - "AKIA[0-9A-Z]{16}"
  allowed_secret_refs:
    - "github_readonly_token"
    - "staging_database_url"
  denied_secret_refs:
    - "production_database_url"
参数 说明
injection 密钥注入方式,建议只在工具运行时注入
ttl_minutes 临时凭证有效期
expose_to_model 是否允许密钥文本进入模型上下文,生产环境应为 false
redact_patterns 日志和输出中的脱敏规则
allowed_secret_refs 可绑定到任务的密钥引用

六、网络策略

Agent 访问网络的风险被低估得最多。建议默认禁止私网访问和任意外发。

yaml
network_policy:
  default: deny
  allow_hosts:
    - "api.github.com"
    - "registry.npmjs.org"
    - "pypi.org"
  deny_cidr:
    - "10.0.0.0/8"
    - "172.16.0.0/12"
    - "192.168.0.0/16"
  upload_requires_approval: true
  max_response_bytes: 5242880

七、审批流程图

mermaid
flowchart TD
  A["Agent 请求工具调用"] --> B{"是否命中 deny"}
  B -->|是| C["拒绝并记录审计事件"]
  B -->|否| D{"是否命中高风险策略"}
  D -->|否| E["自动执行"]
  D -->|是| F["暂停任务并请求审批"]
  F --> G{"审批结果"}
  G -->|通过| H["带审批上下文执行"]
  G -->|拒绝| I["任务退回或终止"]
  E --> J["记录工具调用和输出"]
  H --> J

八、审计日志

审计日志不要只存“谁执行了命令”,还要存决策过程。

json
{
  "event_type": "tool_call_blocked",
  "task_id": "task-1042",
  "actor": "agent",
  "requested_by": "dev-li",
  "tool": "shell",
  "command": "curl https://example.com/install.sh | sh",
  "policy_result": "deny",
  "matched_rule": "deny_pipe_to_shell",
  "risk_level": "high",
  "timestamp": "2026-06-04T10:20:00Z"
}

九、团队落地清单

  • 建立角色和权限矩阵
  • 每个项目配置独立安全策略
  • 禁止长期密钥进入模型上下文
  • 所有高风险命令进入审批流程
  • 默认禁止访问生产数据库
  • 默认禁止 Agent 任意上传文件
  • 每个任务保留完整工具调用轨迹
  • 定期复盘被拒绝和被审批的操作

总结

Agent 安全治理不是为了“限制 Agent”,而是为了让团队敢用 Agent。权限、密钥、沙箱、网络、审批和审计六层防线搭起来以后,Agent 才能进入真实研发流程,而不是停留在个人实验阶段。