Agent 安全治理清单:权限、密钥、沙箱、网络与审计日志
AI Agent 一旦拥有文件读写、命令执行、浏览器操作和数据库查询能力,它就不再是普通聊天机器人,而是一个能改变系统状态的自动化执行者。本文给出一份团队可直接使用的 Agent 安全治理清单,覆盖权限、密钥、沙箱、网络、审批和审计。
一、安全原则
团队级 Agent 安全治理建议遵守 5 条原则:
| 原则 | 说明 |
|---|---|
| 最小权限 | Agent 只能访问完成任务所需的最小文件、命令和系统 |
| 默认拒绝 | 未显式允许的操作默认禁止 |
| 高风险审批 | 删除、部署、迁移、外发数据必须人工确认 |
| 全程审计 | 每次工具调用、命令输出、diff、审批都要可回放 |
| 可撤销 | 任务必须能暂停、终止、回滚或人工接管 |
二、权限模型
2.1 RBAC 角色设计
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 最常见的风险是“顺手改了不该改的文件”。
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 表示只读 |
四、命令执行策略
命令策略要同时看命令本身和运行上下文。
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 不应该直接看到长期密钥。推荐使用短期令牌和运行时注入:
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 访问网络的风险被低估得最多。建议默认禁止私网访问和任意外发。
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七、审批流程图
flowchart TD
A["Agent 请求工具调用"] --> B{"是否命中 deny"}
B -->|是| C["拒绝并记录审计事件"]
B -->|否| D{"是否命中高风险策略"}
D -->|否| E["自动执行"]
D -->|是| F["暂停任务并请求审批"]
F --> G{"审批结果"}
G -->|通过| H["带审批上下文执行"]
G -->|拒绝| I["任务退回或终止"]
E --> J["记录工具调用和输出"]
H --> J八、审计日志
审计日志不要只存“谁执行了命令”,还要存决策过程。
{
"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 才能进入真实研发流程,而不是停留在个人实验阶段。