把OSS作为一个文件共享服务器共享指定目录给别人
阿里云OSS服务器授权使用这一块,每次配置时都要查一遍资料,关键是官网的资料又多又杂又不够详细,以至于每次都要折腾半天,很浪费时间,所以还是记录一下吧。
这次的需求是要共享一些大文件给到供应商去下载,公司之前是通过第三方网盘来实现的,但是拒反馈说网盘上传很慢,普通用户上传会有带宽限制,所以想自己弄一个文件共享服务器。
通常有自己的文件存储服务器的话可以借助FTP等工具来管理文件,也可以自己搭建私人网盘如seafile nextcloud等来处理。但是这些要提供外网访问如果没有自己机房的一些配置环境,一般就是购买第三方云服务器来作为文件存储服务器或者私有网盘。再加上这个需求比较急,所以就直接用OSS来处理,下面是具体实现。
1.选择一款客户端工具
OSS有一些客户端工具来管理文件,参见官网:https://help.aliyun.com/document_detail/61872.html?spm=a2c4g.11174283.6.1289.21367da2t6fPJn
这里选用ossbrowser,它支持windows也支持linux系统,如下图:
下载对应系统版本,这里下载windows版的,下载之后解压,运行oss-browser.exe,如下图:
2.阿里云控制台相关创建与配置
首先是创建OSS的Bucket,命名为test-tmp,得到如下信息:
预设OSS路径:oss://test-tmp
EndPoint:oss-cn-shenzhen.aliyuncs.com
Bucket:test-tmp
区域:华南1
然后到访问控制页面,新建一个用户:test-tmp,注意保存生成的AccessKeyID和AccessKeySecret。
再新建一个自定义策略可以管理test-tmp这个Bucket的资源,策略内容如下:
{
"Statement": [
{
"Action": "oss:*",
"Effect": "Allow",
"Resource": [
"acs:oss:*:*:test-tmp",
"acs:oss:*:*:test-tmp/*"
]
}
],
"Version": "1"
}
再把自定义的这个策略授权给刚创建的用户。
接着就可以使用这个用户来登录到ossbrowser进行管理了,如下图填写对应信息:
3.权限控制
以上只有一个管理Bucket的账号,一般就是给内部人员来使用的,提供给到外部人员(供应商)去下载那就要做权限的控制了,一般就是给只读权限。
参考官网说明:https://help.aliyun.com/document_detail/92270.html?spm=a2c4g.11186623.6.1290.43517dc1XAGq7o
这里有两种方式可以把文件共享给别人,一种是临时授权。如下图,选中要共享的文件或目录,选择”更多”—>“生成授权码”。
如下图,按照提示还要新建一个具有这个目录权限的角色才能指定分配成功。
还是到控制台里RAM访问控制页面去新建,如下:
创建之后还要给角色分配对应目录权限,参考如下策略:
{
"Statement": [
{
"Action": [
"oss:GetObject",
"oss:ListObjects"
],
"Effect": "Allow",
"Resource": [
"acs:oss:*:*:test-tmp/home/test/*",
"acs:oss:*:*:test-tmp"
]
}
],
"Version": "1"
}
之后在授权码那里选择新建的这个角色就可以生成授权码了。
接着使用授权码来登录:
这种方式有个问题,就是授权码时间设置最大就是3600秒,也就是一个小时就过期了,而大文件往往下载会超过一个小时,过期之后还没处理完就又得重新生成。
这时候可以使用另一种非临时的授权–简化Policy授权。
在配置Policy授权之前,首先要给当前登录的用户分配RAM和STS的相关权限,如下图:
接着,跟前面一样选中要共享的文件或目录,选择”更多”—>“简化Policy授权”,弹出如下页面对话框。
这里注意命名规则是不能使用”_”这个下划线的,但是这里又是根据目录名自动给你命名,而目录下是允许有下划线的,就会出现命名不规范,”确定授权”按钮就不能点击,但是又没有明确的提示。搞得我以为是当前登录的账号没有权限操作呢,然后修改了各个版本的策略都不行。
确定权限和命名之后,选择授权有三项:子用户,用户组和角色。可以新建一个子用户,但是这里要配置邮箱来发送邮件。也可以在控制台里新建用户或者用户组/角色(跟前面新建用户一样注意保存AccessKeyID和AccessKeySecret),这里选择授权用户,“确定授权”之后,控制台里对应用户的权限管理列表里自动会添加这里的Policy授权策略,如下:
4.其他的坑
简化Policy授权其实就是多了一个页面处理,之后会自动给生成策略。
我一开始想的是自己新建用户自己分配自定义的策略,这里关键就是自定义策略里要能够限制权限到指定的目录里头,但是配置里写到绝对路径了,用这个账号登录上去就是没有权限访问。
策略内容如下:
{
"Statement": [
{
"Action": [
"oss:GetObject",
"oss:ListObjects"
],
"Effect": "Allow",
"Resource": [
"acs:oss:*:*:test-tmp/home/test/test-file/*",
"acs:oss:*:*:test-tmp/home/test/test-file"
]
}
],
"Version": "1"
}
之后搜官网资料,看到这里有个例子:https://help.aliyun.com/document_detail/100680.html?spm=a2c4g.11186623.6.628.14ca39fcA8qz8h
按照这里“对Bucket app-base-oss下带有前缀user1/的Object可列举、可下载,但无法下载其他前缀的Object。”的说法,是可以访问到app-base-oss/user1/* 这级目录,而不能访问app-base-oss下的其他目录的。但看这里的配置权限都已经是到了app-base-oss这个Bucket的整个权限了,就算是按照从上往下匹配规则来处理,这里的配置也说不过去,因为这样其实没必要再配置第二行的资源权限了。
实际验证,配置如下:
{
"Statement": [
{
"Action": [
"oss:GetObject",
"oss:ListObjects"
],
"Effect": "Allow",
"Resource": [
"acs:oss:*:*:test-tmp/home/test/test-file/*",
"acs:oss:*:*:test-tmp"
]
}
],
"Version": "1"
}
之后用分配了这个权限的账号去登录,根本就没有限制到指定目录,整个Bucket都可以访问到。
所以这里官网资料也是个坑啊。
再对比通过简化Policy授权自动生成的策略内容如下:
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"oss:ListObjects"
],
"Resource": [
"acs:oss:*:*:test-tmp"
],
"Condition": {
"StringLike": {
"oss:Prefix": "home/test/test_file/*"
}
}
},
{
"Effect": "Allow",
"Action": [
"oss:Get*",
"oss:List*"
],
"Resource": [
"acs:oss:*:*:test-tmp/home/test/test_file/*"
]
}
]
}
总结:OSS还是很不错的,虽然文档有点不好找,但相对其他的已经很好了,至少在官网上能够搜到相关文档,总好过想找都没地方找。
最后,分享一些阿里云服务活动:
云产品通用红包:https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=wbq4iya3
建站优惠:https://www.aliyun.com/jianzhan/?userCode=wbq4iya3
高性能云服务器特惠:https://promotion.aliyun.com/ntms/act/enterprise-discount.html?userCode=wbq4iya3
商标服务:https://tm.aliyun.com/?userCode=wbq4iya3
新用户专享:https://promotion.aliyun.com/ntms/act/shoppingcart.html?userCode=wbq4iya3