系列目录
引子
上一节“分布式架构-可靠通讯-零信任网络”里,我们探讨了与微服务运作特点相适应的零信任安全模型。本节,我们将从实践和编码的角度出发,介绍在前微服务时代(以 Spring Cloud 为例)和云原生时代(以 Istio over Kubernetes 为例)分别是如何实现安全传输、认证和授权的,通过这两者的对比,探讨在微服务架构下,应如何将业界的安全技术标准引入并实际落地,实现零信任网络下安全的服务访问。
注:本节内容快速看完即可。关注核心思路即可。主要看云原生Istio为例,是如何实现服务安全校验的。
一、建立信任
零信任网络里不存在默认的信任关系,一切服务调用、资源访问成功与否,均需以调用者与提供者间已建立的信任关系为前提。目前通用方案就是使用PKI:公开密钥基础设施(Public Key Infrastructure),基本结构如下图:
PKI基本结构由证书认证机构(certificate authority, CA)、证书持有者(certificate holder)、依赖方(relying party)三方构成:
- 1.CA是一个独立的可信第三方,为证书持有者签发数字证书,数字证书中声明了证书持有者的身份和公钥。CA在签发证书前应对证书持有者的身份信息进行核实验证,并根据其核验结果为其签发证书。
- 2.证书持有者向CA申请数字证书,并向CA提供必要的信息以证明其身份及能力,获得由CA签发的证书;证书持有者在与依赖方进行交互时,需向依赖方提供由CA签发的数字证书证明其有效身份。
- 3.依赖方是证书的验证方,依赖方与证书持有者进行交互(如建立通信连接)时,需获取证书持有者的数字证书,验证数字证书的真实性和有效性。依赖方可以指定其信任的CA列表,若证书持有者提供的数字证书不是受信CA签发的数字证书,依赖方将不认可该证书所声明的信息。
PKI 是构建传输安全层(Transport Layer Security,TLS)的必要基础。在任何网络设施都不可信任的假设前提下,无论是 DNS 服务器、代理服务器、负载均衡器还是路由器,传输路径上的每一个节点都有可能监听或者篡改通信双方传输的信息。要保证通信过程不受到中间人攻击的威胁,启用 TLS 对传输通道本身进行加密,让发送者发出的内容只有接受者可以解密是唯一具备可行性的方案。除了随服务节点动态扩缩而来的运维压力外,比起公众互联网中主流单向的 TLS 认证,在零信任网络中,往往要启用双向 TLS 认证(Mutual TLS Authentication,常简写为 mTLS),即不仅要确认服务端的身份,还需要确认调用者的身份。</