【免费下载链接】OpenShellOpenShell is the safe, private runtime for autonomous AI agents.项目地址https://gitcode.com/gh_mirrors/op/OpenShell点击查看免费下载本文基于 OpenShell 仓库中 RFC 0005 的技术设计附录 technical-design.md系统讲解沙箱出口egress代理从“多入口各自为政”走向“共享授权 共享中继”边界的实现级设计包括EgressIntent/EgressDecision数据边界、协议强制protocol enforcement映射、Policy DNS 与透明 TCP 捕获状态机、nftables 边界、凭据注入时序、Supervisor 中间件钩子、协议处理器边界以及超时与资源归属表。读完后你可以理解 OpenShell 如何在不改变任何用户可见行为的前提下把 CONNECT、forward HTTP、本地服务、策略 DNS 等多种入口收敛到同一套策略求值与中继契约之上并能定位到仓库中对应的源码模块进行延伸阅读。一、现状运行时边界从run_networking说起RFC 明确指出当前网络启动边界是openshell-supervisor-network::run::run_networking。它负责构建策略本地上下文、等待策略二进制符号链接解析、创建身份缓存、写入 TLS CA、构建 TLS 状态、解析推理路由、挂载 provider 凭据与 token grant最后启动代理。Supervisor 中间件工作将在这一边界上扩展中间件注册表构建与重载行为。这一边界在仓库中真实存在。run.rs 顶部的模块文档注释写道Networking stack startup for the sandbox. Builds the network namespace (Linux), the CONNECT proxy with TLS L7 interception and wires the proxy to the caller-supplied denial-event channel.并且pub async fn run_networkingrun.rs 起正是网络栈的总入口返回一个 RAII 的Networkinghandle让代理任务在整个沙箱 supervisor 生命周期内保持存活。但设计附录强调这是有用的外层边界还不是代理适配器边界。代理内部仍需要EgressIntent与EgressDecision两层边界才能让 CONNECT、forward HTTP、本地路由以及未来的原生 TCP 捕获transparent TCP capture不重复策略求值与中继编排逻辑。第一个实现里程碑只接线现有表面后续里程碑向同一契约上添加新的适配器。二、共享数据边界EgressIntent 与 EgressDecision2.1 EgressIntent用户态“想做什么”的归一化描述EgressIntent是“用户态正在尝试做什么”的归一化描述应当承载入口传输类型entry transportCONNECT、forward HTTP、透明 TCP、本地 HTTP、策略 DNS或元数据环回metadata loopback请求的目标 host/port或捕获到的原始 IP/port由适配器/运行时收集的可选进程身份输入对 forward 代理流量的可选首个 HTTP 请求可选的本地服务路由策略代policy generation对策略 DNS / 透明 TCP 场景还有独立的 DNS 映射代mapping generation与关联句柄correlation handle。核心约束适配器负责构建 intent但适配器不应查询端点元数据、不应选择 TLS 模式、也不应选择中继relay——这些都归共享边界所有。这一设计在当前代码中已有雏形。egress.rs 的模块注释与 RFC 的意图一一对应Explicit proxy adapters normalize their protocol-specific request into anEgressIntent. Authorization then returns anEgressDecisionthat is consumed by destination validation and relay selection. Keeping these types independent of CONNECT and forward HTTP prevents policy behavior from drifting as more adapters are added.源码中的EgressTransport枚举egress.rs已包含Connect、ForwardHttp、TransparentTcp等变体与设计附录建议的EgressTransport完全吻合。2.2 EgressDecision授权结果一次物化、处处消费EgressDecision是被验证与中继代码消费的策略结果应当承载allow 或 deny一个用于所有策略派生字段的顶层策略代policy generation确定性的匹配策略标识符该策略是用户编写的、provider 派生的还是本地服务内部的确定性的匹配端点标识符与端点元数据进程身份可用性以及求值中实际使用的身份字段目标地址约束与允许的 IP 约束TLS 行为协议强制protocol enforcement凭据注入计划credential injection planSupervisor 中间件计划当配置了 HTTP 检查时创建固定到请求级 L7 求值器所需的 request-policy 选择日志上下文与拒绝原因。关键消费规则中继代码只读取这个 decision不应再次查询 OPA来获取端点元数据、TLS 模式、允许 IP、凭据行为、中间件选择或中继选择。长生命周期的 HTTP 中继仍然通过携带在RelayContext中的、代固定的 L7 求值器逐请求求值——那是请求级授权而不是端点的重新物化。未来原生协议处理器使用同样的模式用代固定的协议求值器做逐命令/逐查询决策。EgressDecision的字段组织在 egress.rs 中可见EndpointDecision结构在同一代策略快照内物化tls_mode、l7_route、destination目标验证计划、policy_configs、matched_endpoints与exact_declared_host等字段其from_authorization方法直接从crate::opa::EgressAuthorization提取印证了“同一代一次性物化”的设计。三、协议强制从策略 protocol 到中继行为协议强制值由端点策略导出完整映射如下策略 protocol强制级别中继行为省略 /tcpNoneL4 授权 字节中继可选 HTTP 嗅探用于凭据注入restHTTPHTTP 请求解析器 REST 规则外加可选的请求体与 WebSocket 文本帧凭据改写graphqlHTTPHTTP 请求解析器 GraphQL-over-HTTP 规则json-rpcHTTPHTTP 请求解析器 有界 JSON-RPC-over-HTTP 方法检查mcpHTTPHTTP 请求解析器 有界 MCP Streamable HTTP 方法/工具检查websocketHTTPHTTP 升级策略随后是 WebSocket 帧策略或 GraphQL-over-WebSocket 策略未来的redis、postgres、mysql等Protocol processor协议专用处理器负责帧处理framing、中间件钩子和消息循环两条重要约定protocol: tcp实际上是默认的 L4 模式不应运行原生协议处理器。避免用 “provider” 一词指代处理器概念因为在 OpenShell 中 provider 已经是凭据与路由领域的一等公民。具体的原生处理器将在共享派发契约之后落地。这一分层在仓库中对应l7模块的拆分l7/ 目录下分别有http.rs、rest.rs、graphql.rs、jsonrpc.rs、mcp.rs、websocket.rs、tls.rs、token_grant_injection.rs等文件与 RFC 主文档 README.md 中 “existing L7 relay is the behavioral prior art” 的表述一致——逐请求 HTTP 求值、GraphQL 解析、JSON-RPC/MCP 体检查、WebSocket 帧处理、请求体改写和 token grant 注入已经在这些中继边界之后运行。四、建议的 Rust 类型骨架附录给出的类型形状允许演化但边界应保持如下形态enum EgressTransport { Connect, ForwardHttp, TransparentTcp, PolicyDns, LocalHttp, MetadataLoopback, } struct EgressIntent { transport: EgressTransport, destination: RequestedDestination, process: ProcessIdentityEvidence, first_request: OptionParsedHttpRequest, local_route: OptionLocalRoute, correlation: OptionResolvedEndpointCorrelation, } struct EgressDecision { policy_generation: PolicyGeneration, outcome: PolicyOutcome, matched_policy: OptionMatchedPolicy, endpoint: OptionMatchedEndpoint, process: EvaluatedProcessIdentity, request_processing: RequestProcessingPlan, log_context: EgressLogContext, } enum ProcessIdentityEvidence { Available(ProcessIdentity), Unavailable(ProcessIdentityUnavailableReason), } enum ProcessIdentityUnavailableReason { EndpointOnlyMode, DeclaredRuntimeMode(RuntimeMode), UnsupportedPlatform, LookupFailed, } struct EvaluatedProcessIdentity { evidence: ProcessIdentityEvidence, fields_used: VecProcessIdentityField, } struct MatchedPolicy { id: PolicyId, source: PolicySource, } enum PolicySource { User, ProviderDerived, LocalService, } struct MatchedEndpoint { id: EndpointId, destination: DestinationValidationPlan, tls: TlsPolicy, enforcement: ProtocolEnforcement, } struct DestinationValidationPlan { address_authorization: AddressAuthorization, } enum AddressAuthorization { DefaultPublicOnly, ExplicitAllowedIps(VecIpNet), ExactDeclaredHost, ImplicitIpLiteral(IpAddr), TrustedGatewayAlias { expected_ip: IpAddr }, } struct RequestProcessingPlan { middleware: SupervisorMiddlewarePlan, credentials: CredentialInjectionPlan, } enum ProtocolEnforcement { None, Http(HttpL7Config), ProtocolProcessor(ProtocolProcessorConfig), } enum HttpL7Protocol { Rest, Graphql, JsonRpc, Mcp, Websocket, } struct HttpL7Config { protocol: HttpL7Protocol, path: EndpointPathScope, allow_encoded_slash: bool, enforcement_mode: L7EnforcementMode, websocket_credential_rewrite: bool, request_body_credential_rewrite: bool, websocket_graphql_policy: bool, graphql_max_body_bytes: usize, json_rpc_max_body_bytes: usize, mcp_strict_tool_names: bool, } struct CredentialInjectionPlan { static_placeholders: StaticPlaceholderPlan, token_grant: OptionTokenGrantPlan, } struct StaticPlaceholderPlan { http_target_query_header: bool, rest_request_body: bool, websocket_text_frames: bool, } struct TokenGrantPlan { provider_key: String, auth_style: TokenGrantAuthStyle, token_endpoint: String, } struct SupervisorMiddlewarePlan { stages: VecSupervisorMiddlewareStage, min_body_limit: Optionusize, registry_generation: PolicyGeneration, } struct SupervisorMiddlewareStage { policy_name: String, binding_id: String, operation: MiddlewareOperation, phase: MiddlewarePhase, order: i32, on_error: MiddlewareOnError, config: MiddlewareConfig, } enum MiddlewareOperation { HttpRequest, Future(String), } enum MiddlewarePhase { PreCredentials, Future(String), } struct RelayContext { decision: EgressDecision, request_policy: OptionPinnedRequestPolicy, protocol_policy: OptionPinnedProtocolPolicy, connector: UpstreamConnector, deadlines: RelayDeadlines, telemetry: RelayTelemetry, } struct ResolvedEndpointCorrelation { policy_generation: PolicyGeneration, mapping_generation: DnsMappingGeneration, mapping_id: DnsMappingId, synthetic_ip: IpAddr, } struct PinnedRequestPolicy { generation: PolicyGeneration, evaluator: TunnelPolicyEngine, } struct PinnedProtocolPolicy { generation: PolicyGeneration, evaluator: ProtocolPolicyEngine, }几个类型值得单独解释UpstreamConnector中继自有的拨号dial边界。它封装已验证的目标让中继或处理器只有在当前请求或协议策略允许之后才能打开上游连接。DestinationValidationPlan选择一种当前的目标验证模式。所有模式都保留控制平面端口与云元数据阻断默认模式和显式 IP 模式保留始终阻断回环、链路本地与未指定地址的检查。ImplicitIpLiteral只为显式声明的 IP host 合成TrustedGatewayAlias可以接受一个运行时发现的网关 IP但不成为通用的私有地址豁免。代一致性generation consistencypolicy_generation、可选固定的请求/协议求值器、端点元数据和中间件选择必须描述同一个策略快照。授权层断言每一个子物化sub-materialization都使用了该代。如果在中继启动前代发生了变化适配器收到的是“策略过期stale-policy拒绝”而不是混合了两个代的决策。五、进程身份可用性身份是证据不是可伪造的字符串进程身份是证据evidence而不是查找失败时可以凭空捏造的字符串Embedded 模式通常填充二进制、PID、祖先链、命令行路径和二进制哈希数据。当策略要求二进制身份时LookupFailed与UnsupportedPlatform保持拒绝deny。显式配置的 endpoint-only 运行时记录Unavailable(EndpointOnlyMode)并保持现有的 endpoint-only 策略行为。RFC 不把一个状态悄悄变成另一个状态也不改变 endpoint-only 的信任契约。未来有意缺失本地身份的独立/sidecar 运行时使用DeclaredRuntimeMode而非EndpointOnlyMode并向策略验证广播该能力。运行时契约必须定义二进制/路径谓词为不可用并在流量开始之前拒绝不兼容的策略除非后来被接受的策略设计规定了不同的 fail-closed 规则。Decision 必须记录身份可用性与所用字段使 OCSF 日志和 deny 响应能区分三种情形二进制策略拒绝、身份查找失败、以及有意的 endpoint-only 求值。测试必须证明一个空的合成exec.path无法满足在要求身份时的二进制范围规则。新增无身份部署模式或改变二进制谓词在 endpoint-only 模式下的行为需要后续运行时阶段的能力capability工作不能悄悄混进兼容性重构。六、现有模块归属与拟议清理设计附录给出了一张完整的“当前 owner → 当前职责 → 拟议清理”映射表是理解本次重构影响面的核心清单当前 owner当前职责拟议清理openshell-sandbox编排器、策略轮询循环、denial/activity 通道、元数据环回启动、network-only 生命周期保持编排角色避免把逐入口的代理策略决策嵌入其中openshell-supervisor-network::run网络启动与句柄成为 embedded 与未来 standalone 模式的稳定运行时 APIopenshell-supervisor-network::proxyCONNECT、forward HTTP、本地路由分发、目标验证、denial 渲染拆分为适配器、授权、目标、中继选择与适配器响应渲染openshell-supervisor-network::opa策略引擎与 Rego 查询返回确定性的EgressDecision数据而不是分离的策略查询与端点查询openshell-supervisor-network::l7REST、GraphQL、JSON-RPC、MCP、WebSocket、推理辅助、TLS、token grants保持在共享中继边界之后作为协议/中继实现openshell-supervisor-network::policy_localpolicy.local状态与路由建模为带显式限制和 proposal/wait 行为的本地适配器openshell-supervisor-middleware中间件注册表、内建、服务契约与链执行视为由EgressDecision选择的中继钩子依赖而不是适配器专属的策略逻辑openshell-supervisor-process::netnsnftables bypass 规则与命名空间辅助保持 bypass 执行的归属未来捕获规则与网络代理映射协调openshell-supervisor-process::bypass_monitornftables LOG 解析与 OCSF bypass 遥测保持 bypass 违规的遥测生产者角色openshell-core::secrets与 provider 凭据状态静态占位符来源与动态凭据元数据喂给凭据注入计划不得把密钥泄漏进决策日志对照仓库结构可以确认这些模块的真实位置openshell-sandbox位于 crates/openshell-sandbox网络模块位于 crates/openshell-supervisor-network进程模块位于 crates/openshell-supervisor-process中间件 crate 位于 crates/openshell-supervisor-middleware。其中policy_local对应 policy_local.rsopa对应 opa.rsproxy对应 proxy.rs 及其子模块目录含destination.rs、egress.rs、relay.rs与“拆分为适配器、授权、目标、中继选择”的拟议方向一致。七、Policy DNS 与已解析 TCP 状态查询驱动而非静态 hosts 快照Policy DNS 是查询驱动的query-driven不是静态/etc/hosts快照。完整状态机为 11 步策略加载时登记符合条件的原生 TCP 端点名称用户态发起 DNS 查询Policy DNS 检查归一化后的名称是否匹配一个“在当前策略代中其传输与协议契约允许经由 Policy DNS 走原生 TCP”的端点不合格的名称直接收到本地策略拒绝的 DNS 响应不向上游发起查询合格的名称通过受信任的上游 DNS 解析每一个应答地址都经过端点元数据与 SSRF 控制过滤适配器分配一个 supervisor 自有的合成 IPsynthetic IP创建一个 active mapping内容包括合成 IP、归一化名称、端点标识、允许端口、已验证的真实地址、策略代、独立的 DNS 映射代、不透明的 mapping ID 与过期时间适配器在把合成 IP 返回给用户态带有限 TTL之前原子地发布映射与捕获状态用户态随后调用connect(synthetic_ip:port)透明 TCP 恢复合成的原始目标并要求一个未过期、且允许端口包含所请求端口的精确映射针对与映射契约一致的策略代运行常规出口授权与中继选择连接器只拨号映射中钉住pinned的真实地址不在 connect 时独立重新解析名称。由此得到的若干关键不变量已解析端点存储resolved endpoint store是由策略合格查询产生的活跃状态由透明 TCP 连接消费。策略代与 DNS 映射代是两个独立值DNS 刷新可以在不重载策略的情况下替换映射策略重载可以使端点契约不再当前的映射失效。无映射的捕获连接、过期映射、端点/端口不匹配都 fail closed。无关的裸 IPbare-IP连接不能仅因为它碰巧命中映射存储中存在的真实 IP 就继承 Policy DNS 授权。合成 IP 是关联句柄correlation handle不是上游目标永远不能直接路由也不能在过期应答仍可能指向旧映射时被重新分配。映射是沙箱范围的而非进程范围的。进程身份在捕获的 TCP 连接被授权时独立查找与求值不用来关联 DNS 和 TCP——因为名称解析可能被缓存、委托给解析器辅助进程、或被另一进程消费同一进程解析的多个名称还可能共享同一个真实地址和端口。这一机制在仓库中已有落地痕迹。run.rs 中的TransparentRuntimeSetupLinux 目标持有了透明运行时的listeners、dns_udp、dns_tcp监听器与PolicyDnsRuntimeConfig其构造时通过advance_allocation_epoch推进一个启动范围的合成地址分配 epoch持久化在/run/openshell/policy-dns-epoch使得 supervisor 重启后缓存的地址会落在新安装的捕获范围之外——这正是第 7 步“原子发布映射与捕获状态”与“地址不得在过期窗口内复用”思想的工程实现。策略 DNS 的实现主体位于 policy_dns/ 子模块。八、nftables 边界bypass 执行与未来捕获的同一基座当前主干使用 nftables 而非 iptables 做沙箱网络 bypass 执行已安装的inet表放行到沙箱代理、回环、established/related 的流量然后拒绝并可选记录其他 TCP/UDP 流量。bypass monitor 读取这些日志行并发出 OCSF network 与 detection 事件。透明 TCP 捕获在后续特性阶段构建在同一 nftables 基座上约束如下捕获规则先于通用 bypass reject 规则运行捕获规则的作用域限定在 active 的合成 IP 与允许端口映射上映射与捕获规则的更新在适配器视角下是原子的直连外部 DNS 保持被阻断Policy DNS 是沙箱解析器DNS-over-HTTPS 仍是普通的、受策略控制的 HTTPS 出口reject/log 规则仍是不匹配 TCP/UDP 出口的回退VM 或 Podman driver 的 nftables 规则属于基础设施 NAT/隔离不是代理策略执行点。初始的 CONNECT/forward 重构不改变已安装的表这一节定义的是共享适配器与决策边界在透明捕获落地时必须支撑的消费者契约。九、端点选择与 OPA确定性授权与影子模式切换现状是匹配的策略名、L7 候选、首个 TLS/allowed_ips端点、精确声明 host 信号是通过相互独立的规则各自选出的。风险在于这些字段可能描述不同的匹配。目标形态是 OPA/Rego 通过一个确定性的授权结果返回策略与端点元数据。两条可接受的路径在加载或合并时拒绝reject重叠的端点元数据定义单一的确定性优先级键precedence key策略名与端点元数据都使用它。配套约束当所选端点需要元数据时元数据查询失败必须fail closed不能悄悄降级为 L4 行为顶层决策代必须与每一个策略派生字段匹配物化期间发生重载得到的是过期决策而不是混合代这个语义切换独立于 Rust 类型的引入新查询先以**影子模式shadow mode**与旧查询并行运行通过内部遥测记录审计安全的不一致mismatch保持旧执行不变等优先级规则被接受、不一致用例被理解后再以一个专门的变更切换权威结果并保留旧求值器足够长时间以支持即时回滚provider 派生的策略使用保留的规则名命名空间。gateway 与沙箱同步应阻止用户编写_provider_*规则policy.local的 proposal 表面也不应把 provider 派生规则暴露为可编辑的用户策略EgressDecision仍需标识 provider 派生的匹配以服务于日志与调试。十、凭据注入边界位置、槽位与 Token Grant凭据注入发生在policy allow 与 supervisor 中间件之后、上游写入之前的 HTTP/WebSocket 中继中时序为授权选择端点并计算凭据注入计划Supervisor 中间件在凭据可见之前对被准入的请求运行如果中间件替换了请求体中继重新解析体相关的协议输入并重新求值请求策略HTTP 中继只有在端点强制模式下请求仍为 allowed 时才解析凭据静态占位符值被解析并从日志中脱敏redact端点绑定的 token grant 获取或复用动态访问令牌最终的上游请求或 WebSocket 帧在写入前立即改写。L4-only HTTP 与 HTTP 检查两条路径都能注入凭据差别只在于 REST/GraphQL/WebSocket 策略是否在改写之前被求值。凭据改写槽位必须是显式的HTTP 系流量的请求目标request target、查询值与头REST 请求体仅当启用request_body_credential_rewrite时客户端到服务器的 WebSocket 文本帧仅当启用websocket_credential_rewrite时GraphQL-over-WebSocket 的连接/控制消息当它们承载于文本帧且端点启用了 WebSocket 改写路径时端点绑定 provider 凭据的 token grant 头。请求体改写仅限 REST缓冲有界的 UTF-8 文本体含 JSON、form-url-encoded、text/*重算Content-Length保留不含保留凭据标记的不支持体并在保留占位符无法安全解析时 fail closed。二进制 WebSocket 帧不被改写。Token grant 是动态凭据注入使用 provider 元数据请求 SPIFFE JWT-SVID交换为 OAuth2 访问令牌缓存令牌并注入Authorization: Bearer头或配置的自定义头。Token grant 失败应返回本地中继错误不得把请求转发到上游。一条重要的信任边界中间件变换后的内容在凭据视角下是不可信输入。外部中间件不得接收 OpenShell 托管的凭据也不应能合成新的、会被 OpenShell 解析成密钥的保留凭据占位符。除非未来某个钩子被显式定义为“仅内建且具备凭据能力”否则中继应在静态占位符改写与 token grant 注入之前对新生成的保留占位符 fail closed 或将其剥除。十一、Supervisor 中间件边界类型化中继钩子而非协议帧处理Supervisor 中间件是类型化的中继钩子typed relay hook不是协议帧处理的替代品。中继或协议处理器必须先解析足够的结构才能构造操作特定的中间件输入。V1 的操作是HTTP_REQUEST / PRE_CREDENTIALS完整流程为网络策略、目标验证与请求策略准入请求HTTP 中继从请求处理计划中选择中间件链中继在所选阶段的最小限制内缓冲请求体链以确定性顺序求值deny 在凭据注入或上游写入之前短路allow 可以替换请求体、添加受批准的头部、发出 findings 并向前传递元数据体变化时中继重新解析并重新求值体相关的请求策略输入变换后的请求只有在端点强制模式下重新求值被准入之后才进入凭据注入与上游写入。重新求值使用原始请求的方法、路径与查询因为 V1 中间件不能变更它们它从变换后的体中重新推导 GraphQL 操作、JSON-RPC 方法、MCP 方法或工具名。策略不匹配保留端点的 audit 或 enforce 行为而畸形或无法分类的变换后协议体在两种模式下都 fail closed因为中继已无法证明它将转发什么操作。中间件选择与匹配的端点策略相互独立它是按被准入的目标 host、顺序与绑定元数据选出的请求处理计划。决策边界必须用与端点选择相同的策略代来物化它防止长生命周期隧道把旧端点策略与新中间件注册表混在一起。V1 中间件可以检查 WebSocket 升级请求因为它们是 HTTP 请求但不检查升级后的 WebSocket 帧未来的帧钩子应作为独立操作如WEBSOCKET_MESSAGE / BEFORE_FORWARD由 WebSocket 中继所有。十二、协议处理器边界谁拥有消息循环协议处理器protocol processor运行在中继拥有的流上HTTP 解析把字节转为请求元数据求值请求策略在配置时运行HTTP_REQUEST / PRE_CREDENTIALS中间件钩子并循环处理 keep-alive 或 pipelined 请求JSON-RPC 与 MCP 处理是 HTTP L7 处理器在 HTTP 解析之后、上游转发之前解析有界的 JSON-RPC-over-HTTP 请求体。通用 JSON-RPC 策略匹配方法MCP 策略还可以匹配tools/call的工具名WebSocket 解析只在被允许的 HTTP 升级之后开始验证握手/帧流并在配置了凭据改写、传输消息策略、GraphQL-over-WebSocket 策略或压缩处理时拥有客户端到服务器文本帧检查原生 TCP 协议处理器按需读取客户端与上游流并拥有自己的消息循环协议处理器可以在拨号前拒绝、为服务器握手而拨号、或在整个会话中持续求值命令或查询处理器可以是树内in-tree的、中间件支撑的或混合形态——树内帧处理暴露类型化中间件操作用于内容求值。HTTP 与 WebSocket 中继持有代固定的请求求值器因为请求策略必须在长生命周期会话中持续有效。任何处理器都不重新物化端点、TLS、允许 IP、凭据或中间件选择——这避免了单独的“拨号策略枚举”每个处理器都知道哪个协议里程碑足以调用已验证的连接器。十三、本地服务适配器边界本地服务是网络表面但不是普通的外部出口policy.local提供策略快照、denial 摘要、proposal 提交与 proposal 等待。它永远不应把密钥或 provider 规则暴露为可编辑策略元数据环回metadata loopback为绕过 HTTP 代理变量的 SDK 提供 provider 元数据凭据。它应使用与其他凭据路径相同的 provider 凭据状态与脱敏纪律。这些适配器可以调用 gateway API 或本地凭据辅助但不应绕过外部出口适用的策略与凭据不变量。附录还说明了一个前瞻性消费者上游 issue #1633的边界策略声明的 host-local 端点应使用显式的本地路由适配器或目标模式而不能成为外部目标验证器中通用的回环豁免该特性设计仍需选择策略表面、定义 supervisor 连接 host 回环之前的授权、并指定 driver/运行时能力——它可以复用EgressIntent、适配器特定响应与“未打开的连接器”边界而不改变本 RFC 的兼容性里程碑。十四、超时与资源归属表设计附录把每一项超时/资源明确归属到唯一 owner并要求超时必须记录在能够解释失败的 owner 边界的遥测中Owner资源Adapter客户端解析超时与适配器特定的 deny 响应AuthorizationOPA 截止与策略求值遥测Destination validatorDNS 超时、允许 IP 检查、SSRF 检查、控制平面端口检查TLS terminator客户端 TLS 握手超时与证书选择HTTP relay逐请求读写截止、体上限、请求体改写上限、上游复用WebSocket relay升级验证、帧限制、文本帧改写、压缩限制、消息策略TCP relay字节拷贝空闲超时与半关闭half-close处理Protocol processor协议消息超时、中间件钩子超时、处理器特定限制Local service adapter本地路由体限制、响应上限、gateway 调用超时Token grant resolverSPIFFE Workload API 超时、token 端点超时、缓存 TTLMiddleware runner服务超时、体上限、失败策略、注册表代十五、延伸阅读RFC 全貌与仓库入口本文以技术设计附录为主体配套的 RFC 全貌建议按以下路径继续阅读RFC 主文档Summary / Motivation / Proposal / Non-goals / Risks / Alternatives / Prior art / Open questionsREADME.md其中包含统一适配器流程图、中继流程图、nftables 执行模型图、部署模式表与 10 步实施计划现状附录现有代码形态current-shape.md实施计划附录各里程碑的具体迁移步骤implementation-plan.md网络模块源码crates/openshell-supervisor-network重点入口是 run.rs、proxy/egress.rs、proxy/relay.rs、proxy/destination.rs、policy_dns/ 与 l7/进程/netns 模块源码crates/openshell-supervisor-process中间件 cratecrates/openshell-supervisor-middleware及其内建钩子 crates/openshell-supervisor-middleware-builtins相关 RFCRFC 0009supervisor 中间件扩展先例README.md。适用前提提示本仓库中部分透明 TCP 路径带有target_os linux编译约束见 run.rs 处的#[cfg(target_os linux)]且 RFC 当前状态为 review——EgressIntent/EgressDecision的精确 Rust 形状仍允许演化本文依据的是 RFC 声明的设计边界与仓库中已经落地的兼容层compatibility envelope代码而非未来里程碑的最终形态。赞分享【免费下载链接】OpenShellOpenShell is the safe, private runtime for autonomous AI agents.项目地址https://gitcode.com/gh_mirrors/op/OpenShell点击查看免费下载相关推荐OpenShell 沙箱出口代理适配器模型RFC 0005 分阶段实施计划解析OpenShell 沙箱出口代理适配器模型RFC 0005 分阶段实施计划解析 本文以 RFC 0005 实施计划 https://link.gitcode.OpenShell 沙箱代理出口适配器 RFC 0005current-shape 附录中的现状拆解与评审发现OpenShell 沙箱代理出口适配器 RFC 0005current shape 附录中的现状拆解与评审发现 本篇基于 RFC 0005 现状附录 httpOpenShell RFC 0005 解读沙箱代理出站适配器模型Egress Adapter如何统一 CONNECT、Forward HTTP 与透明 TCP 的授权边界OpenShell RFC 0005 解读沙箱代理出站适配器模型Egress Adapter如何统一 CONNECT、Forward HTTP 与透明 T上一篇KMS_VL_ALL_AIO智能授权脚本使用指南下一篇OmniRoute 免费供应商排行榜的用量可靠性24 小时真实成功率如何补上 ELO 排序的盲区创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
使用 AWS SDK for JavaScript (v3) 操作 AWS Support:从工单创建到解决的完整实战指南 示例工程教程后端 【免费下载链接】aws-doc-sdk-examples Welcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below. 项目地… · 2026/9/25 6:03:18
Atlas 300V Pro 24G实战:从驱动安装到YOLO模型转换与推理部署 最近后台好几个朋友都在问同一个问题:Atlas 300V 24G到底是不是运算加速卡?能跑YOLO吗?正好我手头这张Atlas 300V Pro 24G已经用了一段时间,从装驱动、转模型到跑通YOLOv5/YOLOv8,能踩的坑基本都踩了一遍。这篇就把完整… · 2026/9/25 6:03:18
微信H5被拦截?X5内核诱导行为识别与合规重构指南 1. 这个提示不是“封禁”,而是微信内容安全策略的实时拦截反馈 你刚在微信里点开一个链接,页面还没加载完,就弹出一行红字:“网页包含诱导分享、关注等诱导行为内容,已停止访问”。很多人第一反应是——“完了&#x… · 2026/9/25 7:10:37
Unity Claude Code插件29个技能实战:AI编程助手嵌入编辑器工作流 1. 这套插件到底解决了什么问题Unity 官方跟 Anthropic 合作推出的 Claude Code 插件,本质上是把 AI 编程助手从"浏览器标签页"搬进了引擎编辑器内部。过去我们写 Unity 脚本的典型流程是:在编辑器里发现需求,切到浏览器或独立聊天… · 2026/9/25 7:10:37
CTF-Wiki 密码学实战:CTR 计数器模式原理剖析与 CTF 逆向攻击 文档网络安全教程 【免费下载链接】ctf-wiki Come and join us, we need you! 项目地址: https://gitcode.com/gh_mirrors/ct/ctf-wiki 点击查看 免费下载 本文以 CTF-Wiki 文档 docs/zh-tw/docs/crypto/blockcipher/mode/ctr.md 为核心,系统讲解分组密… · 2026/9/25 7:10:37
OpenChamber Control Service 深度解析:类型化控制契约、动作校验与双适配器架构 AI Agent人工智能代码智能体交互助手 【免费下载链接】openchamber Agentic Development Environment based on OpenCode AI agent 项目地址: https://gitcode.com/gh_mirrors/op/openchamber 点击查看 免费下载 OpenChamber Control Service 是 OpenChamber CLI 与… · 2026/9/25 7:10:37
Atlas 300V 24G推理卡部署YOLO实战:模型转换与避坑指南 去年有个项目要把YOLOv5接到华为的AI硬件上,当时我就被一个问题卡住了:Atlas 300V 24G到底是张什么卡?是不是运算加速卡?能不能直接拿来跑目标检测?网上一搜,说法五花八门,有人拿它和GPU比显存&… · 2026/9/25 7:10:25
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37