oss子账号_企业级共享网盘新思路——玩转OSS控制访问

本文介绍阿里云OSS五种访问控制方法及其使用场景,您可根据需求灵活组合,快速搭建企业级共享网盘。

不久前阿里云网盘Aliyundrive宣布公测,在个人网盘市场重掀热潮,“不限速&2T大容量”的特性让众多网友直呼“良心盘”。相较于个人用户存储、备份的需求,企业用户在“可控制的资源共享”方面的需求更为强烈。阿里云网盘Aliyundrive依托的阿里云存储,多年来深耕于云存储技术,打造了稳定、可靠、安全、低成本的云存储产品,支持一套严谨稳定的权限控制访问方法,满足企业级用户海量存储、可控访问的需求,可作为企业级的共享网盘。

下面介绍五种阿里云OSS访问控制方法及其使用场景。

用户组独立授权——RAM policy

权限控制最简单粗暴的方法就是“人以群分,独立授权”——想要什么再给什么,保证单账号的最小访问权限粒度。这就是RAM Policy。

RAM(Resource Access Management)是阿里云提供的资源访问控制服务。RAM Policy是基于用户的授权策略。通过设置RAM Policy,您可以集中管理您的用户(比如员工、系统或应用程序),以及控制用户可以访问您名下哪些资源的权限,比如限制您的用户只拥有对某一个Bucket的读权限。

简单来说,RAM policy为每一个访问者提供一个子账号,使用用户组管理子账号,并授予该用户组相应的bucket访问权限;

例如,某公司A希望其合作公司B可以访问自己名下OSS内的数据,但又不方便开放RAM账号给公司B。此时,公司A可创建一个RAM角色,并授权RAM角色OSS的访问权限。公司B可用RAM用户扮演这个RAM角色,实现跨账号访问的目的。

    步骤1:公司A创建RAM角色并授予OSS访问权限

    • 公司A需要先创建一个拥有OSS访问权限的RAM角色,用于给公司B的RAM用户扮演。

    • 公司A登录RAM控制台。

    • 单击RAM角色管理 > 创建RAM角色。

    • 在创建RAM角色面板的选择类型步骤,选择可信任实体类型为阿里云账号,之后单击下一步。

    • 在配置角色步骤,配置如下参数:

      • 角色名称:填写角色名称。本示例设为:admin-oss

      • 备注:角色的备注信息,选填。本示例置空此项。

      • 选择云账号:选择其他云账号,并配置公司B的阿里云账号UID。本示例设为:17464958576******

    • 单击完成。

    • 在创建完成步骤,单击为角色授权。

    • 在添加权限面板选择策略为系统策略,找到并单击AliyunOSSReadOnlyAccess(只读访问对象存储服务(OSS)的权限)策略。在右侧已选择列表看到该策略后,单击确定。AliyunOSSReadOnlyAccess为访问OSS下所有Bucket的策略,若您仅希望您的客户访问部分Bucket或部分目录,可自定义策略。详情请参见基于RAM Policy的权限控制。

步骤2:公司B创建RAM用户并授予允许扮演RAM角色的权限

  • 公司B需要创建一个可以扮演角色的RAM用户,用以扮演公司A创建的RAM角色。

  • 公司B登录RAM控制台。

  • 单击人员管理 > 用户 > 创建用户。

  • 在创建用户页面填写登录名称和显示名称,并选中控制台登录,根据您的需要配置控制台的登录信息。

  • 单击确定。

  • 在跳转的用户信息列表选中刚创建的用户,单击添加权限。注意保存RAM用户信息,防止丢失。

  • 在添加权限面板选择策略为系统策略,找到并单击AliyunSTSAssumeRoleAccess(调用STS服务AssumeRole接口的权限)策略。在右侧已选择列表看到该策略后,单击确定。

步骤3:公司B的RAM用户登录控制台并扮演公司A的RAM角色

  • 公司B需使用刚创建的RAM用户登录阿里云控制台,并切换身份为公司A创建的RAM角色。

  • 公司B使用RAM用户登录阿里云控制台,步骤请参见RAM用户登录控制台。

  • 鼠标移至右上角的头像上,单击切换身份。

  • 在角色切换页面输入RAM角色信息后,单击切换。RAM角色信息如下:

    • 企业别名/默认域名:填写公司A的企业别名或默认域名,详情请参见基本概念。本示例以默认域名为例,输入默认域名为1178810717******.onaliyun.com1178810717******为公司A阿里云账号的UID。

    • 角色名:输入公司A创建的RAM角色admin-oss

  • 打开OSS管理控制台即可管理公司B的OSS资源。

跨账号批量授权——Bucket Policy

RAM Policy能精细控制单个用户的访问权限,但用户人数众多时,通过RAM policy授权的工作量巨大。如下图跨部门之前的数据共享场景下,部门A将存储在example-bucket存储空间(Bucket)中的数据共享给部门B的用户,并允许部门B的用户下载数据,但不允许写入和删除。这种跨账号、大批量的授权场景可采用Bucket Policy。

Bucket Policy是基于资源的授权策略。相比于RAM Policy,Bucket Policy操作简单,支持在控制台直接进行图形化配置,并且Bucket拥有者直接可以进行访问授权,无需具备RAM操作权限。Bucket Policy支持向其他账号的RAM用户授予访问权限,以及向匿名用户授予带特定IP条件限制的访问权限。

3ba2d6967a78d4c760d423ac66d6c00d.png

上例中,A部门的管理员可以通过配置Bucket Policy,授予B部门用户允许下载,但禁止写入和删除共享数据的权限。可使用如下设置参数:

  • 授予A部分用户上传数据权限。

1db856bf45f5b81219d588d997d88cb4.png

  • 授予B部门用户允许下载、禁止写入和删除权限。

1db856bf45f5b81219d588d997d88cb4.png

联盟用户访问授权——STS临时授权

什么是联盟用户?联盟用户是指来两种用户:

  • 本地身份系统管理的用户。假设您是一个移动App开发者,您的App的用户、您的企业本地账号、第三方App的用户,将这部分用户称为联盟用户。

  • 您创建的能访问到您阿里云资源应用程序的用户。

对于联盟用户的授权,通过阿里云STS服务为阿里云账号(或RAM用户)提供临时访问权限管理。

OSS可以通过阿里云STS(Security Token Service)进行临时授权访问。通过STS,您可以为第三方应用或子用户(即用户身份由您自己管理的用户)颁发一个自定义时效和权限的访问凭证。

上述例子中,用使用STS授权哦用户直接访问OSS的流程如下:cb711a4552b47019dc2a8765abb913b6.png

  1. App用户登录。App用户和云账号无关,它是App的终端用户,App服务器支持App用户登录。对于每个有效的App用户来说,需要App服务器能定义出每个App用户的最小访问权限。

  2. App服务器请求STS服务获取一个安全令牌(SecurityToken)。在调用STS之前,App服务器需要确定App用户的最小访问权限(用RAM Policy来自定义授权策略)以及凭证的过期时间。然后通过扮演角色(AssumeRole)来获取一个代表角色身份的安全令牌(SecurityToken)。

  3. STS返回给App服务器一个临时访问凭证,包括一个安全令牌(SecurityToken)、临时访问密钥(AccessKeyId和AccessKeySecret)以及过期时间。

  4. App服务器将临时访问凭证返回给App客户端,App客户端可以缓存这个凭证。当凭证失效时,App客户端需要向App服务器申请新的临时访问凭证。例如,临时访问凭证有效期为1小时,那么App客户端可以每30分钟向App服务器请求更新临时访问凭证。

  5. App客户端使用本地缓存的临时访问凭证去请求OSS API。OSS收到访问请求后,会通过STS服务来验证访问凭证,正确响应用户请求。

STS临时授权方法的好处是:

  • 无需透露云账号(或RAM用户)的长期密钥,安全可靠。

  • 可以自定义、管理每个联盟用户的最小访问权限,遵循最小权限原则。

  • 凭证过期自消亡,无需额外管理和运维。

STS临时授权访问OSS的详细操作过程可参考阿里云OSS文档。

访问白名单——防盗链

假设某两个电商网站经营者A和B共享存储在OSS上的图片资源,这些资源在互联网环境中开放,但是不想被其他网站盗用。这时候可以使用OSS防盗链功能。

对象存储OSS支持对存储空间(Bucket)设置防盗链,即通过对访问来源设置白名单的机制,避免OSS资源被其他人盗用。

防盗链的原理是HTTP和HTTPS header中表头字段Referer的地址。当浏览器向Web服务器发送请求时,referer字段表示请求发起页面的链接。例如在阿里云OSS文档页面,F12开发者模式下查看某请求referer字段,可以看到该字段值为“https://help.aliyun.com”。

a3ee6d29acad6da138c4256a51457669.png

OSS根据浏览器附带的Referer与用户配置的Referer规则来判断允许或拒绝此请求,如果Referer一致,则OSS将允许该请求的访问;如果Referer不一致,则OSS将拒绝该请求的访问。例如,某个Bucket设置了Referer为https://10.10.10.10.com:

  • 用户A在https://10.10.10.10.com嵌入test.jpg图片,当浏览器请求访问此图片时会带上https://10.10.10.10.com的Referer,此场景下OSS将允许该请求的访问。

  • 用户B盗用了test.jpg的图片链接并将其嵌入https://127.0.0.1.com,当浏览器请求访问此图片时会带上https://127.0.0.1.com的Referer,此场景下OSS将拒绝该请求的访问。

可使用阿里云控制台对bucket设置白名单,授权页面如下:

c1c925fccb20c0e123c8c482b6aaf099.png

注意:

  • 在Referer框中,填写域名和IP地址,支持通配符星号(*)和问号(?),多个Referer以换行分隔。示例如下:

    • 配置为www.aliyun.com,可匹配如www.aliyun.com/123、www.aliyun.com.cn等以www.aliyun.com为前缀的地址。

    • 配置为*www.aliyun.com/,可匹配http://www.aliyun.com/和https://www.aliyun.com/的地址。

    • 通配符星号(*)表示使用星号代替0个或多个字符。例如配置为*.aliyun.com,可匹配如help.aliyun.com、www.aliyun.com等地址。

    • 通配符问号(?)表示使用问号代替一个字符。例如配置为aliyun?.com,可匹配如aliyuna.com、aliyunb.com等地址。

    • 支持带端口的域名或IP,例如www.example.com:8080、10.10.10.10:8080等地址。

  • 在允许空Referer框中,选择是否允许Referer为空。空Referer表示HTTP或HTTPS请求中,不带Referer字段或Referer字段为空。
    如果不允许空Referer,则只有HTTP或HTTPS header中包含Referer字段的请求才能访问OSS资源。

例如,设置的访问白名单为http://oss.jinxiangtest.com,设置referer不允许为空,bucket中创建一个名为testoss.txt的文件。此时可以通过curl命令不加参数访问,代表通过浏览器直接打开URL。由于设置了不允许Referer为空,系统报错,确认报错为AccessDenied,证明不允许Referer为空的设置生效。

curl http://oss.jinxiangtest.com/testoss.txt

系统报错显示类似如下,说明防盗链生效。a07b64766c4f27e08e8fa2553f6e0db5.png

更多防盗链效果验证和错误排查,可参考如何验证OSS的Referer防盗链是否生效和OSS防盗链(Referer)配置及错误排除。

最小object级别的读写控制——读写权限ACL

OSS为权限控制提供访问控制列表(ACL)。ACL是授予Bucket和Object访问权限的访问策略。可以在创建存储空间(Bucket)或上传文件(Object)时配置ACL,也可以在创建Bucket或上传Object后的任意时间内修改ACL。

Bucket ACL

权限制中文名称权限对访问者的限制
public-read-write公共读写任何人(包括匿名访问)都可以对该Bucket中的Object进行读、写、删除操作;所有这些操作产生的费用由该Bucket的Owner承担,请慎用该权限。
public-read公共读,私有写只有该Bucket的Owner或者授权对象可以对存放在其中的Object进行写、删除操作;任何人(包括匿名访问)可以对Object进行读操作。
private私有读写只有该Bucket的Owner或者授权对象可以对存放在其中的Object进行读、写、删除操作;其他人在未经授权的情况下无法访问该Bucket内的 Object。

Object ACL

Object ACL是Object级别的权限访问控制,默认情况下继承自其所在bucket的读写权限。PutObjectACL操作通过 Put 请求中的x-oss-object-acl头来设置,这个操作只有Bucket Owner有权限执行Object ACL的四种访问权限含义如下:

权限值中文名称权限对访问者的限制
public-read-write公共读写该ACL表明某个Object是公共读写资源,即所有用户拥有对该Object的读写权限。
public-read公共读,私有写该ACL表明某个Object是公共读资源,即非Object Owner只有该Object的读权限,而Object Owner拥有该Object的读写权限。
private私有读写该ACL表明某个Object是私有资源,即只有该Object的Owner拥有该Object的读写权限,其他的用户没有权限操作该Object。
default默认权限该ACL表明某个Object是遵循Bucket读写权限的资源,即Bucket是什么权限,Object就是什么权限。 


多权限控制策略

当Bucket同时存在多个权限控制策略时,策略优先级如下:

  • 不通过浏览器访问

    • 若同时存在RAM Policy、Bucket Policy及防盗链时,可忽略防盗链配置。

    • 针对某个Object,RAM Policy和Bucket Policy的所有策略都允许访问则为允许;任一策略禁止,则为禁止。

  • 通过浏览器访问

    • 若同时存在RAM Policy、Bucket Policy及防盗链时,针对某个Object,所有策略都允许访问则为允许;任一策略禁止,则为禁止。

以上五种权限控制策略,可灵活组合,相互补充和制约,精细控制每一次的数据访问请求。现在,打开阿里云OSS控制台,定制属于您的企业级共享网盘吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值