什么是零信任?
零信任(Zero Trust)是一种安全理念,而不是一种所有安全团队都要遵循的最佳实践。零信任概念的提出是为了给云原生世界带来更安全的网络。零信任是一种理论状态,即网络内的所有消费者都不仅没有任何权限,而且也不具备对周围网络的感知。
零信任的基础
零信任网络中的所有用户,包括机器和人类,都需要通过一个密码学验证的身份。要是实践零信任,需要从引入用户身份开始,然后考虑限制用户的最小访问权限。零信任实践的基础是认证和授权,这是比起传统的安全策略来说,零信任中的认证变得更加严格,而授权将变得更加细化。举个例子,传统的授权是:“用户 A 可以访问数据中心 D 吗”,而在零信任的框架下将变成“在某个特定的时间点,在某个特定的地区,使用某个特定的设备的用户 A 可以访问某个特定应用中的某个特定文件吗?”
越来越细化的授权
在 Kubernetes 中,我们使用 RBAC 来管理权限。所有用户都是以组为基础来授予或拒绝访问权限,单个用户(服务账户)会被授予过多的访问权限。零信任的一个重要特征就是更细的粒度,基于角色来授予访问权限是不够安全的。我们需要细化用户对单一资源在限定时间内的访问权限。这正好与微服务背后的原则相契合——随着服务和数据被分解成更小的部分,就有可能允许我们细化地位服务授予访问权限。
有时间限制的授权
关于授权,我们往往会存在一种误解,即一个用户一旦被认证和授权,他就成了一个“受信任”的用户,该用户就可以随时的对系统进行访问。然后,在零信任网络中,没有受信任的用户或设备。用户的每一次访问都需要经过认证和授权。而且,授权还会有一个时间窗口,用户只能在这个规定的实践窗口中执行规定的动作。
如何在企业内实行零信任网络
因为网络是企业系统的命脉之一,牵一发而动全身,要在企业内实行零信任网络,通常需要战略高层管理人员接纳零信任,通过自上而下的方式强加给安全团队。然后渐进式的改进你的网络,从一个关键业务开始,使其变成零信任的。
在零信任网络里,默认是拒绝一切访问。需要在应用程序开发中,积极主动的允许来自应用程序的某些适当的请求。身份是零信任的基础,而不是网络。零信任的关注对象是访问点、身份认证与授权和攻击面。对于云原生应用,因为它们的生命周期短暂且是动态的,为了实现零信任,你必须为每个访问点配置一个规则,不断更新应用程序的证书和访问规则,这时候手动配置几乎是不可能的,你必须实现自动化。
在 IstioCon 2022 的 主题演讲 有提到, Istio 正在成为零信任的一个重要组成部分。其中最主要的是面向身份的控制,而不是面向网络的控制。这方面的核心原则在谷歌白皮书 《BeyondProd:云原生安全的新方法》 上有描写 。
如果我们能将身份概念扩展到用户,并为我们提供灵活而丰富的策略机制来指定、监控和跟踪访问控制,我们就能达到一个可操作的零信任架构 —— 将用户、服务和数据统一到一个管理层。我所工作的公司 Tetrate 创建了 Tetrate Service Bridge —— 可供大型组织使用的管理平面,也是践行了零信任的理念。
总结
零信任是一种安全理念,它的基础是认证和授权。但比起传统网络安全方法来说,零信任具有如下特点:
- 系统中的所有工作负载都有一个密码学验证的身份
- 零信任网络默认拒绝所有访问
- 具有更细粒度的访问授权。
为了在云原生应用中实行零信任,你需要:
- 自上而下的推行
- 从关键业务入口
- 建立自动化工具
参考
下面有一些资料你可以参考: