把OSS作为一个文件共享服务器共享指定目录给别人

把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系统,如下图:

把OSS作为一个文件共享服务器共享指定目录给别人_第1张图片

下载对应系统版本,这里下载windows版的,下载之后解压,运行oss-browser.exe,如下图:

把OSS作为一个文件共享服务器共享指定目录给别人_第2张图片

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进行管理了,如下图填写对应信息:

把OSS作为一个文件共享服务器共享指定目录给别人_第3张图片

登录进去看到以下这个页面就可以上传/下载管理文件了。
把OSS作为一个文件共享服务器共享指定目录给别人_第4张图片

3.权限控制

以上只有一个管理Bucket的账号,一般就是给内部人员来使用的,提供给到外部人员(供应商)去下载那就要做权限的控制了,一般就是给只读权限。

参考官网说明:https://help.aliyun.com/document_detail/92270.html?spm=a2c4g.11186623.6.1290.43517dc1XAGq7o

这里有两种方式可以把文件共享给别人,一种是临时授权。如下图,选中要共享的文件或目录,选择”更多”—>“生成授权码”。

把OSS作为一个文件共享服务器共享指定目录给别人_第5张图片

如下图,按照提示还要新建一个具有这个目录权限的角色才能指定分配成功。

把OSS作为一个文件共享服务器共享指定目录给别人_第6张图片

还是到控制台里RAM访问控制页面去新建,如下:

把OSS作为一个文件共享服务器共享指定目录给别人_第7张图片

创建之后还要给角色分配对应目录权限,参考如下策略:

{

    "Statement": [

        {

            "Action": [

                "oss:GetObject",

                "oss:ListObjects"

            ],

            "Effect": "Allow",

            "Resource": [

                "acs:oss:*:*:test-tmp/home/test/*",

                "acs:oss:*:*:test-tmp"

            ]

        }

    ],

    "Version": "1"

}

之后在授权码那里选择新建的这个角色就可以生成授权码了。

接着使用授权码来登录:

把OSS作为一个文件共享服务器共享指定目录给别人_第8张图片

这种方式有个问题,就是授权码时间设置最大就是3600秒,也就是一个小时就过期了,而大文件往往下载会超过一个小时,过期之后还没处理完就又得重新生成。

这时候可以使用另一种非临时的授权–简化Policy授权。

在配置Policy授权之前,首先要给当前登录的用户分配RAM和STS的相关权限,如下图:

把OSS作为一个文件共享服务器共享指定目录给别人_第9张图片

接着,跟前面一样选中要共享的文件或目录,选择”更多”—>“简化Policy授权”,弹出如下页面对话框。

把OSS作为一个文件共享服务器共享指定目录给别人_第10张图片

    这里注意命名规则是不能使用”_”这个下划线的,但是这里又是根据目录名自动给你命名,而目录下是允许有下划线的,就会出现命名不规范,”确定授权”按钮就不能点击,但是又没有明确的提示。搞得我以为是当前登录的账号没有权限操作呢,然后修改了各个版本的策略都不行。

确定权限和命名之后,选择授权有三项:子用户,用户组和角色。可以新建一个子用户,但是这里要配置邮箱来发送邮件。也可以在控制台里新建用户或者用户组/角色(跟前面新建用户一样注意保存AccessKeyID和AccessKeySecret),这里选择授权用户,“确定授权”之后,控制台里对应用户的权限管理列表里自动会添加这里的Policy授权策略,如下:

把OSS作为一个文件共享服务器共享指定目录给别人_第11张图片

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

如下:
把OSS作为一个文件共享服务器共享指定目录给别人_第12张图片

按照这里“对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

你可能感兴趣的:(运维)