如何做好数据安全
数据加密
小浩通过权限设置的练习,已经熟悉四种权限控制使用的场景了。那如何保证数据的安全?小浩脑海里的第一个想法是,对数据加密。对象存储OSS目前支持以下两种数据加密方式。
客户端加密
客户端加密是指将文件(Object)发送到对象存储OSS之前在本地进行加密,使用客户端加密功能时,需要对主密钥的完整性和正确性负责。因维护不当导致主密钥用错或丢失,从而导致加密数据无法解密。
对于主密钥的使用,目前支持如下两种方式:
服务器端加密
设置服务器端加密,在存储空间(Bucket)上传文件(Object)时,OSS会对收到的文件进行加密,再将得到的加密文件持久化保存。当您通过GetObject请求下载文件时,OSS自动将加密文件解密后返回给用户,并在响应头中返回x-oss-server-side-encryption,用于声明该文件进行了服务器端加密。服务器端加密提供以下两种方式。
加密方式 |
功能描述 |
使用场景 |
注意事项 |
费用说明 |
使用KMS托管密钥进行加解密(SSE-KMS) |
使用KMS托管的默认CMK(Customer Master Key)或指定CMK进行加解密操作。数据无需通过网络发送到KMS服务端进行加解密。 |
因安全合规的要求,需要使用自管理、可指定的密钥。 |
|
在KMS服务侧产生少量的KMS密钥请求费用。费用详情,请参见KMS计费标准。 |
使用OSS完全托管密钥进行加解密(SSE-OSS) |
使用OSS完全托管的密钥加密每个Object。为了提升安全性,OSS还会使用定期轮转的主密钥对加密密钥本身进行加密。 |
仅需要基础的加密能力,对密钥无自管理需求。 |
无 |
免费 |
小浩对比之后,最终选择使用服务器端加密,加密方式选择使用OSS完全托管密钥进行加解密。配置步骤如下:
设置服务器端加密支持创建Bucket时配置和后期配置两种模式:
- 在创建Bucket时开启服务器端加密
4. 单击确定。 |
- 对已创建的Bucket开启服务器端加密
4. 单击确定。 |
跨域设置
企业门户网站静态资源存放在OSS Bucket里,企业门户网站和OSS Bucket的域名不同,企业门户网站调用OSS Bucket中的资源会存在跨域访问问题,导致资源无法访问。那什么是跨域访问?小浩该如何解决跨域访问问题呢?
跨域访问
跨域访问是浏览器出于安全考虑而设置的一个限制,即同源策略,如果缺少了同源策略,浏览器很容易受到XSS、CSRF等攻击。同源基于"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源。
对于http://www.aliyun.com/org/test.html的同源检测示例:
URL |
访问是否成功 |
原因 |
是 |
协议、域名、端口相同 |
|
是 |
协议、域名、端口相同 |
|
否 |
协议不同(HTTPS) |
|
否 |
端口不同(22) |
|
否 |
域名不同 |
跨域设置配置步骤:
6. 单击确定。 |
防盗链
小浩又有一个思考,企业门户网站的部分静态资源(视频、图片)设置的是(Object ACL)公共读权限,如何防止其它网站盗用自己网站的静态资源呢?避免给公司造成损失(合法权益受损、服务器load增加)。
防盗链功能
对象存储OSS支持对存储空间(Bucket)设置防盗链,通过对访问来源设置白名单的机制,避免OSS资源被其他人盗用。
防盗链功能图解
- 未设置防盗链之前,其它网站盗用企业门户网站静态资源。
- 设置防盗链之后,其它网站无法盗用企业门户网站静态资源。
防盗链功能配置步骤
5. 单击保存。 |
版本控制
小浩发现,在企业门户网站运维过程中,需要对托管在OSS Bucket上的静态资源进行删除、覆盖等操作。但出于数据安全的考虑,该如何对错误删除、覆盖的文件进行恢复呢?是否支持设置定期备份静态资源呢?
OSS提供的版本控制是针对存储空间(Bucket)级别的数据保护功能。开启版本控制后,针对数据的覆盖和删除操作将会以历史版本的形式保存下来。您在错误覆盖或者删除对象(Object)后,能够将Bucket中存储的Object恢复至任意时刻的历史版本。
文件覆盖场景
对于网盘类、在线协作类场景,文件会被频繁修改和覆写,针对文件的编辑会产生大量的临时版本。您可以使用版本控制功能找回某个时间点的版本。
删除数据场景
当前OSS不提供回收站功能,若出现数据误删除时,可使用版本控制功能,恢复已删除的数据。
版本控制配置步骤
- 新建Bucket时开启版本控制。
开启版本控制后,OSS会为Bucket中所有Object的每个版本指定唯一的versionID。
|
- 对已创建的Bucket开启版本控制。
|
暂停版本控制
开启版本控制后,可以随时暂停版本控制,这样可以停止在Bucket中继续累积同一Object的新版本。暂停版本控制后,OSS将为新生成的Object添加versionID为null的版本,已有的历史版本Object将继续保留。
|
恢复版本
在开启版本控制下的Bucket中删除Object时,历史版本Object不会被真正删除,而是产生一个删除标记来标识Object的当前版本是删除状态。此时可以在控制台恢复版本。
|
练习实验:基于对象存储OSS实现企业门户网站托管
https://developer.aliyun.com/adc/scenario/exp/dd9b0b7a9419465ea92e702f3ca0a10e