3. 信任边界模型:传统边界 vs 零信任边界
这一章我们来聊聊信任边界。说白了,就是“你信谁”的问题。我入行那会儿,公司内网就是的“圣地”,外网是“蛮荒之地”,边界上架一道防火墙就完事了。但后来呢?一次内部服务器被横向移动攻破,敏感密钥就躺在明文配置文件里……嗯,从那以后我再也不信什么“内网安全”了。
为什么要讨论信任边界?因为密钥的存、取、用,全受这个边界的约束。你选的传统边界模型,还是零信任模型,直接决定了密钥的暴露面和攻击路径。
3.1 传统边界模型:城堡与护城河
传统模型就像一座城堡。护城河(防火墙)是唯一的防线,城墙内的所有东西默认都可信。你想想看,只要突破了边界,内部就是任人宰割的羔羊。
- 物理边界清晰:企业内网 ↔ 外网之间只有少数几个出入口
- 内部无认证:一旦进入内网,IP 地址就是“身份证”
- 密钥集中存储:数据库、配置文件、HashiCorp Vault 等直接暴露在内网
传统边界的致命问题在于:它假设“内网的人是好人”。但现在的攻击早就绕过边界了——钓鱼、社工、供应链投毒……一旦有人进入内部,边界就形同虚设。
3.2 零信任边界:永不信任,始终验证
零信任的核心思想就一句话:“不因位置而信任”。不管你在内网、外网、VPN 里还是隔壁机房,每个请求都要验证身份、设备、上下文。
我记得有一次帮银行设计密钥管理系统,他们坚持用零信任模型。每个服务调用密钥服务前,必须出示 JWT + 客户端证书 + 请求指纹。坦白讲,初期部署很麻烦,但上线后一次严重漏洞都没出过。
- 最小权限原则:每个主体只能访问完成工作所需的最小密钥集合
- 持续验证:每次访问密钥都要重新评估信任(不是一次认证管永久)
- 网络透明:不区分内网外网,所有流量都经过加密和网关
- 微隔离:即使一台主机被攻破,也无法横向移动窃取其他密钥
| 维度 | 传统边界 | 零信任边界 |
|---|---|---|
| 信任依据 | 网络位置(内网=可信) | 身份+设备+行为上下文 |
| 密钥暴露面 | 大:所有内网应用都能访问 | 小:仅授权主体 + 动态权限 |
| 横向移动风险 | 高:突破边界后畅通无阻 | 低:每一步都有墙 |
| 密钥存储模式 | 集中式服务,内网可达 | 分布式 + 基于身份的访问控制 |
| 审计粒度 | 粗:只能看到谁用了网络 | 细:每笔密钥操作都有详细日志 |
3.3 边界内密钥的信任假设
不管是传统还是零信任,密钥本身在“被信任的边界内”如何存储和传递,都有一个隐性假设。我把它拆成三个层次来讲:
3.3.1 静态存储假设
传统方法:密钥直接写成配置文件、环境变量。零信任下:密钥必须加密存储,访问时通过身份验证解密。
# 错误示范(传统边界内信任)
DB_PASSWORD=super_secret_123
# 正确做法(零信任下)
# 使用 KMS 或 Vault 访问,且每次都需要临时凭证
aws kms decrypt --ciphertext-blob fileb://encrypted.bin
我曾经看到团队把密钥直接写在 Dockerfile 里,还心想“反正内网别人拉不到”。结果一次 CI/CD 管道泄露,密钥全被扒走。你想想看,这个信任假设有多脆弱。
3.3.2 运行时信任假设
运行时中,密钥在内存中的生命周期。传统模型下,密钥可以常驻内存直到进程退出。零信任下,密钥应该使用后立即擦除,甚至不支持缓存。
- 传统:密钥对象在整个请求生命周期内都可访问
- 零信任:密钥仅在使用瞬间可用,用完清空
3.3.3 传输信任假设
传统边界内传输密钥常常使用明文,因为“都在内网嘛,没事”。零信任下,所有密钥传输都必须加密。即使在同一台机器上的两个进程之间,也要用 TLS 或 Unix Domain Socket + 权限控制。
| 传输场景 | 传统假设 | 零信任要求 |
|---|---|---|
| 服务间调用 | 内网直连,HTTP 明文 | mTLS 加密 |
| 日志输出 | 密钥可能被意外打印 | 严格过滤,禁止密钥出现在任何日志流 |
| 备份/容灾 | 备份存储不加密 | 备份时加密,且密钥链不能出现在同一备份中 |
看到这张图你就明白两个模型的核心差异了:左边是大边界,进去就裸奔;右边是小单元,每个单元都得验证。我个人更倾向零信任,尤其是做密钥管理的时候——你总不希望密钥被一个已经攻破的容器直接读到吧。