安全

🔵 Agent OS 中的 auth、隔离、密钥和审计是如何设计的。


15.1 访问配置 — 汇总表

所有身份验证/授权和密钥集中在一处(详情见对应章节):

控制内容 设置位置 类型 章节
管理员令牌(bearer) auth.admin_tokens — имя → токен 或 {token, templates} YAML §15.2
来自 env 的令牌 在 auth.admin_token_env 中命名的变量(例如 AGENT_OS_ADMIN_TOKEN),格式 имя=токен env §15.2
Web 登录密码 auth.users — логин → пароль 或 {password, templates} YAML §15.2
角色(按模板限定范围) 令牌/用户的 templates: [...] YAML §15.3
LLM 提供商密钥 provider.api_key / DEEPSEEK_API_KEY / AGENT_OS_API_KEY YAML/env §15.4
最终用户身份 auth.web_user_secret_env(HMAC) env §15.8
入站 webhook 令牌 inbound.token_env env §15.7
工作流 webhook 令牌 triggers.webhook.token_env env §15.7
cron/webhook sink 令牌 notify[].token_env env §15.7
Telegram 机器人令牌 telegram.token_env(在 agent.yaml 中) env §15.4
VK 社区令牌 vk.token_env(在 agent.yaml 中) env §15.4
Яндекс Messenger 机器人令牌 yandex_messenger.token_env(在 agent.yaml 中) env §15.4
IMAP / SMTP 密码 email.imap_password_env、smtp.password_env env §15.4
代理主机限制 proxy.allow_hosts YAML §15.6
TLS(证书/密钥) AGENT_OS_TLS_CERT / AGENT_OS_TLS_KEY env §15.5
操作审批(approval) approval.required_tools + approval: 在 tool.yaml 中 YAML §15.10
命令:成员资格和授权 logging.team_db_path + teams.gated_tools + OIDC 组 YAML §45

总体原则:密钥值 — 仅在 .env 中;YAML 中只写 env 变量的名称(token_env / password_env)。令牌和密码本身绝不 被记录到日志。


15.2 管理 API 的身份验证

受保护的端点(/v1/agents*、/v1/sessions*、/v1/budgets、/v1/cron、 /v1/workflows*、/v1/dashboard、/v1/users*、/v1/memory*、……)接受 Authorization: Bearer <токен>(API 客户端)或 cookie agentos_session (/login 之后的浏览器)。

拒绝时的行为:如果 auth 已配置,但没有任何凭据被允许 — 管理 API fails closed(对所有请求返回 401)。没有令牌和用户时 — 开放 (dev 模式)。详情见 §8.3。

15.3 基于角色的访问(RBAC)

令牌或 web 用户可以按模板限定范围 — 这是 限定范围的操作员:

auth:
  admin_tokens:
    drom-op:
      token: "<token>"
      templates: [drom-agent]        # принципал видит только эти шаблоны
  users:
    drom-viewer:
      password: "<password>"
      templates: [drom-agent]

完整令牌(裸 имя → токен)= 完全访问。工作流还会 声明自己的 templates — 限定范围的操作员只能启动其 范围内的那些(§12.4)。

与操作员 RBAC 分开的是面向最终用户的命令访问: 团队中的成员资格以及对模板/工具/路由的授权 (无提权)。参见 §45「命令与访问」。

15.4 密钥处理

15.5 TLS / HTTPS

设置 AGENT_OS_TLS_CERT 和 AGENT_OS_TLS_KEY(PEM 路径)— 服务器将启动 HTTPS。否则 — 普通 HTTP(例如在终止 TLS 的反向代理之后)。

15.6 代理的 SSRF 防护

/proxy 和 /proxy/content 在每一次重定向上阻止私有、loopback、link-local 和 reserved 范围(包括 169.254.169.254)。 proxy.allow_hosts 额外限制主机(精确匹配或 子域);为空 = 任意公共主机。仅 http/https,端口 80/443。

15.7 Webhook 的身份验证

15.8 数据隔离

15.9 审计

15.10 操作审批(human-in-the-loop)

敏感操作(支付、扣款、群发、CRM 中的更改)可以通过 内核中的强制审批进行门控 — 代理无法绕过它(包括 通过 prompt injection)。由谁决定 — 通过 approver: any | end_user | operator | admin 配置;操作员的决定连同其名称写入审计 (ApprovalResolved 在 events.db 中)。详见 23-approvals.md。