数据库安全,是指以保护数据库系统、数据库服务器和数据库中的数据、应用、存储,以及相关网络连接为目的,防止数据库系统及其数据遭到泄露、篡改或破坏的安全技术。
数据库是企业最为核心的数据保护对象。与传统的网络安全防护体系不同,数据库安全技术更加注重从客户内部的角度出发做安全,其安全要求包括了保密性、完整性和可用性,即CIA(Confidentiality, Integrity, Availability)的三个方面。
但对于传统数据库服务而言,要保证达到这些安全要求是复杂且困难的,需要从前端(业务)到后端(数据库以及服务器)各方面的整改和体系化的建设才能符合高标准的安全需求,例如等保三级等合规性要求。这同时也意味着对客户而言,要投入巨大的人力、物力、财力。
如果在云端就能拥有这些安全能力,客户就无需为以上安全建设成本担忧。腾讯云数据库对数据库安全技术进行统一支持后,所有客户均可复用,从而减少客户的数据库安全成本投入。而腾讯云数据库PostgreSQL到底提供哪些数据库安全能力呢?本文将主要从数据安全,实例安全两方面进行详细介绍。
数据安全
TDE数据加密
透明数据加密(Transparent Data Encryption,以下简称 TDE)提供文件级别的加密,可以做到对数据库上层的应用透明,而存储在硬盘上的数据是加密的,对磁盘数据读取和写入时透明地进行加解密,且这个过程中用户无需自行修改业务代码。
透明数据加密常用于解决一些安全合规问题,如PCI DSS、等级安全保护等要求静态数据需要被保护的场景。
腾讯云数据库 PostgreSQL 通过向用户申请使用 KMS(Key Management Service)服务中保存的主密钥,生成 DEK(Data Encryption Key)密文与 DEK 明文对云产品加密所使用的密钥进行数据加密和解密。
图:信封加密流程图
此类加密方案被称为信封加密(Envelope Encryption),即用另一个密钥对密钥进行加密。信封加密是一种应对海量数据的高性能加解密方案。其可通过生成 DEK 来对本地数据进行加解密,保证了业务加密性能的要求,同时也由 KMS 确保了数据密钥的随机性和安全性。
所有的加密解密操作均由数据库在内存中进行,每一次数据库重启以及存在关闭内存的操作时,均会重新从 KMS 获取密钥材料。本地存储中不保存任何可用于解密的密钥材料。
目前PostgreSQL社区版本并不提供数据透明加密的功能,而腾讯云数据库PostgreSQL在内核中实现了透明加密的能力,并且通过密钥托管于用户的KMS服务中,进一步降低了数据被破解的风险,确保数据安全。
字段加密
数据加密是针对整体实例级别的加密功能,加密范围大,则覆盖范围广。虽然有部分业务也无需将整体实例进行加密,但需要重点针对一些特殊数据进行加密存储。腾讯云数据库PostgreSQL支持基于pgcrypto 插件针对字段进行加密的功能。
PostgreSQL中,pgcrypto是contrib下的一个插件,它提供了一些加密解密函数,可以实现服务器端的数据加密解密。用户可以在SQL语句中调用这些函数来完成数据的加密和解密。
在使用pgcrypto中的加密函数过程中,可以加密比较重要的字段,提高数据的安全性。
pgcrypto模块提供的加密函数有以下几类:通用Hash函数,Password Hash函数,PGP加密函数,Raw加密函数,随机数据函数。
整体来看,字段加密可以有效地防止重点敏感数据泄露,适用于密码、关键数据等加密场景。
数据脱敏
有些情况下,有些表的特定列含有敏感数据(如用户信息表中的用户手机号)。毫无疑问,只有指定用户才有权限看到这些敏感数据,其他用户则只能看到脱敏后的数据。如果此时采用数据列级加密,则需要客户端也介入进来进行实现,否则加密和解密实现比较繁琐。
为减少客户业务代码工作的参与,对于此类场景腾讯云数据库PostgreSQL支持客户直接在PostgreSQL中进行配置实现。
第一种方式:通过视图脱敏的方案进行操作,如通过查询语句,将指定字段进行字符串处理。代码如下:
hehe => SELECT id,name,SUBSTRING(phone_number, 1,3) ||'****'||SUBSTRING(phone_number, 7,4) as phone_number FROM t; id | name | phone_number ---- ---------- -------------- 1 | zhangsan | 180****2321 1 | lisi | 136****2321 1 | | 177****2423 1 | wangwu | 177****2423(4 rows)
第二种方式:通过postgresql_anonymizer插件能力实现,实现对数据脱敏的需求。
行级安全策略
RLS(ROW Level Security) 是PostgreSQL 9.5版本之后的新增特性,提供了基于行的安全策略,限制数据库用户的查看表数据权限。在其他数据库中,对用户的权限管控均在表级别,例如:限制某个用户只能查询某个表。而采用RLS后,不同的用户访问一个表可以看到不同的数据。
默认情况下,表没有任何安全策略限制。这样用户根据 SQL 特权系统具有对表的访问特权,对于查询或更新来说其中所有的行都是平等的。当在一个表上启用行安全性时,所有对该表选择行或者修改行的普通访问都必须被一条行安全性策略所允许(不过,表的拥有者通常不服从行安全性策略。如果表上不存在安全策略,如果没有配置安全策略,所有的数据查询和更新都会禁止,但是对全表进行操作的命令,比如 TRUNCATE 和 REFERENCES 不受影响。
行安全性策略可以针对特定的命令、角色或者两者。一条策略可以被指定为适用于ALL命令,或者查询(SELECT)、 插入(INSERT)、更新(UPDATE)或者删除(DELETE)。同一个策略可分配多个角色,并且通常的角色成员关系和继承规则也适用。
行级安全策略可适用于在针对多个数据混合存储于同一张表内,又需要根据用户类型进行查看或者读写权限进行分类限制的场景。腾讯云数据库PostgreSQL通过行级安全策略则可以有效避免数据被意外篡改和操作,最大程度上保护数据安全。
实例安全
安全组访问策略
安全组是一种有状态的包含过滤功能的虚拟防火墙,用于设置单台或多台云数据库的网络访问控制,是腾讯云数据库提供的重要网络安全隔离手段。安全组是一个逻辑上的分组,客户可以将同一地域内具有相同网络安全隔离需求的云数据库实例加到同一个安全组内。
安全组访问策略可以有效的控制访问数据库的来源IP地址,设置黑白名单,允许指定的网络段、IP地址访问,拒绝风险地址的访问。
扫描下方二维码即可获得安全组配置指南。
图:安全组配置指南
角色权限访问控制
在大企业中,数据库资源面向不同的业务提供服务,而不同的业务隶属于不同的小组或者部门,此时如何在统一的账号下管理不同的业务资源就成为了安全权限管理的一大难题。
腾讯云数据库PostgreSQL访问管理 CAM 则可以用于帮助客户安全管理腾讯云账户下资源的访问权限。通过 CAM,客户可以创建、管理和销毁用户(组),并通过身份管理和策略管理控制指定用户可以使用的腾讯云资源,进而达到权限分离的目的。这种权限管理方式是典型的PBAC(基于策略的访问控制),可以实现资源级粒度的控制。
客户可以通过子帐号实现不同的账号管理不同的服务来规避以上的问题。默认情况下,子帐号没有使用云服务的权利或者相关资源的权限。因此,腾讯云数据库PostgreSQL支持创建策略来允许子帐号使用他们所需要的资源或权限。针对某一个用户、某一个资源、某一个操作均可以做到精细化的控制。进而避免越权操作,让所有的用户仅可操作自己权限范围内的资源。
网络隔离
云数据库 PostgreSQL 支持使用私有网络来实现更高程度的网络隔离控制,搭配使用安全组和私有网络将极大提升访问 PostgreSQL实例的安全性。
私有网络是用户在腾讯云上建立的一块逻辑隔离的网络空间。在私有网络内,用户可以自由定义网段划分、IP 地址和路由策略,进而实现资源级的网络隔离。
部署在私有网络中的 PostgreSQL实例默认只能被同一个私有网络中的 CVM 访问,若 CVM 与 PostgreSQL实例不在同一个私有网络,也可以通过申请外网的方式进行访问,考虑到网络安全的问题,不建议采用外网的方式进行数据库访问,若必须采用外网访问 PostgreSQL实例,请配合安全组来实现客户端的访问控制。
VPC的网络基础设施还可以防止DDoS攻击。当用户使用外网连接和访问 PostgreSQL实例时,可能会遭受 DDoS 攻击。针对这一问题,腾讯云数据库提供流量清洗和封堵处理功能,完全由系统自动触发和结束。当腾讯云数据库安全系统认为用户实例正在遭受 DDoS 攻击时,首先会启动流量清洗功能,如果流量清洗无法抵御攻击或者攻击达到封堵阈值,则会进行封堵处理。
扫描下方二维码即可获得私有网络配置指南。
图:私有网络配置指南
实例删除防呆
“删库跑路” 是在数据库行业中经常被人拿出来调侃的一句话,其核心原因就是在于传统数据库的管理手段单一,很容易出现运维人员对实例进行删除,导致实际业务受到巨大损失。
云上数据库支持实例回收站能力,当用户出现了实例删除,并不会直接将数据完全清理,而是会在回收站呆上几天。这样避免了误操作或者恶意操作导致的实例无法回收情况。当实例进入回收站后,业务出现异常无法访问,则可帮助客户及时发现问题,进而抓紧时间挽救。
同时腾讯云数据库结合云安全访问策略,使实例的隔离与下线接口掌握在不同权限的负责人手中。这样做可对高危操作进行管理隔离,避免单一人员风险导致的数据库安全问题。
除了通过访问控制策略之外,腾讯云数据库还可以基于商业流程服务BPaaS 与云函数SCF的结合形式,在云上实现审批流服务,使高危操作都受到审批流的管理。
整体来看,以上数据库实例安全的防呆措施,可避免95%以上的实例意外风险,充分保障数据库的稳定运行。
总结
数据库安全能力提升任重道远,如何确保数据库在正常对外提供服务的同时,不断提高安全防护能力也是腾讯云数据库一直以来在创新突破的目标。
如今,腾讯云数据库丰富的安全策略组合,可帮助客户有效降低在数据库安全方面的投入成本,使得客户轻松享用一系列安全能力。
﹀
﹀
﹀
-- 更多精彩 --
腾讯云在PostgreSQL领域的‘‘再次突破’’
腾讯云在PostgreSQL领域的‘‘再次突破’’
腾讯云数据库协同微信云托管,助力业务降本增效
又拿奖了!腾讯云原生数据库TDSQL-C斩获2021PostgreSQL中国最佳数据库产品奖
↓↓点击阅读原文,了解更多优惠