Zing 论坛

正文

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

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

AI安全零信任架构Cedar策略容器沙箱MITM代理最小权限原则AI Agent策略执行
发布时间 2026/04/16 06:44最近活动 2026/04/16 06:48预计阅读 17 分钟
Strait:为AI Agent构建零信任安全边界的策略执行平台
1

章节 01

导读 / 主楼:Strait:为AI Agent构建零信任安全边界的策略执行平台

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

2

章节 02

背景

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\ncedar\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\ncedar\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\ncedar\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_FILENODE_EXTRA_CA_CERTSREQUESTS_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\nbash\nstrait launch --observe -- ./my-agent\n\n\n在观察模式下,所有操作都被允许,但会被完整记录到observations.jsonl。这让你能够在不影响Agent正常运行的前提下,了解它实际需要哪些权限。\n\n### 策略生成(Generate)\n\nbash\nstrait generate observations.jsonl\n\n\n基于观察日志,Strait自动生成Cedar策略,覆盖Agent实际执行的所有操作。动态路径会被智能处理——例如,/repos/our-org/12345-uuid/pulls会被折叠为/repos/our-org/*/pulls。\n\n### 警告模式(Warn)\n\nbash\nstrait launch --warn policy.cedar -- ./my-agent\n\n\n在正式执行前,可以先以警告模式运行。策略会被加载并评估,违规行为会被记录但不会阻止操作。这让你能够验证策略的准确性,避免误杀合法操作。\n\n### 执行模式(Enforce)\n\nbash\nstrait launch --policy policy.cedar -- ./my-agent\n\n\n最终,相同的Agent在相同的容器环境中运行,但现在有了策略强制执行。已知操作成功通过,任何超出策略范围的新操作都会被拒绝。\n\n## 实时策略更新与调试\n\nStrait支持在不重启会话的情况下更新网络策略:\n\nbash\n# 修改policy.cedar中的HTTP规则\nstrait session replace-policy --session <SESSION_ID> ./policy.cedar\n\n\nstrait session watch提供了一个彩色实时事件查看器,让你能够观察容器的完整生命周期:\n\n- 容器启动和停止事件\n- 策略重载事件\n- 终端尺寸调整事件\n- 网络请求观察事件\n\n这种可见性对于调试Agent行为和验证策略效果至关重要。\n\n## 应用场景与价值\n\nStrait的设计使其适用于多种场景:\n\nAgent沙箱化:为AI Agent提供最小权限的API、文件和工具访问,防止提示注入导致的数据泄露或越权操作。\n\nCI/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行为的变化,策略可以迭代更新,安全与功能同步演进。

3

章节 03

补充观点 1

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\n1. 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\n2. 主机端控制平面\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\nCedar策略:统一的三域控制\n\nCedar是AWS开源的一种用于编写和执行授权策略的语言,Strait将其扩展到了AI Agent的三个关键访问域:\n\n网络访问控制\n\ncedar\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\ncedar\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\ncedar\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_FILENODE_EXTRA_CA_CERTSREQUESTS_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\nbash\nstrait launch --observe -- ./my-agent\n\n\n在观察模式下,所有操作都被允许,但会被完整记录到observations.jsonl。这让你能够在不影响Agent正常运行的前提下,了解它实际需要哪些权限。\n\n策略生成(Generate)\n\nbash\nstrait generate observations.jsonl\n\n\n基于观察日志,Strait自动生成Cedar策略,覆盖Agent实际执行的所有操作。动态路径会被智能处理——例如,/repos/our-org/12345-uuid/pulls会被折叠为/repos/our-org/*/pulls。\n\n警告模式(Warn)\n\nbash\nstrait launch --warn policy.cedar -- ./my-agent\n\n\n在正式执行前,可以先以警告模式运行。策略会被加载并评估,违规行为会被记录但不会阻止操作。这让你能够验证策略的准确性,避免误杀合法操作。\n\n执行模式(Enforce)\n\nbash\nstrait launch --policy policy.cedar -- ./my-agent\n\n\n最终,相同的Agent在相同的容器环境中运行,但现在有了策略强制执行。已知操作成功通过,任何超出策略范围的新操作都会被拒绝。\n\n实时策略更新与调试\n\nStrait支持在不重启会话的情况下更新网络策略:\n\nbash\n修改policy.cedar中的HTTP规则\nstrait session replace-policy --session <SESSION_ID> ./policy.cedar\n\n\nstrait session watch提供了一个彩色实时事件查看器,让你能够观察容器的完整生命周期:\n\n- 容器启动和停止事件\n- 策略重载事件\n- 终端尺寸调整事件\n- 网络请求观察事件\n\n这种可见性对于调试Agent行为和验证策略效果至关重要。\n\n应用场景与价值\n\nStrait的设计使其适用于多种场景:\n\nAgent沙箱化:为AI Agent提供最小权限的API、文件和工具访问,防止提示注入导致的数据泄露或越权操作。\n\nCI/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行为的变化,策略可以迭代更新,安全与功能同步演进。