NSGW 是 NSIO Next 可选的数据面能力载体。基础 Relay 保证困难网络下可用;托管区域、固定出口、公网入口和企业 SLA 构成增值能力。NSGW 的每项 capability 独立授权、配置和隔离,不能因为一台进程支持多项能力就共享租户权限。
Relay、Egress、Exit 与 Public Application 的产品闭环和状态轴见产品能力目录与实现闭环,精确建流、frame、credential 和 generation 规则见数据面协议,能力申请/激活与 Edge 对象状态见控制资源生命周期;本文件只定义 NSGW 的执行责任。
| Capability | 数据可见性 | 是否基础能力 | 主要价值 |
|---|---|---|---|
relay | 端到端密文和最小路由元数据 | 是 | NAT/UDP 困难环境可达 |
managed_relay | 同 relay | 增值 | 区域、容量、SLA、专属实例 |
gateway_egress | 目标 Service 连接明文边界 | 增值 | 固定源 IP、访问白名单 SaaS |
gateway_exit | 用户授权范围的公网/网段流量 | 增值/可自建 | 企业互联网出口 |
public_ingress | 外部请求与目标 Service 流量 | 增值 | 公网发布、证书、WAF |
CapabilityPolicy 只定义 Gateway/Node 可以申请什么能力和范围;实际运行必须存在逐实例 CapabilityActivation。Activation 事务统一执行批准(含 auto approval)、Managed Resource 配额占用、计量、审计和 Capability Lease 签发。任何代码不得把 Policy allow 直接当成有效 Lease。
Capability Lease 绑定 deployment、organization/network、gateway_instance_id、capability、activation ID、generation、配置 revision、有效期和 Entitlement revision。缺失、过期或签名错误只关闭对应 capability,不影响其他能力。租户配置不得使用含义不明的通用 gateway_id 代替实例 ID。
状态分为独立轴:Activation=active|suspended|revoked,Availability=ready|degraded|unavailable,再分别报告 projection 与 runtime。suspended 停止新执行但保留配额和计费,恢复保证不重新抢额度;revoked 释放配额并要求重新申请;离线只改变 Availability。暂停可显式设置 auto_revoke_at,没有全局自动撤销期限。
| 对象 | 作用域 | 责任 |
|---|---|---|
GatewayInstance | Deployment | 真实进程、Gateway Key、region、版本、attestation、健康与容量 |
GatewayPool | Deployment | ownership/region/capability/isolation class 相同、可由调度器替换的一组实例;organization-owned pool 只能包含同一 Organization 的实例 |
GatewayAssignment | Organization | Organization 对池或专属实例的供给/使用归属;target 是闭合的 `pool |
CapabilityActivation | Organization/Network | 客户批准、配额占位、计量和持续业务意图 |
CapabilityLease | Activation × GatewayInstance | 当前执行实例、generation、配置与短期运行授权 |
注册证明只授权创建 GatewayInstance,不能据此创建 Activation 或 Lease。面向客户的 pairing/enrollment 编排事务可以在同一原子提交中创建/复用同 ownership 的 GatewayPool,并另建 customer_owned Assignment,但它们仍是独立权威对象,不从注册证明隐式推导运行能力;capability report 也不能创建 Assignment、Activation 或 Lease。共享池或客户自建池替换实例时 Assignment/Activation 不变;专属实例替换只原子更新 Assignment target;两者都通过提升 generation 重签 Lease,不撤销 Activation 或释放后重新抢配额。
GatewayAssignment 的 assignment_kind 是闭合枚举:system_default|commercial|dedicated|customer_owned。它承载租户与基础设施供给之间的关系,不是“多租户”或“计费”任一单独层的别名:Basic Relay 也有系统自动创建且不可由租户删除的 system_default Assignment;购买 Managed Relay 产生 commercial;专属 PoP/IP 使用 dedicated;客户自建实例使用 customer_owned。
commercial/dedicated Assignment 由当前 active ProductAllocation revision 派生并保存 (product_allocation_id, allocation_revision) provenance;价格、Order/Contract Event 和 Capacity Inventory 不进入 Assignment 或 NSGW。Reserved Throughput 还要求平台侧存在绑定同一 Allocation revision 的 committed RelayCapacityReservation。这两项是 Lease 签发上限,不增加 NSGW 可自报或自行申请的能力。
GatewayInstance 的主机所有权和 NSIO 服务执行权必须分开:
ownership_kind | 主机/进程管理权威 | NSIO 可执行的服务动作 |
|---|---|---|
platform_owned | platform_operations | 发布、升级、drain、隔离、轮换、终止 |
organization_owned | organization_gateway_admin | 平台只读版本/健康与合规事实;可拒签新 Lease、撤销 NSIO credential/Lease 或安全隔离,不能关机、卸载或修改客户主机 |
private_deployment_owned | deployment_admin | 由私有 Deployment Admin 管理;平台无运行控制面权限 |
普通版本过旧按“告警 → 整改期限 → 停签新 Lease → 旧 Lease 到期”收敛。已知可利用漏洞、主动攻击、滥用或法律安全紧急事件可立即撤销 NSIO credential/Lease 并隔离服务资格,但不得把这一权力描述成可以操作客户 OS。客户自建实例对其他 Organization 完全不可见;共享实例对租户只暴露池、区域、SLA 和聚合健康,不暴露 raw fleet。
NSGW 负责高速数据路径、租约验证、配置原子应用、健康/容量、有限流量元数据和本地恢复。NSD 负责租户对象、授权、候选、配置编译和计费事实。ns 负责端节点加密、Service backend 和 Exit client capture。Client 只展示和发出用户/管理员命令。
NSGW 不保存完整用户/组/Grant 图,不查询套餐 SKU,不生成终端私钥,不自行扩展 CIDR/Service 范围。
托管 NSGW 的发布、区域灰度、SLA 探针、事故 drain 和恢复分别遵守发行生命周期、服务运营和备份恢复。Gateway 进程不得自行宣称 SLA 或修改客户账单。
| 模块 | 作用 |
|---|---|
identity | Gateway key、注册、轮换、attestation |
lease_client | 控制连接、Capability Lease、配置 snapshot |
config_runtime | 校验、plan、原子切换、回滚和 journal |
relay | 端到端密文转发、opaque session 与 RelayRouteLease |
wss_relay | UDP 受阻时 TLS/WebSocket 外层 |
egress | Service-scoped outbound NAT/proxy |
exit | Node tunnel termination、routing/NAT/DNS option |
ingress | listener、TLS、WAF、Service backend |
tenant_isolation | namespace/table/socket/credential 分区 |
health_capacity | readiness、load、region、drain |
metering | 可审计 usage event/outbox |
diagnostics | 脱敏状态、config revision、path counters |
NSGW 注册有三条产品轨,最终都产生独立 Gateway Key 和同一份不可变 enrollment provenance:
| 形态 | 谁创建注册机会 | 默认方式 | 正式对象 |
|---|---|---|---|
| 平台托管 Basic/Managed/Dedicated fleet | Platform Operations | Gateway Enrollment Key、Secret Provider 或 P1 Workload Identity/attestation | Deployment 级 Instance/Pool;后续由系统或商业 provisioning 创建 Assignment |
| 托管控制下的客户自建 NSGW | Organization Gateway Admin | 1–3 台有人值守时浏览器配对;批量用 Gateway Enrollment Key | Deployment 级 organization_owned Instance/Pool + 本 Organization 的 customer_owned Assignment |
| 完全私有 Deployment | Deployment Admin | 浏览器配对、Gateway Enrollment Key 或 P1 attestation | 私有 Deployment 级 Instance/Pool/Assignment |
普通 Organization 用户不注册平台默认 Relay。平台先将健康实例纳入默认 Basic Relay Pool;Organization 创建事务自动生成不可删除的 system_default Assignment,Network 创建事务再按正常 Activation/Lease 安全路径启用基础 Relay。客户无需购买、审批或看到具体实例,ns 自动选择 direct → UDP punching → Basic Relay → WSS/TLS。
Managed Relay/Edge 的供给链为:Platform Operations 注册 Instance/Pool 和容量证据 → 商业系统发布区域/容量/SLA 商品 → Order/Subscription 生成 Effective Entitlement 与 versioned ProductAllocation → 需要时提交 Capacity Reservation → provisioning 幂等创建带 allocation provenance 的 commercial|dedicated GatewayAssignment → Network Admin 在 Gateways & Exit 激活 region/capability → NSD 校验 Assignment、Entitlement、quota、Policy 和 committed Reservation 后签 Capability Lease。付款、Allocation 和 Assignment 都不创建 AccessGrant,也不跳过 Activation。
少量有人值守安装使用以下流程:
Automation → Gateway Fleet → Add self-hosted gateway 打开短 TTL 的 GatewayPairingSession,选择 region、ownership intent 和 capability ceiling;pairing_session_id,安装命令只携带该相关句柄,不携带 Enrollment Key 或可批准凭据;配对短语每 15 秒输出一次直到成功或 Session 终止,同时原子写入 /var/lib/nsio/nsgw/pairing-phrase(权限 0600),并可由 nsgw pairing-phrase 读取。文件在 confirmed/rejected/expired/closed 后立即清除;日志系统仍须避免把 Session 句柄、challenge、签名或其他敏感 transcript 字段扩散到普通日志。控制台第 4 次开始配对时提示改用批量方式;这是 UX 引导,不是协议硬上限。
批量部署使用一次性 Gateway Enrollment Key,限定 deployment、Organization(客户自建轨)、capability ceiling、region、expiry 和 uses。Key 只通过 Secret Provider、受保护文件或标准输入注入,不放进 argv、shell history、镜像层或普通配置日志;每个实例仍独立生成 Gateway Key,禁止多副本共享机器身份。P1 云环境可用 Workload Identity/实例 attestation 取代长期 secret,但 attestation 只证明注册资格,不创建 Activation 或数据面授权。
两条轨都冻结 enrollment_method、proof source/revision、accepted_at、capability ceiling 和 digest。配对 ceiling 等于管理员确认 transcript 的 ceiling,Key 轨等于被接受 Key revision 的 ceiling;后续 capability report、Policy 或 Entitlement 不能改写历史 ceiling。
启动顺序:验证本地身份 → 恢复 journal → 建 NSD 控制连接 → 报告软件/平台/capability/容量 → 获取 leases/config → 在隔离 staging 中验证 → 逐 capability 启动 → 复验 listener/route → 发布 readiness。
没有有效配置时进程可以健康启动为 registered_idle,不能因为计费或某个租户配置失败退出整个网关。
配置按 (tenant_scope, capability) 独立 snapshot/revision。每份包括 lease、listener、route/backend、credential reference、limits 和 audit settings。Secret 通过本地 secret provider 引用,不在普通 event payload 中明文传输。
应用步骤:schema/签名/lease → 资源上限 → 端口/route 冲突 → secret 可用 → staging listener/table → health probe → atomic activate → drain old revision → ack。失败只保留旧有效 revision 并上报 typed error。
RelayRouteLease 只包含 relay audience、opaque relay_route_id/relay_session_id、direction、carrier allowlist、per-session safety bounds、revision 和有效期。NSGW 不获得稳定 Membership ID、Node ID、WireGuard 公钥、Service/Grant 目录或可跨租约关联的租户标识。两端 attach 成功后只使用轮换的 opaque relay_session_id 路由;租约默认十分钟并可重签,旧 ID 到期不可复用。
中继路径上的授权与服务等级使用三种不能互换的 Lease:
| Lease | 回答的问题 | 典型 TTL | 过期行为 |
|---|---|---|---|
CapabilityLease | 该 GatewayInstance 是否可为某 Activation 执行 relay capability | 长于预算续租,按 capability 策略 | 停止该能力;不能由 budget lease 代替 |
RelayRouteLease | 这两个 opaque session 是否可经指定 Relay 建立和转发 | 默认约十分钟 | attach/route 失效,按连接协议收敛 |
RelayBudgetLease | 该实例当前可为哪个 opaque budget subject 使用多少本地 QoS 份额 | 分钟级 | 回落 fallback profile,认证连接保留 |
RelayBudgetLease 至少绑定 schema/lease ID、opaque relay_budget_subject_id、relay audience/pool、budget/rotation epoch、allowance period ID 与起止时间、当前服务档、分配给本实例的 sustained/burst/bucket/concurrency/local-window 份额、entitlement/config revision、gateway instance、valid_from/valid_until、generation 和签名。它不包含 Organization、User、Membership、Node、WireGuard key、Service 或目的地。budget subject 轮换不得重置周期预算;Allocator 在签发新 subject/lease 时结转同一 period 的已用量和剩余量。
Allocator 可以基于中心计量向多个健康实例签发有界 budget allocation,所有未过期分配及允许的轮换/故障重叠之和必须有可计算上界。它只在签发/续租时参与,不参与 attach、每流或每 frame 判定。NSGW 仅依据本地验签 Lease、token bucket、fair queue、持久 local-window counter 和 session table 转发;进程重启不得清空本地成本窗口或重新获得高速档。
attach 握手、32 字节 frame header、DATA/KEEPALIVE/CLOSE/ERROR、sequence/replay 检查和关闭码以数据面协议 §5为唯一线格式。NSGW 只能按本地 lease/session table 判定,不得在每个 frame 或新流上回查 NSD。QUIC DATAGRAM 与 WSS 使用相同 frame 和 lease 语义。
Community Relay 的高速额度耗尽时,NSGW 使用 community_relay_degraded reason 切入 degraded profile;budget/中心计量陈旧时使用 community_relay_budget_stale 切入 fallback profile。两者都保留认证连接并可尝试 direct、customer-owned Relay 或其他持有有效份额的实例,不得返回 unauthorized、offline 或静默丢包。平台容量过载使用独立 relay_capacity_limited,明确滥用/安全撤销使用独立安全 reason;这些路径可以拒绝或终止会话,不能与商业降速合并。
基础 Relay 与 Managed Relay 使用同协议。区别仅在区域选择、容量、专属隔离、SLA 和商业 lease,不能人为降低免费路径安全性。
WSS 是 UDP 被封锁时的 transport fallback,仍承载端到端加密 frame。认证与 RelayRouteLease 规则相同。HTTP 反向代理和 WSS relay 使用独立 listener/path/限速,避免 header/cookie 或业务路由污染隧道。
代理/CDN 前置时必须保留可验证客户端 session,不信任任意 X-Forwarded-For。中间层缓存、压缩和消息改写关闭。
Gateway Egress 是 Service backend,不是默认路由:
配置必须绑定 Service ID、允许的 origin host/IP/port、TLS/SNI policy、source Network、publisher projection digest 和 limits。Egress 是 Service publisher:消费端提交 ServiceFlowCredential,NSGW 同时持有只供本地执行的 EgressOriginLease,按数据面协议 §8.1执行 OPEN、目标解析、generation 和实际 origin 校验,不接受客户端任意 CONNECT,也不回查 NSD。公网 origin 不验证 NSIO 凭据,因此该 lease 不发送给 origin;这与必须向后端 ns 出示的 IngressBackendCredential 有意不同。
DNS resolution 采用受控 resolver,防 DNS rebinding:解析后校验 IP policy、限制答案数量/TTL、连接时绑定结果。固定来源 IP 由实例/region 保证并在控制台展示验证状态。
停止 Egress 只使该 Service backend unavailable,不影响其他 Service、L3 或公网连接。
Exit Gateway 报告一个或多个 profile:profile_ref、scope(DefaultRoute/CIDRs)、enabled、capabilities 和 operator labels。NSD 对 profile 授权并投影候选,用户选择后下发短租约配置。
NSGW 接受流量前最终校验:Gateway、ExitTunnelLease、source Membership、selection/profile、scope/CIDR、tunnel session、enabled/health。终端和 NSGW 两侧都执行同一 scope:终端只捕获允许范围,NSGW 只 NAT/转发租约允许范围。任一失败不 NAT、不转发并上报稳定 reason;建隧道和数据包处理不回查 NSD。
Default Route 和 CIDR scope 都只处理被配置的流量。DNS/private-network 是否走 Exit 由明确配置决定,不从 Default Route 猜测。IPv6 未被 NSGW/profile 支持时,Client 必须依据终端 runtime 事实展示,NSGW 不宣称“全流量”。
Selection suspended 时保留用户偏好但不转发;重新授权/上线后可按同一 selection 恢复。撤权在 NSD projection 和短 lease 到期两条路径收敛。
Ingress 创建必须引用已有 Service,完整对象为 PublicApplication(host/path) + EdgeAuthPolicy + IngressBindingLease。流程:
IngressBackendCredential/publisher projection;IngressBackendCredential 通过 ServiceFlow 进入授权 Endpoint。Ingress 不允许填写任意 10.x:port 绕过 Service 对象。NSGW 连接后端使用受限 Gateway identity 与 Service lease,不获得 Network peer map。外部访客只形成 EdgeIdentity,不获得 Membership;可向后端携带签名 EdgeIdentityContext 供应用审计,但它不能扩展 Network 权限。停用先撤 DNS/新连接,再 drain,最后撤 lease;Service 保留。
认证方法是显式枚举:OIDC、API Key、Service Credential、Signed URL、mTLS、Anonymous。Anonymous 不是跳过策略,仍执行 TLS、WAF、rate limit、request audit 和应用范围校验。内部 Service AccessGrant 与 EdgeAuthPolicy 相互独立,NSGW 不能用其中一方结果替代另一方。
NSGW 从 target-minimal projection 获得 versioned EdgeAuthPolicy AST、method verifier/secret reference、PolicyKernel/Edge evaluator version 和 provenance,在每个请求本地求值;请求路径不调用 NSD。OIDC state/nonce/PKCE、EdgeSessionCredential、API Key、Signed URL、mTLS 和 Anonymous 的必需字段、轮换及 API 以控制资源生命周期 §11为权威。
会话索引至少包含 application_id、policy_revision、binding_lease_id、session_id、principal_kind/id、credential_id、identity_provider_session_id,支持按应用、策略、Binding、访客、服务凭据或 IdP 会话精确撤销。
安全撤销必须在 SLA 内主动终止已建立长连接:HTTP 返回 401/403,WebSocket 使用 1008,gRPC 使用 UNAUTHENTICATED/PERMISSION_DENIED,SSE 尽量发送最终错误事件,raw stream 使用 FIN/RST。策略读取/求值故障返回 503,后端不可用返回 502,不能把系统故障伪装成无权限。
WAF、CORS preflight bypass、header rewrite 等改变安全边界的选项必须显式、审计且有影响说明,不能默认开启。
每个 tenant/capability 至少隔离:配置对象、listener/route table、session map、secret namespace、限速、日志标签和 usage counter。可采用进程、network namespace、VRF/table 或严格内存 key 分区;部署级选择不能改变测试语义。
任何查找都以 tenant scope 为首键。外部 packet/session 不能仅凭目标 IP/端口选择租户。配置删除后先阻止新 session,再 drain 并清理 secret 引用。
Health 分层:process alive、control connected、capability ready、tenant config ready、regional capacity。NSD 调度只能使用 readiness 和容量,不把 process alive 当可服务。
drain 状态不接新 session但保留已有流;安全 revoke 可按租户/capability/application/policy/identity/credential 立即断开。升级滚动过程中配置 revision 和 session stickiness 可追踪。
GatewayPool 以 ownership authority、region、capability、isolation class 和 placement revision 固定可调度集合。Assignment 的 target 只能是具体 gateway_instance_id 或 gateway_pool_id:共享托管能力通常指向平台池,客户自建 HA 指向该 Organization 的自建池,单实例专属能力也可指向实例。池内实例不可用或计划退役时,调度器在同池健康实例间自动重签 Lease;不得跨 Organization/ownership、region 或 isolation class 猜测候选,也不得把专属 Assignment 静默降级到共享池。
Reserved Throughput 只允许调度到 dedicated_reserved isolation class 的专属池。该池不能接收 Community Relay、其他 Organization 或未绑定 committed Capacity Reservation 的流量;调度器不得因共享池空闲而借用,也不得在专属池受限时把承诺迁到共享/域外实例。区域、residency、SLA 和 reserved bps 均来自已批准 Assignment/Lease,不能从实例自报容量推导。
容量指标包括 sessions、bandwidth、packet drop、CPU/memory、listener errors、region path quality 和 lease expiry。租户只看自己的聚合,平台运营看基础设施但默认不看业务目标。
NSGW 的 capacity report 是 RelayCapacityInventory 的测量输入之一,不是可售库存。平台运营必须结合拓扑故障域、独立压测、运维/安全余量形成带 evidence digest 的 Inventory revision;NSGW 无权读取价格、Allocation、Reservation 总表或修改 inventory state。Inventory constrained/oversold 不撤销 NSGW 当前 Lease;NSGW 继续执行 Lease 内 committed 上限,实际无法兑现时上报容量 reason 并进入服务 SLI/incident,而不是改成 unauthorized。
计量事件使用 durable outbox,包含 gateway、tenant 或 opaque relay budget subject、capability、resource、time bucket、bytes/connections 和 config revision。事件有稳定 ID、单调序号和去重键。普通 Edge/tenant meter 可携带权威 tenant scope;Community Relay meter 只能携带 relay_budget_subject_id、period/rotation epoch 与最小流量计数,由中心系统映射,NSGW 日志不得补写 Organization ID。
计量失败不阻断安全数据面,也不能恢复无限高速:NSGW 先延用最后验签 budget 状态和持久 local-window counter;meter_stale_after 或 RelayBudgetLease 到期后回落 fallback profile。outbox 满达到安全阈值时进入 degraded 并告警,不静默丢账。中心恢复后按单调 counter checkpoint 对账,重复/迟到事件不得重复消耗预算,subject 轮换前后的计数必须归并到同一 period。
流量内容不采集。域名/目标等高敏元数据按产品设置、地域和保留期处理。Legal Hold 与删除工作流由 NSD 控制,NSGW 只保留短期运行日志。
| 故障 | 行为 |
|---|---|
| NSD 断线 | 使用未过期 lease/config;到期逐 capability fail-closed |
| Relay budget/计量续租失败 | 未过期 RelayBudgetLease 继续;到期或陈旧后回落 fallback profile,不关闭认证连接、不恢复高速档 |
| 单租户配置错误 | 保留旧 revision,隔离错误,不退出进程 |
| Secret 不可用 | 对应 listener/backend not ready |
| Relay 过载 | 拒新 session并给容量 reason,已有 session按策略保留 |
| Dedicated capacity constrained/oversold | 不自行降低 committed Lease、不借用 Community/shared/域外池;上报容量事实,由平台停止新售并处置,实际未兑现计入 SLA |
| Egress origin 失败 | 仅 Service endpoint unavailable |
| Exit tunnel/profile 失败 | 不转发该 selection,终端保持安全处理 |
| Ingress cert 失败 | 不激活新 listener,旧证书未过期则保留 |
| 进程崩溃 | journal 恢复配置;租约仍须重新验证 |
| 共享池实例计划退役 | Assignment/Activation 不变;停止新 Lease、改签到同池健康实例、验证 readiness 后有界 drain |
| 专属实例计划替换 | 影响预览后原子更新 Assignment target;Activation/配额不变;新 generation 生效后 drain 旧实例 |
| Gateway Key 疑似泄露 | Deployment Operations 立即停止签发并撤销旧实例 Lease/控制凭据;不做安全 drain,按受影响租户逐项告警 |
部署单位可以是单机全能力或按 capability 分池。生产建议 Relay、Exit/Egress、Ingress 分池,缩小明文边界与故障范围。每个实例使用最小 OS capability、只读根文件系统、外部 secret provider 和不可变镜像。
自建 NSGW 使用同一协议和安全门;托管增值来自区域资源、运维、SLA、固定 IP 和合规,不通过私有协议锁死客户。
托管云的 platform_owned GatewayInstance/Pool 注册、drain、替换和 revoke 只属于 Platform Operations;企业私有部署由 Deployment Admin 执行同类操作。Organization Gateway Admin 可以配对、替换、停用或退役自己的 organization_owned 实例,并管理本组织的 Assignment/Activation;不能操作共享实例或其他组织实例。平台对客户自建实例可以读取最小版本/健康/合规事实、拒签新 Lease、隔离或撤销 NSIO 服务凭据,但不能关机、卸载或修改客户主机。
共享实例安全处置必须展开全部受影响 Assignment,触发每个租户的审计/通知和平台状态页事件。托管池计划退役时 Assignment 仍指向池,调度器自动把 Lease 改签到同池健康实例;专属/客户自建实例替换只重签 Lease 或明确更新 Assignment target,不撤销 Activation/配额。仅有一个健康实例时 UI 显示“仅 1 个健康实例 · 无冗余”,不能把 registered_idle 或 process alive 显示为具备 HA。
Gateway 控制 API 只接受 mTLS/Gateway Key 签名身份,提供 gateway.instance.enroll/authenticate、gateway.capabilities.report、gateway.config.fetch/stream、projection.ack、gateway.health/usage.report 和按 ownership authority 约束的 disable/quarantine/revoke。浏览器配对 API 使用共享 registry 的 gateway.pairing.open|announce|confirm|reject|close;只有 announce 可匿名提交候选,confirm/reject/close 必须是原 Session 的已认证管理会话且 confirm 要求 step-up。Assignment API 只接受 Organization 管理身份,Activation API 按 Organization/Network 授权;三类 API 不能共享一个泛化的 Gateway update。终端数据面使用短期 session/flow token,不复用控制 token。
每项 capability 状态分别返回 activation、availability、projection、runtime、quota allocation、lease、config revision、active sessions、last error、retryable 和 expires_at。管理端不把这些轴或多项能力合成一个“Gateway 在线”。
审计事件至少区分 gateway.pairing.opened|candidate_announced|confirmed|rejected|expired、gateway.instance.enrolled|disabled|quarantined|drain_started|drain_completed|revoked、gateway.pool.membership_changed、gateway.assignment.created|retargeted|revoked、gateway.lease.reissued|revoked 和 gateway.instance.compromise_contained。商业/运营链另记录 product_allocation.revision_advanced|suspended|terminated、relay.capacity.remeasured|constrained|oversold 与 relay.capacity_reservation.held|committed|released|expired,但不把价格或其他客户库存投影给 NSGW。事件保存 actor authority、ownership/enrollment method、proof source、instance/pool/assignment/activation、旧新 generation、影响租户摘要、reason、operation ID 和逐对象结果;共享实例事故同时关联平台 incident/status-page ID,但不向某租户披露其他 Organization 标识。匿名 announce 只保留限速、安全计数和经最小化的网络元数据,不进入租户 pending 列表。
system_default Basic Relay Assignment;购买后商业 Assignment 幂等交付,重复 webhook 不重复分配;RelayBudgetLease 过期必须降速而非断网,RelayRouteLease/CapabilityLease 仍按各自授权语义失效;NSGW 的每项 capability 单独通过安全、故障和真机数据路径验收后才能启用,不能以“Gateway 整体已测试”代替。