开发者学堂课程【数据库安全:阿里云数据库安全保障方案】学习笔记,与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/69/detail/1170
阿里云数据库安全保障方案
内容介绍:
一、阿里云链路的数据库安全保护
二、云端数据库安全管理:SSL+TDE
三、开始和配置
四、云端数据库安全管理:VPC、安全白名单、用户名/密码
一、阿里云链路的数据库安全保护
图中是阿里云的各种类型的数据库,这里不是列的很全,不是2DB是整个阿里数据库,这里罗列了的各项交易链的主要数据库,包括IDs、PolarDB、AnlyticDB、GDB、Redis、MongoDB还有很多的数据库,这里面没有列全。有一系列的数据库的安全解决方案,帮使用者去避免各种类型的数据安全事件。
1.SSL/TDE
第一个先看一下左边这两个SSL和TDE,它可以保证数据在公网传输的时候保持安全,即便有人拿到了的数据包,它也不知道里面是什么数据。如果数据库的访问需要在公网上传播的话,也可以考虑启用SSL。
另外就是TDE,它是对的数据落盘进行加密,即便磁盘发生了物理的丢失,拿到盘的人可能也不知道里面存的是什么样的数据。
2.账号和实例安全
再来看一下纵向的右边的几个,越靠近最里层越贴近新数据库的,先来看一下账号和实例安全。第一层是第一层保障,最靠近数据库的这一层保障,任何一个人访问数据库,首先都要有用户名和密码。但是根据的经验来看,其实也有人在数据库访问的时候,密码直接是空的,也有这种情况,这种其实是非常不安全的。另外还有数据库的账号其实在权限控制上可以做到非常细致的级别,可以做到库级别、表级别、月级别,然后在很多的企业级数据库里面都会提供一些能力,就是密码的复杂度检测以及密码的过期更新时间这些功能,这些功能都可以帮助保证数据库的账号更加的安全,然后还有一些其它的这类问题,包括账号和IP的组合访问配合度,完整的审计都可以帮助形成完整的保证账号和实例安全。
3.DNS服务
再上面一层是数据库的安全访问DNS服务,DNS服务后面会详细的展开去讲,它可以帮助企业实现统一的安全、高效的数据管理访问方案。当企业的人数越来越多的时候,下面一层的数据库的账号管理、库、表、链的权限管理以及密码的管理都会非常复。试想一下,如果公司有200人,数据库里面有各种各样的账号,一般可能有几十个账号,是有不同的业务系统在使用。这里有一个问题,如果其中有成员转岗或离职,它原来知道的账号,是否需要把账号的权限回收或者密码改掉。其实通常是不改的,因为可能账号改掉会影响别的业务,这种情况其实非常常见,数据管理dms后面会介绍一下它怎么去避免钻研类情况导致的账号的不安全的情况。
4.网络控制
再往上一层网络控制,数据库的实例会采用最小访问的原则,就是尽可能最小访问的原则,只让需要访问的应用服务器来访问数据库就可以。这里有几种方式,第一个是vpc应用隔离包括白名单,安全组的配置都可以帮助实现目的。
5.阿里云大安全系统
最上面一层是整个的阿里的大安全系统,云盾可以帮阻隔离一般性的攻击,包括暴力破解等等这种一般性的空间,它会帮助保护起来,另外包括金融业环境,它还有一些特殊的物理和网络的隔离方案,会让的数据库更安全,另外堡垒机的安全以及RAM子账号等等都是属于阿里云的大安全体系,保障的数据库安全,让整个的数据库在最下面处于一个比较安全的情况。
二、云端数据库安全管理:SSL+TDE
1.SSL链路加密
内外部数据全链路加密
防止数据在传输时被窃取,最高支持TLS v1.2
可强制使用SSL
无需配置和管理证书,即开即用
建议在互联网和经典网络中开启,增强安全性
SSL加密在以下情况下可能会用的比较多。第一个是如果数据库需要通过公网来访问,或者在阿里云的环境下,需要通过经典网络访问,也是建议要开启SSL的。SSL的好处是每一次的数据访问和数据交互都是加密数据在传输的,如果没有使用SSL,数据如果在公网上流通的话,如果数据包被人截取了,截取还是比较容易的,当数据包被人截取的时候,别人就可以通过的数据包打开看里面传输的什么数据,这是非常不安全的。SSL进行配置很简单,之后会简单讲SSL如何加密。
SSL有以下这么几个特点,第一个是它会让客户端和的数据库之间的所有的通信都是加密的,第三方或者中间人拿到数据是无法解密的。另外,它传输的数据是不能被篡改的,有一类攻击叫做中间人的攻击,它可以利用和服务端的通信来伪造一些内容往服务端发送一些通信,窃取其想要窃取的数据,SSL加密的方式可以帮助避免这种情况。
SSL加密的配置也比较灵活,可以指定某些账号必须强制地开启SSL,有些账号是需要远程访问的,可以强制一些账号开启SSL,另外阿里云已经把SSL的配置已经做到了非常简单。如果配置过https、配置过网站的Hpbs服务的话,其实会发现SSL配置其实还是比较复杂,还是有一定门槛的。
但是在阿里云上想把的数据库的SSL能力打开非常简单,基本上是请随便点几下就可以了,是属于一个无需配置和管理证书并且急用的方式使用,在公网文件和经典网络中是建议开启SSL,增强它的安全性。
2.TDE存储加密
支持实例级存储加密
oSS中的备份数据双层加密(InnoDB & Object)
密钥(Data Key)保存在KMS中,支持BYOK
一键开启,对应用透明
TDE原理上比较简单,就是当任何的数据漏盘的时候,它都会通过密钥进行对数据进行加密,所以在使用了TDE加密以后,即便数据在物理上或者在磁盘的层面被用户获取也没有关系,数据也没有关系,因为数据是加密存储的,拿到数据的人如果没有密钥也是打不开的。
TDE有以下几个特点,第一个它可以支持实例级别的加密,有的数据库类型支持表级别的存储加密。另外,如果把TDE的数据通过备份的方式用TDE加密的数据通过SSL的数据备份,SSL还可以在再次进行加密,可以达到一个双重加密的效果。
另外密钥的管理目前只是两种方式,第一个就是就是使用kms系统进行密钥管理,另外也支持BYOK,用自己的密钥来进行数据加密,这样安全级别又高了一个级别,这样即便有人拿到了数据,没有密钥也不知道里面存的是什么内容。
三、开始和配置
1.登录RDS管理控制台。
2.在页面左上角,选择实例所在地域。选择地域
3.找到目标实例,单击实例ID。
4.在左侧菜单栏中单击数据安全性。
5.选择SSL/TDE标签页。
另外它的开启和配置也非常简单,首先登录一下RDS的控制台,这样选择需要进行SSL加密或者TDE加密的实例,点击实例,然后在左侧的菜单选择数据库的安全性。如果需要开启SSL的话,点击SSL开通就可以了,点击了开通就可以下载系统的数字证书,数字证书里面有公钥,拿到数据证书给到客户端,客户端可以通过SSL上来连接数据库实例。
另外TDE的配置也是很简单的,TDE里面点击开通就可以了,但是如果要进行公网的网络传输,一定是推荐使用SSL的。因为如果不使用的话,所有的数据在公网上传输只要被人截取了,它就可以把数据包打开,看到里面是什么样的数据。现在在公网或者说在整个的互联网上,SSL加密也是一个非常普遍通用的数据安全加密的方式。比较大一点的网站基本上全部都会使用SSL对数据通信进行加密,基本上访问的绝大多数网站都是使用https的,https底层就是使用的SSL加密。HTTPS使用的SSL进行加密和其它的云数据库使用的SSL加密的方式和原理都是一样的,简单来说就是所有的通信,所有的client端和server端的通信都会通过session key对通信的内容进行加密传输,session key是cnk加密的方式是一个对称的加密,也就是client端发的任何请求都会用session key先进行加密,然后传输给server端,server端会用session key把请求解码出来看是什么样的请求,然后在数据库里面进行SQL的执行。执行完SQL它要把数据的结果返回给客户端的时候,也会用session key进行对称加密,然后传输到客户端,SSL加密有一个难点,session key在server端和client端进行传输以及session key传输过去的方式。简单的说大概就是在SSL的客户端client端,client端首先会随机的生成一个session key,clint端是需要拿到server端的数字证书的,数字证书里面有server的公钥,拿到了server的公钥之后,client端对它自己随机生成的session key进行一次加密,加密生成一个密文,密文再传回给server端,server端接收到密文之后可以使用自己的私钥对密文进行解密。如果公网上抓数据包的方式拿到了,拿到了4个session key用公钥加密的密文是没有用的,因为没有私钥是解不开session key的,这样client和server就session key并且达成了一致,并且第三方也已经拿不到。
这里还有另外一个问题,因为Client端是要用公钥进行加密的,client端保证公钥就恰好是server端的公钥,而不是一个第三方的欺骗方给的公钥。这个问题其实是一个关于SSL原理上比较复杂的一个问题,这也是为什么除了需要把公钥传递过来,还需要传递数字证书的原因。他要把自己的公钥信息传给client端,server端还要把数字证书也传给client端。数字证书的作用就是保障公钥恰好就是server端的公钥,至于保障的机制是什么,这里就不详细解释了,如果对问题感兴趣可以近一步的去Google一下SSL底层的原理是什么?
四、云端数据库安全管理:VPC、安全白名单、用户名/密码
1.VPC提供隔离的网络环境
不同应用有独立网络环境
本地环境可以通过专线打通
2.安全白名单更细粒度的网络控制
控制哪个IP、网段、资源组访问数据库。最小化权限与访问原则
3.用户名/密码进入数据库的钥匙
密码复杂度管理/定期更新机制管理
实现列/表/库多级别权限控制
可以与IP地址组合授权
可以通过ssrpd的方式保证的链路上数据传输是安全,来看一下在链路上怎么样去尽可能减少不必要的人、不必要的服务器、不必要的机器来访问的数据库用最小化的原则来访问数据库的服务器最小化。如果只有应用A需要访问数据库,只需要对部署服务器A的IP打开限制。一共有三种方式配置方式,第一个是通过vpc提供天然的应用网络隔离进行保障,只有相同的应用或者一个类型的应用才会放在一个VPC里面,只有在VPC内部的服务器才能访问VPC内的数据库,这样的话就保证了跟应用无关的应用就不能再访问数据库,这样就多了一层保障。
第二个就是在VPC下面更细粒度的,对于数据库A,应用服务器只有应用服务器ABC这三台机器需要访问数据库,数据库实例上就可以以白名单的方式配置只这三台服务器可以进行访问。使用最小化原则尽可能的保障,最少的应用能访问到数据库,这样会更安全。
第三个就是配置合理的用户名密码,因为是用户名密码是进入数据库的钥匙,也是最后一道关卡,要配置合理的用户名密码来访问数据库。合理的用户名的最佳实践这里有几个,第一个就是要尽可能的去保证的密码的复杂度,如果经常使用同样的密码,这是非常不安全的。密码如果只有数字或者只有字母的简单的组合,也是比较危险。第二个要有定期的密码更新机制,定期对密码进行更换,建议的用户名密码可以细致到库、表、链的级别,如果一个应用系统它不需要访问 A类或者不需要访问B列,在给用户名密码授权的时候,就把AB两列的权限给去掉,可以保证最小化的访问的时限,不需要访问列A列B的用户就不给其访问的权限,用户密码也可以和IP地址组合,一般用的比较少。