数据保护
使用访问控制、加密、日志来分类、保护、监控数据资产。要保护静态数据和传输数据。
Checklist
- 使用基于身份的存储访问
- 使用Azure内置的数据加密
- 在数据传输过程中,需要全程加密
- 将密钥存在密钥保管库中,并采用RBAC以及审计策略
- 频繁更换密钥和秘密
Azure数据加密
- 静态数据
- 传输数据
关键点 - 是否有RBAC进行基于身份的存储访问控制
- 使用标准推荐的加密算法
- 使用安全的哈希算法
- 对静态数据进行分类和加密
- 加密虚拟磁盘
- 使用key encryption key来保护数据加密密钥 data encryption key
- 使用加密网络连接TLS HTTPS来加密所有的客户端和服务器通信,在Azure上都使用TLS 1.2
- 采用标准的加密算法,而不是自己开发加密算法, AES-128, AES-192, and AES-256
- 哈希算法:SHA-256, SHA-384, SHA-512
- 数据分类:基于分类进行加密、安全策略、审计
- 虚拟磁盘是否加密
- 存储账户是否基于身份进行访问
- 对密钥是否进行再次加密
- 传输过程中是否全程进行加密
- TLS是否用最新版本
Azure密钥和秘密管理
加密是安全最基本的手段,所以用于加密的密钥证书等等,也是至关重要的。
关键点
基于身份的加密密钥
将密钥和密码存在密钥保管库里面,并且控制其访问方式。
频繁地进行密钥更换,在密钥生命周期结束之后要即时替换。
基于身份的访问控制
保护加密密钥一般很容易被忽视,在应用程序代码里面管理密钥一般很难做到,一般会不小心就把敏感密钥发布到公共密钥库里面了。
建议使用基于身份的密钥管理,使用RBAC,来分配权限。
比如说,你需要将敏感数据存在Azure Storage Blob里面,你可以用AAD和RBAC来进行身份验证,所有想要访问这个Blob的人都要经过AAD的身份验证。
一般情况下,存储账户会使用SAS,SAS的token是由所有者创建的,每个资源都有自己的token,然后就可以用RBAC来限制访问。 SAS token有时间限制,也就是控制开放的窗口期。
密钥存储
在Azure Key Vault里面存储所有密钥的信息,数据加密密钥会在保管库中进行二次加密,从而来限制访问。
确保所有的密钥没有存在应用配置文件里面,或者CI CD 管道里面。开发人一般使用visual studio连接服务或者本地文件来访问密钥。
确保有流程去定期检测应用程序的代码扫描检测。可以使用Credential Scanner
运维模型
- 要有一个专门的SecOps团队来管理密钥
- 确定密钥管理方式,有三种密钥管理,微软托管密钥、客户自己管理密钥、自带密钥
- 密钥是否定期进行轮换
- 密要生命周期到期之后是否有机制去进行替换。
最佳实践
静态数据加密
Azure数据加密模型
- 客户端加密
客户端加密是Azure平台意外的加密,应用的数据加密是允许在客户的数据中心或者应用服务上的,数据传输到Azure的时候就已经加密好了。
对于客户端加密,云服务提供商不能访问加密的数据,也不能解密,所以需要客户自己去维护加密密钥 - 服务器端的加密
有三种加密方式:
- 服务托管密钥,方便管理,服务本身自带的
- 客户托管秒,自己管理密钥,BYOK,自己也可以随时生成些新的密钥
- 在客户自己的硬件上面,服务托管的密钥,客户自己管理密钥的存储硬件,这种叫做host your own key,但是这种配置非常复杂,目前大多数的Azure服务不支持这种模型。
Azure磁盘加密
磁盘加密可以加密windows和Linux虚拟机。
Azure存储加密
Azure Blob,file share可以在服务器端和客户端都进行加密。
Azure 存储服务加密在数据存进去的时候就进行加密,在进行读取的时候会自动进行解密。Storage用的256位的AES加密方式。
客户端的Blob加密
客户端进行blob加密的方式有很多,你可以使用Azure 存储客户端库。
Azure SQL 数据库加密