传统安全模型默认「内网可信」:VPN 一进,内网裸奔。可现实是,横向移动、内鬼与供应链攻击让「城堡护城河」式防御越来越脆弱。零信任(Zero Trust)把默认前提反转为**「永不信任,始终验证」**:无论来源在内网还是外网,每次访问都要按身份、设备与上下文重新授权。ZTNA(Zero Trust Network Access)正是把这一理念工程化的访问控制体系。
一、零信任的核心理念
1.1 从边界信任到身份信任
传统模型(Perimeter-based):
边界外 ──防火墙/VPN──► 边界内(默认可信)
攻击面:边界一旦被绕过,内网横向畅通
零信任模型(Identity-based):
任何来源 ──持续验证──► 单次最小授权
原则:
1. 永不信任,始终验证
2. 最小权限(Least Privilege)
3. 假设已沦陷(Assume Breach)
| 维度 | 传统 VPN | 零信任 ZTNA |
|---|---|---|
| 信任起点 | 进入网络即可信 | 每次请求单独验证 |
| 访问粒度 | 网络可达(整网段) | 应用级(单个服务) |
| 身份 | 弱(登录即放行) | 强(身份+设备+上下文) |
| 流量路径 | 流量经 VPN 回内网 | 按需代理到目标 |
| 横向移动 | 内网任意可达 | 默认不可达 |
一句话:零信任不是「不加安全设备」,而是把信任判定从「你在哪」改成「你是谁、设备如何、行为是否异常」。
1.2 零信任三大支柱
三大支柱(NIST SP 800-207 思路):
1. 身份:人/服务/设备的强认证(MFA、证书、SPIFFE)
2. 设备:终端合规(补丁、磁盘加密、MDM 状态)
3. 访问:基于策略的按需授权 + 持续风险评分
贯穿性能力:
- 可视化:看清每个会话的来源与目标
- 持续评估:风险升高时动态收回授权
二、SDP 软件定义边界
2.1 SDP 模型
ZTNA 的主流实现是 SDP(Software Defined Perimeter),由云安全联盟(CSA)提出:让服务对非法访问者「隐身」。
SDP 三组件:
SDP Controller:集中控制面,负责认证与策略下发
SDP Client(IH, Initiating Host):用户侧代理
SDP Gateway(AH, Accepting Host):服务侧网关
访问流程:
1. 客户端先与 Controller 认证(拿到短期令牌)
2. Controller 校验身份/设备/策略
3. 通过后,告知客户端可用的 Gateway 地址(动态下发)
4. 客户端才与 Gateway 建立加密隧道(通常是 mTLS/DTLS)
5. Gateway 侧默认拒绝一切,只放行策略允许的应用
SDP 的「隐身」效果:
未认证的扫描器连 Gateway 地址都得不到
服务端口对未授权方完全不暴露(减少攻击面)
2.2 两种 ZTNA 模式
| 模式 | 工作方式 | 适用 |
|---|---|---|
| ZTNA 1.0(连接网关) | 连接器部署在目标服务前,代理转发 | 数据中心/私有云内服务 |
| ZTNA 2.0(浏览器/客户端) | 客户端本地代理 + 应用层控制 | 混合办公、SaaS |
两种模式对比:
连接网关模式:
流量:Client → Connector → Service
服务无需改造,网关做 L4/L7 转发与策略
客户端代理模式:
流量:Client(本地 Agent)→ Cloud/Edge → Service
更贴近 SaaS,策略在云端统一
三、微分段与微隔离
3.1 微分段(Micro-Segmentation)
微分段把数据中心/云内的网络切成细粒度信任域,用工作负载级策略取代大段 ACL:
传统分段:
[Web 段 10.0.0.0/24] ──ACL──► [App 段 10.0.1.0/24] ──► [DB 段 10.0.2.0/24]
策略写死 IP,一旦虚机迁移/弹性伸缩就失效
微分段:
策略绑定「标签」而非 IP:
app=web / app=db / env=prod / tier=3
「只允许 app=web 访问 app=db 的 3306 端口」
云平台或服务网格动态实现
实施载体:
云网络:安全组 + 分布式防火墙(如 AWS Security Group、Azure NSG)
服务网格:Sidecar 代理(Istio Cilium)按工作负载身份做 mTLS 与策略
主机层:eBPF 内核强制(Cilium 默认拒绝,白名单放行)
3.2 微隔离的粒度与挑战
| 粒度 | 说明 | 挑战 |
|---|---|---|
| 主机级 | 按 IP 分段 | 易管理但太粗 |
| 工作负载级 | 按标签/身份 | 需可视化支撑 |
| 应用/进程级 | 按进程与服务 | 最细、最复杂 |
| 会话级 | 按连接上下文 | 动态风险控制 |
微隔离实施三步走:
1. 梳理应用依赖(可视化流量图)
2. 制定最小化白名单策略
3. 先审计(观察不阻断)→ 再灰度 → 最后强制
一句话:微分段的目标不是「加更多防火墙」,而是让「横向移动」从「踩油门」变成「每一步都要刷卡」。
四、身份驱动的访问控制
4.1 统一身份与设备信任
身份层组件:
IdP(身份提供方):Okta/Keycloak/自建 OIDC
设备管理:MDM/UEM 提供设备合规证据
Policy Engine:综合身份、设备、位置、风险打分 → 授权
决策数据源:
身份:用户组、角色、多因素状态
设备:补丁版本、磁盘加密、越狱检测
环境:地理位置、网络来源、时间
行为:登录频率、访问异常(UEBA)
4.2 授权模型与动态策略
ABAC(基于属性)策略示例(JSON):
{
"action": "allow",
"subject": { "group": "backend-dev" },
"resource": { "app": "gitlab", "env": "prod" },
"condition": {
"device.compliant": true,
"mfa.performed": true,
"risk_score": { "<": 60 }
}
}
持续验证(Continuous Verification):
会话建立只是起点,运行中周期性重评估:
- 设备离开企业 Wi-Fi → 要求重新认证
- 行为异常(大量下载)→ 风险分数上调 → 降权/阻断
- 会话令牌短期化:5~15 分钟刷新
4.3 服务间身份:SPIFFE/SPIRE
零信任不只要管人,还要管「服务对服务」:
SPIFFE 为每个服务颁发短期证书(SVID):
身份形如:spiffe://example.com/ns/backend/sa/payment
Sidecar/代理用 SVID 做 mTLS:
- 双向验证对端身份
- 只信任 SPIFFE ID 匹配策略的服务
替代「靠 IP 猜测服务」——IP 会漂移,身份不会
五、ZTNA 与传统 VPN 的对比
5.1 对比维度
| 维度 | 传统 VPN | ZTNA |
|---|---|---|
| 接入后可见性 | 整个内网 | 仅授权应用 |
| 粒度 | IP/网段 | 应用/服务 |
| 客户端 | 全局路由/虚拟网卡 | 应用层代理 |
| 运维 | 网关高可用、证书管理 | 策略集中、按应用接入 |
| 体验 | 连接慢、路由冲突 | 就近接入、无感 |
| 排障 | 抓包看隧道 | 会话日志 + 策略审计 |
VPN 流量行为:接入后所有流量都可能进隧道,体验与安全双输
ZTNA 流量行为:只有目标应用的流量走代理,其余直连互联网
→ 带宽占用小、延迟低、应用访问更稳定
5.2 为什么 VPN 不够用
VPN 的三大先天缺陷:
1. 隐含信任:进入即可信,横向移动无阻力
2. 粒度太粗:网络可达即应用可达
3. 双刃体验:全局隧道拖慢一切流量
ZTNA 的回应:
默认拒绝 + 应用粒度 + 按需代理
六、ZTNA 落地路径
6.1 分阶段落地
阶段一:梳理与评估(1~2 月)
- 盘点应用与访问关系,识别高危入口
- 确定试点应用(如内部管理后台)
阶段二:试点接入(2~4 月)
- 部署 ZTNA 控制面 + 连接器
- 接入试点应用,开启审计模式
- 建立身份源与设备合规基线
阶段三:分批替换 VPN(4~8 月)
- 按业务优先级迁移到 ZTNA
- 高风险应用优先,内部工具逐步收敛
阶段四:常态化(长期)
- 微分段扩展覆盖全部工作负载
- 动态风险策略与 UEBA 持续调优
6.2 关键成功要素
落地 Checklist:
☐ 统一的身份源(IdP 单一事实来源)
☐ 设备合规基线(补丁/加密/MDM)
☐ 应用清单与最小权限策略
☐ 审计日志与可视化(策略生效前先看流量)
☐ 例外流程(紧急访问、临时账号)
☐ 跨多云/分支的统一控制面
6.3 常见坑与对策
| 坑 | 表现 | 对策 |
|---|---|---|
| 策略太宽 | 先「全部允许」后忘收紧 | 分阶段灰度强制 |
| 身份源分散 | 多套账号体系 | 收敛到单一 IdP + SCIM |
| 忽略设备信任 | 恶意终端照样访问 | 设备合规作为硬条件 |
| 只做接入不做微分段 | 内网仍可横向 | ZTNA 与微分段联动 |
| 性能退化 | 代理路径绕远 | 就近网关 + 本地缓存 |
七、ZTNA 与新兴技术结合
7.1 与云原生安全结合
云原生场景:
Kubernetes 集群内:
- Cilium/服务网格做工作负载级零信任
- 网络策略默认拒绝,按标签放行
GitOps 交付策略:
- 策略即代码(Policy-as-Code),随应用发布
- 审计:把 ZTNA 策略纳入 IaC 仓库评审
# Kubernetes 零信任网络策略示例(默认拒绝 + 定向放行)
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny
spec:
podSelector: {}
policyTypes: [Ingress]
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-frontend-to-api
spec:
podSelector:
matchLabels: { app: api }
ingress:
- from:
- podSelector: { matchLabels: { app: frontend } }
ports: [{ port: 8080 }]
7.2 AI 驱动的动态信任
风险评分的演进:
静态规则 → 行为基线(UEBA)→ AI 实时风险模型
异常示例:
凌晨批量导出数据、从未访问过的地域、新设备+高权限账号
响应动作:
追加 MFA → 降权 → 阻断会话 → 拉起事件响应
八、总结
| 主题 | 核心知识点 | 落地建议 |
|---|---|---|
| 理念 | 永不信任,始终验证 | 从高危入口试点 |
| SDP | Controller + 网关,服务隐身 | 连接器模式先落地 |
| 微分段 | 工作负载级白名单 | 先审计后强制 |
| 身份 | IdP + 设备合规 + ABAC | 收敛身份源到单一 IdP |
| 对比 | ZTNA vs VPN | 按应用迁移,不留裸奔网段 |
| 落地 | 四阶段渐进 | 策略即代码,持续审计 |
零信任是一次信任模型的范式转移:从「网络位置」到「身份与上下文」,从「进入即放行」到「默认拒绝 + 单次授权」。ZTNA、微分段与身份驱动的策略三者结合,构成了现代企业最现实的防横向移动方案。对后端工程师来说,零信任不只是安全团队的事——每个服务都要有清晰的身份、最小化的暴露面和可审计的访问路径,这正是我们设计 API、网关与服务间通信时必须内化的基线。
继续阅读
探索更多技术文章
浏览归档,发现更多关于系统设计、工具链和工程实践的内容。