随着人工智能应用从单纯回答问题的语言模型转变为能够执行诸如运行命令、安装软件包和读取文件等实际任务的“代理”(Agents),一个新的安全挑战应运而生。这些代理通常基于从互联网获取的数据运行,被视为具有访问敏感数据权限的“不受信任的代码”(Untrusted Code),除非进行精确隔离,否则在生产环境中运行它们将带来巨大的风险。
什么是 OpenShell 项目?
作为由 NVIDIA 发起并隶属于 CNCF 的沙箱(Sandbox)项目,OpenShell 是一个旨在为这些代理提供隔离运行环境(Runtime)的解决方案。该项目依赖于在隔离环境之外运行的受信任“监督者”(Supervisor)的概念,它根据通过 YAML 文件预定义的策略来决定代理可以访问的内容。OpenShell 提供了四个基本的控制级别:
- 文件系统(Filesystem):通过使用 Landlock 技术,指定代理可以读取或写入的路径,从而防止访问敏感的系统文件。
- 进程(Process):代理作为非 root 用户(Non-root)运行,并应用 seccomp 协议来限制系统调用。
- 网络(Network):默认阻止外部流量,同时可以根据包含可执行文件名、主机、端口甚至 HTTP 请求方法的精确规则来允许流量。
- 敏感数据(Credentials):代理看不到真实的 API 密钥,而是看到“占位符”(Placeholders),监督者仅在需要时且仅针对授权实体将其替换为实际密钥。
与 Kubernetes 的集成及高级功能
与那些试图绕过 Kubernetes 架构的解决方案不同,OpenShell 依赖于 SIG Apps 的 Agent Sandbox 项目。代理在系统中表现为熟悉的 Kubernetes 对象,例如 Pods、Services 和 Secrets。这里的核心优势在于 OpenShell 提供第七层(L7)可见性的能力;传统的网络策略(NetworkPolicy)只允许 Pod 访问特定站点,而 OpenShell 可以确定是否允许 curl 命令从 GitHub 读取数据,但禁止创建(POST)任何新的问题(Issues)。
技术对比:OpenShell 对比 Agent Substrate
CNCF 的另一个项目 Agent Substrate 也在该领域崭露头角,两者之间的根本区别在于设计哲学:
- OpenShell:专注于安全性和精确控制。对于需要访问生产系统并要求严格的每个请求策略(Per-request policy)的代理来说,它是理想的选择。
- Agent Substrate:专注于扩展性和降低成本。它依赖于暂停(Suspending)空闲的代理,而不是为每个代理分配完整的 Pod,这使其适用于需要高密度和低成本的模型。
技术预测表明,未来这两个项目有可能进行整合,其中 OpenShell 提供控制策略,而 Substrate 提供隔离效率和扩展性。
为什么这一进展对平台工程师很重要?
OpenShell 代表了人工智能的灵活性与云计算安全严格性之间不可或缺的桥梁。对于 Kubernetes 管理员来说,仅仅隔离传统的容器(Containers)已不再足够;还必须控制容器内部“智能代理”的行为。通过与 Kyverno 等工具集成,工程师可以强制实施准入控制(Admission Control)策略,确保代理仅在特定且受信任的镜像(Images)下运行,同时为处理能力和内存设定资源限制,从而确保人工智能代理不会成为安全威胁的源头或过度消耗集群(Cluster)资源。