全文约4000字 阅读约8分钟
数据访问控制是零信任的最后环节和终极目标。基于零信任的数据访问控制,已经成为数据安全保护和治理的新方法。
但是,对于数据访问控制的实施问题,企业客户却不得不面对几种选择:
1)基于数据存储原生控制的方法:是指利用数据存储的原生控制能力,来构建自己需要的数据访问控制。企业客户可以自己动手构建DIY(自己动手)解决方案,也可以花钱购买数据访问编排解决方案。但都无法摆脱数据存储原生控制存在可观察性不足的问题。
2)基于数据访问代理的方法:通过在数据消费者(用户/应用程序)和数据存储之间建立独立的数据访问层,将访问控制与数据存储基础设施分离。这是目前主流的商用数据访问平台采用的方式,也是当前最被看好的数据访问控制方法。但传统的数据库代理技术主要用于南北向的流量控制,且难以适应于云原生微服务环境。
3)基于数据层边车的方法:将服务网格(Service Mesh)中的边车(Sidecar)技术理念,应用到数据网格(Data Mesh),专门解决云原生微服务环境中的东西向数据访问控制难题。数据层边车本质上充当应用程序和数据之间的断路器。尽管数据层边车还是发挥代理的作用,但它是为云原生架构和数据网格架构而设计的未来型代理。
虽然新一代技术常常代表了未来的方向,但是企业客户还是应该结合自身的实际情况,选择最适合的数据访问控制实施方案。
目 录
1.数据存储原生控制方法
1)DIY(自己动手)解决方案
2)数据访问编排解决方案
3)数据存储库的可观察性不足
2.数据访问代理方法
1)代理和数据库代理
2)SQL无感知数据库代理
3)SQL感知数据库代理
3.数据层边车方法
1)传统代理无法适应云原生环境
2)云原生世界需要数据层边车
3)数据层边车 vs. 数据库代理
01
数据存储原生控制方法
数据存储原生控制方法可以细分为两种方案:DIY(自己动手)解决方案+数据访问编排方案。
1)DIY(自己动手)解决方案
方法说明。DIY(自己动手)解决方案是指客户利用数据存储原生能力,自己动手构建客户需要的数据访问控制。
方法不足。使用原生能力构建DIY(自己动手)解决方案的问题在于:
2)数据访问编排解决方案
方法说明。数据访问编排解决方案是对原生数据存储能力进行编排的产品,只需要付费购买即可,无需客户自己的数据团队亲自动手实现它们。
方法不足。与后文介绍的数据访问代理方案相比,编排解决方案在许多方面受到限制:
3)数据存储库的“可观察性不足”
数据存储库存在“可观察性不足”的问题。
3.1)数据存储库日志通常被禁用
在传统的本地数据库和DBaaS(数据库即服务)中,日志的唯一来源通常是由数据存储库本身将活动记录到文件系统中。但是,日志记录通常会因为性能下降和PII泄密风险等原因而关闭:
3.2)DBaaS(数据库即服务)的可见性不足
DBaaS中的指标主要有两个来源,但都存在不足:
3.3)传统数据库部署的可见性不足
传统的数据库部署的确增加了一些可见性,如下所示。但由于性能影响或存储成本,这些日志通常会被禁用。
3.4)增强型数据库原生控制方法的不足
总而言之,数据存储原生控制在很多时候都靠不住。所以,数据访问代理方法才被广泛采用。
02
数据访问代理方法
1)代理和数据库代理
代理是位于客户端和服务器之间的拦截服务。当代理靠近客户端部署时,称为正向代理。当代理部署在离服务器更近的地方,使得客户端不知道服务器的来源时,它被称为反向代理。
数据库代理(ProxySQL、MaxScale等)基本上是一种反向代理,旨在为数据库、键值存储、消息队列提供安全性、可伸缩性、高可用性等优势。
图1-数据库代理
2)SQL无感知数据库代理
在高度分布式的数据存储库(如MongoDB和Cassandra)流行之前,数据库代理通过为后端数据存储库提供连接池,来实现扩展性和高性能。通过将请求路由到健康的数据后端,来确保高可用性,并减少故障转移时间。
此类数据库代理通常被称为L4层代理或SQL无感知代理,包括HAProxy、Nginx和类似工具。
3)SQL感知数据库代理
随着应用程序迁移到云端,数据量猛增,现代数据存储库开始提供可扩展性和高可用性功能,使用分布式Coordinator-Worker(协调器-工作节点)架构的数据分片和复制。
图2-Coordinator-Worker架构
为了保护应用程序逻辑免受底层拓扑变化的影响,ProxySQL和MaxScale等 SQL感知数据库代理开始受到关注。
SQL感知代理可以执行这类任务:通过将读查询定向到Worker并将写查询定向到Coordinator中的master,来执行SQL读查询/写查询的路由。
SQL感知代理也用于这些场景:需要在SQL层操作以缓存SQL查询的响应,以提高性能;或者重写和阻断某些SQL查询,以增加安全性。
事实上,目前主流的数据访问平台都采用了感知型数据库代理的方式。这也是当前最被看好的数据访问控制方法。
图3-基于数据库代理模式的数据访问平台
03
数据层边车方法
1)传统代理无法适应云原生环境
随着容器技术尤其是Docker的成熟,以微服务为可组合单元的面向服务架构(SOA)开始受到广泛欢迎。云原生应用程序开始使用微服务作为它们的构建模块,从而将自身用于持续集成和持续部署的DevOps方法。
虽然基于微服务的新架构带来了许多好处,但它们也暴露了挑战,特别是在安全和流量管理方面:
因此,在应用程序和数据存储库(数据库或数据仓库)之间部署代理的传统模型,在云原生的新世界中不再适用。
2)云原生世界需要数据层边车
在云原生世界中部署代理的思路是数据层边车(Sidecar),即采用边车模式部署的无状态拦截服务。
在云原生应用程序部署架构中,数据层边车本质上充当应用程序和数据之间的断路器,以保护数据存储库。
数据层边车诞生于云中,可以快速部署到客户环境中,并实时拦截对任何类型数据存储库(数据库、数据管道、数据仓库等)的所有请求,而不会影响性能和可扩展性。所有的集成和配置,都可以从统一控制平面进行集中管理。
由于数据层边车便于使用Kubernetes等服务编排工具进行部署,因此企业可以确保其所有存储库的数据保护始终处于开启状态。
虽然数据层边车仍然发挥代理的作用,但它的架构是为云原生架构而设计的:
图4-拦截方式对比:传统代理 vs. 数据层边车
如上图所示,数据层边车可以采取无状态方式运行,从而支持横向扩展和高可用性。
3)数据层边车 vs. 数据库代理
数据层边车与数据库代理相比,具有很多明显的优势:
(本篇完)