XMBSMDSJ

2026

< Back to index

Nvidia OpenShell

架构

flowchart TB
    subgraph CP["控制面 Gateway"]
        API["API / 认证"]
        Policy["策略下发"]
        Creds["Credentials subsystem<br/>凭据解析"]
        Compute["Compute subsystem<br/>沙盒生命周期"]
        Relay["Supervisor relay 协调"]
    end

    Vault[("密钥库")]
    Backend["模型后端 / 外部 SaaS"]

    subgraph SB["沙盒 Sandbox"]
        direction TB
        Supervisor["Supervisor (root)<br/>隔离 / 注入凭据 / relay"]
        Proxy["Policy Proxy<br/>目标 / 二进制身份 / SSRF / TLS-L7 / 凭据注入"]
        IR["Inference router<br/>inference.local"]
        Agent["受限 Agent (non-root)<br/>Landlock / Seccomp / netns"]
    end

    API --> Compute
    Policy -->|"策略 + Provider Profile"| Supervisor
    Creds --> Vault
    Creds -->|"运行时解析凭据"| Supervisor
    Compute -->|"启动工作负载 + 沙盒身份"| Supervisor
    Supervisor -->|"逆向 session"| Relay

    Supervisor --> Proxy
    Supervisor -->|"placeholder 环境变量"| Agent
    Agent -->|"egress 强制经过"| Proxy
    Proxy -->|"解析 placeholder 注入真实凭据"| Backend
    Agent -.->|"https://inference.local"| IR
    IR --> Backend

OpenShell 安全模型

运行时模型

启动过程

  1. Compute Runtime 启动工作负载,注入沙盒身份、回调端点等
  2. Supervisor 加载安全策略和运行时设置
  3. 准备文件系统访问、进程限制、网络命名空间、凭据解析和推理路由
  4. 启动 policy proxy 和本地 SSH server
  5. 逆向建立 supervisor session 回到 gateway,用于 exec、log push、config poll 等
  6. 以受限用户身份启动 agent

隔离层

凭据

  1. 环境变量注入:凭据存在 Gateway,Supervisor 运行时获取。注入 Agent 和 SSH 子进程环境变量,环境变量值为 placeholder
  2. placeholder:请求默认带 placeholder,例如 Authorization: Bearer ,由 proxy 在允许的目标端点上解析替换

二进制身份绑定与凭据注入限制

凭据注入并非对所有进程开放,而是绑定到具体的二进制身份。只有策略中显式声明的二进制发出的请求,才会在出站时被注入真实凭据。

策略来源(Provider Profile):

运行时身份解析(Policy Proxy):

  1. proxy 拦截 CONNECT 请求,根据连接的临时端口在 /proc/<entrypoint_pid>/net/tcp 中定位 socket inode
  2. 扫描进程树找到持有该 socket 的 PID(fork/fd 传递可能多个,归属不一致则 fail-closed 拒绝)
  3. 读取 /proc/<pid>/exe symlink 获取内核解析的规范二进制路径——绝不使用 /proc/<pid>/cmdline(argv[0]),因为它可被任意进程伪造
  4. 沿 /proc/<pid>/status 的 PPid 链收集祖先二进制路径(如 claude 派生 node)
  5. 同时收集 cmdline 中的脚本路径(仅用于脚本检测,不作为授权信号)

完整性校验(TOFU):

策略匹配(OPA / Rego):

底层技术:

自定义工具凭据注入示例

以 Tavily Search API 为例,展示如何将外部 SaaS API 集成到 OpenShell providers:

关键对象:

工作流程:

  1. 定义 Provider Profile 配置文件
  2. 导入 Profile 到 OpenShell
  3. 使用真实凭据创建 Provider Instance
  4. 沙盒挂载 Provider 时,OpenShell 自动注入 placeholder 环境变量
  5. Policy Proxy 在出站请求中解析 placeholder 并注入真实凭据

该模式适用于任何使用 API key 或 OAuth token 的 SaaS 服务。