企业数据安全治理,除了熟悉法律法规条文,信息采集最小化,服务入口明确隐私协议外,更多的是需要建设内部基础能力,如数据识别、分类分级、数据加密、权限管控等数据安全的基础能力。
本文数据为中心的理念,围绕数据识别、分类分级、基础防护几个方面,结合开源软件做一次梳理和功能演示,希望能帮助有需要的人员对数据安全有个直观的了解。
在数据识别基础上,建立数据资产大盘,实现数据资产风险识别、监测、运营的资产全生命周期管理;
在数据分类分级的基础上,对不同数据资产进行分类、分级,将优势资源投入到关键资产的安全防护上;
在数据安全基础防护方面,除了应具有基础设施和架构的安全稳固外,基于数据识别和分类分级,对存储、传输的敏感数据进行加密防护、账号权限管控、数据脱敏和分发管控,结合内外部风险变化,最终走向数据安全风控之路。
在大数据时代的今天,如何做好数据识别、分类,在这个基础上建立数据资产全生命周期管理是很多企业面临的挑战。比如企业内部有多少数据库表明文存储手机号字段、有多少接口对外暴露且有手机号字段,这些数据库表、接口等资产又面临哪些风险,如何做到全生命周期的风险管控。针对结构化数据,如数据库表中字段识别、半结构化数据,如日志中的数据识别、非结构化如图片、音视频文件的数据识别,在识别能力的覆盖范围、识别准确率、对性能的影响等方面,这对很多企业还是有不小的挑战。
数据识别可以通过关键字、正则、算法等实现,网上文章很多,以及一些大厂也有成熟的识别技术和方案,从落地实现上主要还是基于业务场景,从数据类型上看主要分为结构化、半结构化、非结构化的数据识别。
结构化:关系型数据库
半结构化:日志数据、JSON数据、XML文档等
非结构化:HTML网页、办公文档、图片、音视频文件等
ShardingSphere是apache顶级开源项目,旨在构建异构数据库上层的标准和生态。它关 注如何充分合理地利用数据库的计算和存储能力,而并非实现一个全新的数据库。ShardingSphere 站在 数据库的上层视角,关注他们之间的协作多于数据库自身。
连接、增量和可插拔是 Apache ShardingSphere 的核心概念。
ShardingSphere-Proxy定位为透明化的数据库代理端,提供封装了数据库二进制协议的服务端版本,用于完成对异构语言的支 持。目前提供 MySQL 和 PostgreSQL
安装
下载ShardingSphere‐Proxy 的最新发行版。解压缩后修改conf/server.yaml和以config-前缀开头的文件,如:conf/config-encrypt.yaml 文件,进行字段加密配置,其他配置如分片规则、读写分离规则配置暂不讨论。Linux 操作系统运行 bin/start.sh,可以指定proxy端口,bin/start.sh 3308.
敏感字段配置
(base) gengdeMacBook-Pro:conf js2thon$ mysql -h127.0.0.1 -uroot -P3308 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 13 Server version: 8.0.20-Sharding-Proxy 4.1.0 Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show tables; +----------------------+------------+ | Tables_in_encrypt_db | Table_type | +----------------------+------------+ | t_encrypt | BASE TABLE | +----------------------+------------+ 1 row in set (0.03 sec) mysql> select * from t_encrypt; +----------+---------+-------------+ | order_id | user_id | phone | +----------+---------+-------------+ | 10 | 0 | 18516014911 | | 11 | 1 | 18516014922 | | 12 | 2 | 18516014933 | | 13 | 3 | 18516014944 | | 14 | 4 | 18516014955 | +----------+---------+-------------+ 5 rows in set (0.09 sec) mysql> select * from t_encrypt; +----------+---------+--------------------------+-------------+ | order_id | user_id | phone_cipher | phone | +----------+---------+--------------------------+-------------+ | 10 | 0 | uFZ1RGQfxsUM+GUJqI5rlQ== | 18516014911 | | 11 | 1 | SGxnMaUHY/HR50hJcYp6Vg== | 18516014922 | | 12 | 2 | Z5NBefdS9WN3Bl6p45R1Dw== | 18516014933 | | 13 | 3 | SKqYOUF4dxloUH5M9t/wEg== | NULL | | 14 | 4 | 4q+dOa+bxUTFSzX6AOjvUg== | NULL | +----------+---------+--------------------------+-------------+
Hashicorp Vault解决了管理敏感信息的问题,如数据库凭证和API密钥就是需要以安全的方式存储和提供给应用程序的敏感数据,Vault支持许多secret引擎,部分如下:
Key-Value: 简单的静态键值对
动态生成的凭据:由Vault根据客户端请求生成
加密密钥:用于使用客户端数据执行加密功能
Vault安装配置较为简单,这里主要列下相关配置信息:
数据库链接配置
角色配置
获取数据库凭证
使用动态凭证登录验证
(base) js2thondeMacBook-Pro:Downloads js2thon$ mysql -u v-my-r-owFmZ3LFu -pM8DdaYZXYRU-rNIm2CbQ mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1379 Server version: 5.6.41-log MySQL Community Server (GPL) Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
上面在Vault配置了用户只有SELECT权限,验证可以正常查询
mysql> use mysql_test; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed mysql> show tables; +----------------------+ | Tables_in_mysql_test | +----------------------+ | account | +----------------------+ mysql> select * from account; +------+------+ | id | name | +------+------+ | 100 | abc | +------+------+ 1 row in set (0.00 sec)
执行数据插入操作,因为没有权限Vault报错。
mysql> insert into account values(101,'def'); ERROR 1142 (42000): INSERT command denied to user 'v-my-r-owFmZ3LFu'@'localhost' for table 'account'
Vault作为kms提供加解密接口,通过调用接口实现数据加解密,Vault数据密钥的创建可参考官网文档,此处忽略。
Vault管理后台密钥创建
加解密接口调用Python实现
本文从数据识别、分类分级、配置管理、存储字段加密这个流程梳理下来,其实需要横向和纵向扩展的还非常多,统一密钥管理、账号权限、资产大盘、风险监测和运营管理,这些组成了数据安全的基础能力。上面也只是罗列了一些开源工具的能力,只是做了单点的简单功能演示,没有详细进一步去了解实现机制和优劣势,后续有精力再做深一步的研究,也希望有落地实现的同行交流实际经验,如在架构方案设计、异构适配、性能稳定性等方面的多维度实践探索。