如何做好权限控制
小浩在梳理门户网站静态资源时,发现有些资源是仅内部员工可访问,有些资源是特定的注册客户可访问,还有些资源是匿名客户也可以访问。针对不同场景、不同用户,小浩该如何规划企业门户网站静态资源的权限控制呢?
权限控制类型
OSS有以下四种类型的访问权限控制。
设置Bucket ACL权限
针对门户网站的场景,小浩对企业门户网站需要存放的文件,进行了访问权限类型的梳理:
小浩首先需要创建一个Bucket用来存放文件,查看下表权限类型说明后,小浩希望设置Bucket ACL权限为私有。
-
配置Bucket ACL为私有支持以下两种模式:
创建时配置Bucket ACL步骤如下:
创建后修改Bucket ACL的步骤如下:
此时小浩内心有疑问,Bucket ACL已经设置为私有权限了,企业门户网站静态资源要求的是公共读权限,该如何处理呢?
- 首先我们回顾一下Bucket和Object的关系。在上传数据(例如文档、图片、音视频等)到OSS之前,需要创建一个存储空间(Bucket),然后将文件(Object)上传到该Bucket中。
-
Bucket已经设置为私有,那Object是不是只能设置为私有?答案是否定的,上传Object时可以选择继承Bucket ACL或指定Object ACL。
设置Object ACL权限
于是,小浩上传网站匿名可访问的静态资源到Bucket时,需要设置Object ACL权限为公共读。
配置Object ACL为公共读支持以下两种方式:
-
上传Object时设置Object ACL为公共读。
-
上传Object到Bucket后调整Object ACL。
设置Bucket Policy
小浩已经将存放文件的Bucket ACL设置为私有权限,如果要授权他人访问或使用自己的OSS资源,可以通过多种权限控制策略向他人授予资源的特定权限。
-
企业门户网站注册客户,需要有对部分视频有读的权限。可以通过Bucket Policy将指定用户设置为只读权限。假设该视频资源存放在OSS Bucket的video目录下,如下图所示,配置步骤如下:
-
使用OSS控制台,对指定用户设置为只读权限。满足企业门户网站部分资源设置为,仅注册客户为公共读权限。
-
企业门户网站匿名用户,需要有对部分视频进行播放的权限。可以通过Bucket Policy对匿名用户设置为只读权限。假设该视频资源存放在OSS Bucket的guest目录下。如下图所示,配置步骤如下:
-
使用OSS控制台,完成对匿名用户设置为只读权限,满足所有用户可以播放视频的需求。
设置RAM Policy
在日常运维过程中,考虑到IT团队内部成员需要登陆到OSS控制台,查看Bucket中的视频、监控指标等信息。为了安全考虑,小浩创建RAM子账号为“opsuser”,并授权“opsuser”子账号具有OSS 产品只读访问权限。
-
使用RAM控制台,完成RAM Policy的配置。小浩的同事即可通过子账号登陆阿里云,查看Bucket中的视频信息。
如何做好数据安全
数据加密
小浩通过权限设置的练习,已经熟悉四种权限控制使用的场景了。那如何保证数据的安全?小浩脑海里的第一个想法是,对数据加密。对象存储OSS目前支持以下两种数据加密方式。
客户端加密
客户端加密是指将文件(Object)发送到对象存储OSS之前在本地进行加密,使用客户端加密功能时,需要对主密钥的完整性和正确性负责。因维护不当导致主密钥用错或丢失,从而导致加密数据无法解密。
对于主密钥的使用,目前支持如下两种方式:
-
使用KMS托管用户主密钥
-
使用用户自主管理密钥
服务器端加密
设置服务器端加密,在存储空间(Bucket)上传文件(Object)时,OSS会对收到的文件进行加密,再将得到的加密文件持久化保存。当您通过GetObject请求下载文件时,OSS自动将加密文件解密后返回给用户,并在响应头中返回x-oss-server-side-encryption,用于声明该文件进行了服务器端加密。服务器端加密提供以下两种方式。
小浩对比之后,最终选择使用服务器端加密,加密方式选择使用OSS完全托管密钥进行加解密。配置步骤如下:
设置服务器端加密支持创建Bucket时配置和后期配置两种模式:
-
在创建Bucket时开启服务器端加密
-
对已创建的Bucket开启服务器端加密
跨域设置
企业门户网站静态资源存放在OSS Bucket里,企业门户网站和OSS Bucket的域名不同,企业门户网站调用OSS Bucket中的资源会存在跨域访问问题,导致资源无法访问。那什么是跨域访问?小浩该如何解决跨域访问问题呢?
跨域访问
跨域访问是浏览器出于安全考虑而设置的一个限制,即同源策略,如果缺少了同源策略,浏览器很容易受到XSS、CSRF等攻击。同源基于"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源。
对于http://www.aliyun.com/org/test.html的同源检测示例:
跨域设置配置步骤:
6. 单击确定。 |
防盗链
小浩又有一个思考,企业门户网站的部分静态资源(视频、图片)设置的是(Object ACL)公共读权限,如何防止其它网站盗用自己网站的静态资源呢?避免给公司造成损失(合法权益受损、服务器load增加)。
防盗链功能
对象存储OSS支持对存储空间(Bucket)设置防盗链,通过对访问来源设置白名单的机制,避免OSS资源被其他人盗用。
防盗链功能图解
-
未设置防盗链之前,其它网站盗用企业门户网站静态资源。
-
设置防盗链之后,其它网站无法盗用企业门户网站静态资源。
防盗链功能配置步骤
|
版本控制
小浩发现,在企业门户网站运维过程中,需要对托管在OSS Bucket上的静态资源进行删除、覆盖等操作。但出于数据安全的考虑,该如何对错误删除、覆盖的文件进行恢复呢?是否支持设置定期备份静态资源呢?
OSS提供的版本控制是针对存储空间(Bucket)级别的数据保护功能。开启版本控制后,针对数据的覆盖和删除操作将会以历史版本的形式保存下来。您在错误覆盖或者删除对象(Object)后,能够将Bucket中存储的Object恢复至任意时刻的历史版本。
文件覆盖场景
对于网盘类、在线协作类场景,文件会被频繁修改和覆写,针对文件的编辑会产生大量的临时版本。您可以使用版本控制功能找回某个时间点的版本。
删除数据场景
当前OSS不提供回收站功能,若出现数据误删除时,可使用版本控制功能,恢复已删除的数据。
版本控制配置步骤
-
新建Bucket时开启版本控制。
-
对已创建的Bucket开启版本控制。
暂停版本控制
开启版本控制后,可以随时暂停版本控制,这样可以停止在Bucket中继续累积同一Object的新版本。暂停版本控制后,OSS将为新生成的Object添加versionID为null的版本,已有的历史版本Object将继续保留。
恢复版本
在开启版本控制下的Bucket中删除Object时,历史版本Object不会被真正删除,而是产生一个删除标记来标识Object的当前版本是删除状态。此时可以在控制台恢复版本。
如何做好数据管理
完成前面的模块后,小浩已经将企业门户网站上的静态资源(用户视频、附件等文件)托管在OSS Bucket上。企业门户网站由OA、邮箱、门户(首页、新闻、关于我们)等模块组成。其中门户模块使用的是静态页面。
小浩思考了一下,门户网站都是高频访问的静态资源,如果通过OSS Bucket完成门户模块的静态网站托管,服务器只需要编译运行动态文件,动静分离可以大大降低网站服务器的负载,提高网站的访问速度。
假设门户网站的域名为https://www.aliyun.com,由存放在OSS Bucket里的index.html、news/index.html和about.html组成门户模块中的首页、新闻和关于我们菜单,点击OA和邮箱菜单自动会跳转到相应的域名提供对应的服务。小浩开始进行配置。
静态网站托管
动静分离场景架构
什么是子目录首页
在控制台点击目标Bucket时,您会看到您之前上传的文件和创建的文件夹,文件夹即为子目录,以Bucket文件结构如下为示例。本案例中,由于新闻菜单中的内容较多,我们可以通过创建news子目录,news作为新闻菜单的入口,news目录下index.html作为新闻菜单的首页,汇总所有的新闻。
您可以通过Bucket配置中的域名管理,进行绑定域名。假设您的域名是www.aliyun.com,Bucket域名为https://yourbucket.oss-cn-hangzhou.aliyuncs.com,域名绑定完成后会将用户域名(www.aliyun.com) CNAME指向OSS外网访问域名(https://yourbucket.oss-cn-hangzhou.aliyuncs.com)。
通过配置静态网站托管,设置默认首页为index.html,未开通子目录首页时,访问门户网站各个页面返回如下。当您访问https://www.aliyun.com/news 时,将会由Bucket根目录的index.html返回,不符合本场景的需求。
所以,本场景下,我们需要开通子目录首页。当您访问https://www.aliyun.com/news时,由Bucket子目录news中的index.html返回。
设置静态网站托管配置步骤
- 未开通子目录首页
为Bucket开启静态网站托管时,未开通子目录首页时,当您想要访问子目录subdir/时,系统不支持跳转至子目录下的index.html页面,而是跳转至根目录下的index.html页面。此外,当访问Bucket内不存在的文件时,返回默认错误页面。具体配置步骤如下:
- 已开通子目录首页
结合以上配置示例可知,为Bucket开启静态网站托管时,开通了子目录首页时,您希望访问子目录subdir/时,支持直接跳转至子目录下的index.html页面。此外,当访问Bucket内不存在的文件时,返回默认错误页面,并通过文件404规则指定访问不存在文件时的返回结果。具体配置步骤如下:
如何做好数据处理
目前企业门户网站的静态资源,依赖人工处理图片缩放、自定义裁剪、图片样式、视频转码、视频水印、视频审核、文档格式转换等。人工处理完毕后需要手动上传到OSS Bucket,处理过程繁琐,还会出错。是否有更便捷高效的方式去处理静态资源?小浩通过对象存储OSS产品功能了解到,对象存储OSS数据处理功能支持图片、文档、视频、CSV 等数据的常用处理和分析。
数据处理
图片处理参数
通过如下格式所示,结合固定格式与图片处理参数,完成图片的处理。
图片处理配置步骤如下:
媒体处理
媒体处理参数
媒体处理是由智能媒体管理(IMM)提供的对多种视频格式进行转换的处理能力。将原始视频上传保存到阿里云对象存储OSS上,通过OSS的RESTful数据处理接口x-oss-async-process,在任何时间、任何地点、任何互联网设备上对视频进行视频转码等处理。点击详见媒体处理参数。
使用REST API
您可以对文件进行异步处理时使用样式,示例如下。具体参考样式链接。
使用SDK
登录阿里云OpenAPI门户,选择智能媒体管理,可以生成媒体处理功能不同语言的示例代码。
文档处理
文档处理参数
文档转换是由智能媒体管理IMM提供的对多种文档格式进行格式转换的处理能力,将原始文档上传到阿里云对象存储OSS,通过OSS的RESTful数据处理接口x-oss-process和x-oss-async-process在任何时间、任何地点、任何互联网设备上对文档进行文档格式转换、在线预览、在线编辑等处理。 点击详见文档处理参数。
使用SDK
登录阿里云OpenAPI门户,选择智能媒体管理,可以生成文档处理功能不同语言的示例代码。
如何做好网站加速
企业门户网站的用户分布在全国,小浩通过视频访问数据发现部分用户因传输距离较远,导致上传和下载体验非常差。小浩该如何解决用户体验问题?
传输加速
小浩利用阿里云全球分布的云机房,使用OSS传输加速全球各地用户对存储空间(Bucket)的访问,经过智能路由解析至就近的接入点,使用优化后的网络及协议,为云存储互联网的上传、下载提供端到端的加速方案。
开启传输加速配置步骤
如何做好网站高可用
如果门户网站的静态数据存储在对象存储OSS上,动态数据存放在云服务ECS数据盘上。可能存在一台云服务器ECS不可用时,业务动态数据无法保证一致的问题。是否可以让两台云服务器ECS,同时去访问一个存储设备?那么,旧的企业门户网站的数据如何迁移到NAS上?小浩该如何解决该问题呢?
处理思路
为了避免ECS存储数据的单点故障,可以通过负载均衡创建监听,添加两台服务器ECS实例。两台ECS上仅仅部署WEB服务,共享同一个NAS文件存放动态数据。静态数据存储在对象存储OSS Bucket。
NAS实现多台ECS挂载
配置步骤
数据迁移
小浩已经将文件存储NAS挂载到ECS实例,那旧版企业版门户网站的动态数据怎么迁移上NAS呢?小浩查看了文件存储NAS数据迁移文档,根据本场景选择了非阿里云数据迁移至云上NAS,通过rsync命令行工具完成数据迁移。
配置步骤
假设ECS的公网IP是192.168.1.1,文件存储NAS在ECS上挂载的路径为/mnt/DirToSync。旧版企业门户网站要迁移的数据所在目录为DirToSync。
NAS回收站
小浩在使用对象存储OSS时,为了应对错误删除、覆盖的文件开启了版本控制。文件存储NAS中,是否也有类似功能可以实现对误删除文件的数据保护呢?
当您误删除通用型NAS文件系统中的文件后,可以通过NAS回收站恢复这些文件及其UID、GID和ACL等元数据信息。
开启回收站配置步骤:
开启回收站后,被删除的文件将自动进入回收站,并在规定的保留时间之后彻底删除。