如何让1个外部用户访问某个OSS资源?
某大型企业A使用OSS作为后端资源存储平台,当该企业期望将内部数据分享给下游合作伙伴B,那么基于阿里云OSS平台,有多少种方式呢?
方式1:基于Bucket 以及Object ACL:
Bucket 所有者将需要分享的文件ACL设置为“Public”模式,那么外部用户可以直接访问该文件的URL,而不需要通过身份认证以及鉴权操作。
图1:配置对象的ACL
方式2:使用签名URL方式:
Bucket所有者设置待分享文件的签名url信息,外部用户接收到该url后,在指定的时间内访问该文件;
图2:设置对象的签名URL
方式3:使用RAM policy方式:
若下游合作伙伴也是阿里云用户,那么可以基于sts(Security Token Service)方式进行授权访问,企业A管理员创建角色Role A,并且指定企业B账号进行扮演该角色Role A,通知企业A管理员设置RAM Policy(如下),并且将该RAM Policy赋予给Role A。企业B管理员可以使用根账号或者子账号扮演角色RoleA,然后使用Assumerole返回的临时token以及secret ID信息在指定的时间段内访问企业A的资源。
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"oss:GetObject",
"oss:ListObjects",
"oss:GetObjectAcl"
],
"Resource": [
"acs:oss:*:*:test-resource"
],
"Condition": {}
}
]
}
方式4:使用Bucket Policy:
若下游合作伙伴也是阿里云用户,那么Bucket Owner可以直接基于该资源配置Bucket Policy策略,在策略中指定允许访问该资源的对象,以及允许的访问操作权限。
图3:设置Bucket Policy
Bucket policy 优劣势
针对用户访问资源的授权,我们列出了常见的4种不同的配置方式,那么这4种配置方式各有设么优缺点呢?
图5:4种配置方式的优劣势
Bucket Policy是什么?
默认情况下,所有阿里云OSS资源都是私有的,包括Bucket,对象。只有资源拥有者才能访问这些资源,另外资源的拥有者可以通过配置访问策略授权他人访问权限。
阿里云OSS提供的访问策略大致可分为基于资源的策略以及基于用户的策略两类。附加到资源(Bucket和对象)的访问策略称之为基于资源的策略。例如,Bucket Policy以及访问控制列表(ACL)就是基于资源的策略,另外也可以将访问策略附加到根账号下的子用户,这种策略称之为用户策略,例如:RAM Policy。
3.1 bucket policy简介
Bucket 的所有者可以通过设置Bucket Policy设置针对bucket以及bucket内对象的访问权限。
Bucket policy可以基于各种参数,例如“被授权账号/子用户,访问条件”等。附加到某个bucket的权限适用于该bucket内所有对象。设置Bucket Policy策略后,后续对该bucket的访问请求都将会受到Bucket Policy的限制。
3.2Bucket Policy配置过程
当前Bucket Policy只能在控制台进行配置图形化配置操作。选中某个对象,点击“授权”,或者点击“操作授权”,弹出如下配置对话框:
图6:添加“操作授权”
各个字段的含义如下表1所示:
字段 | 值 | 描述 | |
---|---|---|---|
授权资源 | 1. 若选中某个对象,直接点击“授权”,则此处会自动填充对应资源的路径; 2. 若点击“操作授权”,则需要输入对应的资源路径。 |
1.若资源为bucket时,“授权操作”作用于bucket以及bucket内所有子对象; 2. 若资源为对象或者目录,“授权操作”作用于该对象或者该目录下所有的子对象; |
|
授权用户 | 输入格式: 授权给账号:输入对应账号ID; 授权给子用户:输入对应子用户的ID |
Bucket Policy支持跨账号授权; 若授权给匿名用户,则勾选“所有用户”; |
|
授权操作 | 为了简化授权过程,oss针对常见的授权场景进行了简化操作,目前只提供“只读”、“读写”以及“完全控制”、“拒绝访问”操作。 | 1.“只读” 2.“读写”; 3. “完全控制” 4."拒绝访问" |
|
条件 | IP等于、IP不等于 | 当输入多个IP地址或者IP地址段时,用英文逗号分隔; |
3.3bucket Policy配置示例
相比于RAM policy,Bucket Policy支持在控制台直接进行图形化配置操作,并且Bucket 所有者直接可以进行访问授权。Bucket Policy常见的应用场景有如下几种:
- 向其他账号的子用户授权访问
- 向匿名用户授权于带特定IP条件限制的访问权限
1.向其他账号下的子用户授权
以下策略显示了bucket 所有者向其他账号下的子账号(UID:237683216696367672)授予只读权限的配置过程。
图7:向其他账号下的子账号授权
2.向匿名用户授权于带特定IP条件限制的访问权限
以下示例允许向匿名用户授予待IP限制的访问策略。例如,企业内部的机密文档,只允许在企业内部访问,不允许在其他区域访问。由于企业内部人员较多,针对每个人配合RAM policy,手工操作工作量非常大。因此基于bucket policy设置带IP限制的访问策略,是非常有效的。
图8:向匿名用户授权于带特定IP条件限制的访问权限
Tips:授予对bucket的匿名用户访问操作时需谨慎使用。若授予匿名访问权限不带条件限制,那么意味着世界上任何人都可以访问该资源.