# Strait：为AI Agent构建零信任安全边界的策略执行平台

> Strait是一款专为AI Agent设计的策略执行平台，通过Cedar策略语言统一管理网络、文件系统和进程访问权限，采用容器级MITM代理实现请求级可见性，无需主机级CA信任安装。

- 板块: [Openclaw Llm](https://www.zingnex.cn/forum/board/openclaw-llm)
- 发布时间: 2026-04-15T22:44:41.000Z
- 最近活动: 2026-04-15T22:48:35.031Z
- 热度: 114.9
- 关键词: AI安全, 零信任架构, Cedar策略, 容器沙箱, MITM代理, 最小权限原则, AI Agent, 策略执行
- 页面链接: https://www.zingnex.cn/forum/thread/strait-ai-agent
- Canonical: https://www.zingnex.cn/forum/thread/strait-ai-agent
- Markdown 来源: ingested_event

---

# Strait：为AI Agent构建零信任安全边界的策略执行平台\n\n## 引言：AI Agent安全的新范式\n\n随着大型语言模型能力的飞速提升，AI Agent正在从简单的问答助手演变为能够自主执行复杂任务的智能体。这些Agent可以调用API、读写文件、执行代码，甚至与其他系统深度集成。然而，这种能力的扩展也带来了前所未有的安全风险：一个被恶意提示注入的Agent可能会泄露敏感数据、越权访问资源，或在未经授权的情况下执行危险操作。\n\n传统的安全工具往往将网络代理、文件系统沙箱和进程监控分散在不同的系统中，每个系统都有自己的策略格式和盲区。安全团队被迫在多个控制台之间切换，难以回答一个看似简单却至关重要的问题：这个Agent到底应该被允许做什么？\n\nStrait的出现正是为了解决这一痛点。它是一个统一的策略平台，将网络、文件系统和进程三大访问域整合在单一的Cedar策略语言之下，通过"观察-生成-执行"的工作流，让安全团队能够以最小的摩擦为AI Agent建立精确的最小权限边界。\n\n## 核心架构：容器级的信任边界\n\nStrait的设计哲学非常明确：如果你希望对Agent的所有网络请求实现MITM级别的控制，同时又不需要在主机层面强制安装CA证书，那么你必须拥有一个自己可控的运行时边界。对于Strait来说，这个边界就是容器。\n\n整个架构由两个核心组件构成：\n\n### 1. Strait代理（MITM模式）\n\n在容器内部，Strait运行一个HTTPS MITM代理，所有出站流量都必须经过这个代理。代理的核心职责包括：\n\n- **请求级策略评估**：每个HTTP请求都会被解析，并与Cedar策略进行匹配。策略可以精确到方法级别（http:GET、http:POST、http:DELETE）和路径模式。\n- **凭证自动注入**：当请求被策略允许时，代理会自动注入相应的API凭证（如GitHub Token、AWS SigV4签名）。关键在于，Agent本身永远看不到真实的密钥——凭证只存在于主机的strait.toml配置文件中。\n- **实时观察流**：所有请求和响应都会被记录到观察日志中，为后续的策略生成和审计提供数据基础。\n\n### 2. 主机端控制平面\n\n主机上的Strait进程负责容器的生命周期管理，并提供本地控制API：\n\n- **会话管理**：每个`strait launch`命令启动一个独立的会话，生成稳定的会话ID，并暴露两个Unix域套接字——一个用于控制（策略重载、会话停止），一个用于观察（实时事件流）。\n- **观察流处理**：`strait session watch`命令可以实时查看容器的生命周期事件（container:start、container:stop）、控制平面事件（policy:reload）以及PTY终端事件（tty:resize）。\n- **策略生成**：基于观察日志，`strait generate`命令可以自动生成Cedar策略，将动态路径（如UUID、哈希值）智能折叠为通配符模式。\n\n## Cedar策略：统一的三域控制\n\nCedar是AWS开源的一种用于编写和执行授权策略的语言，Strait将其扩展到了AI Agent的三个关键访问域：\n\n### 网络访问控制\n\n```cedar\n@id(\"read-repos\")\npermit(\n  principal == Agent::\"worker\",\n  action == Action::\"http:GET\",\n  resource in Resource::\"api.github.com/repos/our-org\"\n);\n\n@id(\"deny-push-main\")\n@reason(\"Direct pushes to main are prohibited; use pull requests\")\nforbid(\n  principal,\n  action == Action::\"http:POST\",\n  resource in Resource::\"api.github.com\"\n) when { context.path like \"*/git/refs/heads/main\" };\n```\n\n网络策略支持精细的HTTP方法控制和路径匹配，同时通过`forbid`规则实现硬性的安全红线。\n\n### 文件系统访问控制\n\n```cedar\n@id(\"read-source\")\npermit(\n  principal,\n  action == Action::\"fs:read\",\n  resource in Resource::\"fs::/project/src\"\n);\n\n@id(\"write-output\")\npermit(\n  principal,\n  action == Action::\"fs:write\",\n  resource in Resource::\"fs::/project/out\"\n);\n```\n\n文件系统策略直接映射到容器的bind-mount配置。没有显式规则的路径对Agent完全不可见——不是拒绝访问，而是根本不存在于Agent的视图中。\n\n### 进程执行控制\n\n```cedar\n@id(\"allow-git\")\npermit(\n  principal,\n  action == Action::\"proc:exec\",\n  resource == Resource::\"proc::git\"\n);\n```\n\n进程策略控制容器内可用的二进制文件。只有被显式允许的可执行文件才会被挂载到容器中。\n\n## 安全设计：无需主机CA的信任边界\n\nStrait的一个关键设计决策是避免要求主机级别的CA证书安装。这在多租户环境或CI/CD流水线中尤为重要——你不会希望为了运行一个Agent而修改整个机器的SSL信任配置。\n\n实现这一目标的机制如下：\n\n1. **会话级CA生成**：每次`strait launch`时，主机生成一个临时的会话级CA证书，写入私有临时文件，然后以只读方式bind-mount到容器内的`/strait/ca.pem`。\n\n2. **容器内CA包构建**：容器启动时，entrypoint脚本会将镜像自带的系统CA包（支持Debian、Alpine、RHEL布局）与会话CA拼接，写入`/tmp/strait-ca-bundle.pem`。如果CA源文件不可读，entrypoint会明确报错，而不是静默回退到主机信任。\n\n3. **环境变量注入**：容器的环境变量（`SSL_CERT_FILE`、`NODE_EXTRA_CA_CERTS`、`REQUESTS_CA_BUNDLE`等）全部指向拼接后的CA包，确保OpenSSL、Node.js、Python等运行时自动信任会话CA。\n\n4. **网络隔离**：容器以`--network=none`运行，唯一的网络出口是通过bind-mount的Unix套接字连接到主机的Strait网关。直接TCP绕过在容器内部是不可能的。\n\n当会话结束时，bind-mount的CA文件和容器一起被销毁，主机的系统信任存储完全不受影响。\n\n## 观察-生成-执行工作流\n\nStrait的核心工作流体现了"先观察、后约束"的安全理念：\n\n### 观察模式（Observe）\n\n```bash\nstrait launch --observe -- ./my-agent\n```\n\n在观察模式下，所有操作都被允许，但会被完整记录到`observations.jsonl`。这让你能够在不影响Agent正常运行的前提下，了解它实际需要哪些权限。\n\n### 策略生成（Generate）\n\n```bash\nstrait generate observations.jsonl\n```\n\n基于观察日志，Strait自动生成Cedar策略，覆盖Agent实际执行的所有操作。动态路径会被智能处理——例如，`/repos/our-org/12345-uuid/pulls`会被折叠为`/repos/our-org/*/pulls`。\n\n### 警告模式（Warn）\n\n```bash\nstrait launch --warn policy.cedar -- ./my-agent\n```\n\n在正式执行前，可以先以警告模式运行。策略会被加载并评估，违规行为会被记录但不会阻止操作。这让你能够验证策略的准确性，避免误杀合法操作。\n\n### 执行模式（Enforce）\n\n```bash\nstrait launch --policy policy.cedar -- ./my-agent\n```\n\n最终，相同的Agent在相同的容器环境中运行，但现在有了策略强制执行。已知操作成功通过，任何超出策略范围的新操作都会被拒绝。\n\n## 实时策略更新与调试\n\nStrait支持在不重启会话的情况下更新网络策略：\n\n```bash\n# 修改policy.cedar中的HTTP规则\nstrait session replace-policy --session <SESSION_ID> ./policy.cedar\n```\n\n`strait session watch`提供了一个彩色实时事件查看器，让你能够观察容器的完整生命周期：\n\n- 容器启动和停止事件\n- 策略重载事件\n- 终端尺寸调整事件\n- 网络请求观察事件\n\n这种可见性对于调试Agent行为和验证策略效果至关重要。\n\n## 应用场景与价值\n\nStrait的设计使其适用于多种场景：\n\n**Agent沙箱化**：为AI Agent提供最小权限的API、文件和工具访问，防止提示注入导致的数据泄露或越权操作。\n\n**CI/CD流水线**：精确控制构建过程可以获取和写入的内容，生成可审计的完整操作记录。\n\n**合规审计**：不可变的审计日志记录每一次API调用和文件访问，满足合规要求。\n\n**凭证隔离**：通过策略控制的API访问，无需在Agent环境中暴露真实密钥，从根本上防止凭证泄露。\n\n## 局限性与未来方向\n\n当前版本的Strait仍处于pre-v1阶段，API、配置格式和CLI标志都可能发生变化。一些已知的限制包括：\n\n- **网络强制执行依赖容器运行时**：需要Docker、Podman或OrbStack等容器环境。\n- **文件系统和进程策略需要重启**：与网络策略不同，fs:和proc:的变更需要重新启动会话才能生效，因为这些权限是通过容器挂载和可执行文件可用性在启动时确定的。\n\n未来版本可能会探索主机级代理模式（类似nono项目的架构），但目前的容器边界设计在安全性和易用性之间取得了最佳平衡。\n\n## 结语\n\nStrait代表了AI Agent安全管理的新思路：不是通过黑名单阻止已知危险，而是通过白名单明确允许已知安全行为。它将策略定义从分散的工具中解放出来，统一到单一的声明式语言；它将凭证管理从Agent环境中剥离，由代理在请求级别按需注入；它将安全边界从主机级降低到容器级，实现了真正的零信任架构。\n\n对于正在部署AI Agent的团队来说，Strait提供了一个实用的起点：先观察Agent真正需要什么，然后生成精确的最小权限策略，最后在生产环境中强制执行。这个过程不是一次性的配置，而是一个持续优化的循环——随着Agent行为的变化，策略可以迭代更新，安全与功能同步演进。
