前言
前文我们学习了minio的基本概念与搭建,那么如果我们有n个系统,n个系统都在使用同一套minio,那么如何来控制每个系统的访问权限呢???本文则重在解决此问题。
Minio客户端的使用
首先我们得先学习一下Minio客户端的使用,因为权限控制是在客户端下使用的。MinIO客户端快速入门指南
MinIO Client (mc)为ls,cat,cp,mirror,diff,find等UNIX命令提供了一种替代方案。它支持文件系统和兼容Amazon S3的云存储服务(AWS Signature v2和v4)。简单来说就是命令行控制minio的操作,如本文的添加权限控制。
相关命令:
- ls 列出文件和文件夹。
- mb 创建一个存储桶或一个文件夹。
- cat 显示文件和对象内容。
- pipe 将一个STDIN重定向到一个对象或者文件或者STDOUT。
- share 生成用于共享的URL。
- cp 拷贝文件和对象。
- mirror 给存储桶和文件夹做镜像。
- find 基于参数查找文件。
- diff 对两个文件夹或者存储桶比较差异。
- rm 删除文件和对象。
- events 管理对象通知。
- watch 监听文件和对象的事件。
- policy 管理访问策略。
- session 为cp命令管理保存的会话。
- config 管理mc配置文件。
- update 检查软件更新。
- version 输出版本信息。
1.下载mc客户端:mc
2.使用
将mc文件放入目录,我这里跟minio文件放在一起。
在mc文件存在目录下:
给mc添加执行权限:chmod +x mc
执行:./mc version
权限控制主流程
简述流程:
- 创建策略
- 创建策略配置文件
- 把策略配置文件与策略关联
- 创建用户
- 把权限策略与用户关联
1.首先执行一下几个命令:
- ./mc config host list:查看主机的mc配置。我们可以看到本地minio访问地址local:http://localhost:9000
- 这里显示的配置信息,其实也就是 /root/.mc目录下的config.json配置文件的信息。这个目录会在初次使用mc客户端命令的时候自动生成。
2.添加策略,并给访问策略执行策略配置
-
给local创建别名为sxdb,用户名密码为admin 12345678。这里的为minio.service配置文件配置的用户名和密码
./mc config host add sxdb http://localhost:9000 admin 12345678
再执行一下./mc config host list查看mc配置,可以看到新增一个一条
-
创建自定义策略配置文件 testPolicy1.json
touch testPolicy1.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"s3:ListBucket",
"s3:GetBucketLocation",
"s3:GetObject",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::testpolicy1/*"
]
}
]
}
名称 | 作用 |
---|---|
Version | 版本,这个不能随便写,看着是日期。其实随便写了后会失效 |
Effect | Allow或者deny,允许或者拒绝下面配置的访问权限 |
Action | 配置权限,上传,删除,下载等等的权限 |
Resource | 配置权限的作用范围,这里配置的是只能控制testpolicy1这个桶 |
- 给策略sxdb设置策略配置文件json
设置前先看一看当前sxdb的权限,可以看到默认readonly,readwrite,writeonly三个权限
./mc admin policy list sxdb
给策略别名sxdb添加自定义策略配置:./mc admin policy add sxdb test1 testPolicy1.json
3.添加用户
给策略别名,添加一个用户testuser1 ,密码为a12345678。这个密码不能太短会报错如图所示。指定这个用户的权限策略为刚刚添加的test1
./mc admin user add sxdb testuser1 a12345678 test1
4.给用户设置访问策略
给用户testuser1,添加test1权限策略
./mc admin user set-policy sxdb testuser1 test1
5.如果有更改策略配置json文件,则可以重新执行如下:
./mc admin user set-policy sxdb testuser1 test1
./mc admin policy add sxdb test1 testPolicy1.json
测试
-
用minio.service配置的用户名密码(管理员)登录,建桶testpolicy1,testpolicy1
-
更改权限配置文件把删除的权限去掉,添加上传权限
-
重新执行命令,重新加载:
./mc admin policy add sxdb test1 testPolicy1.json -
换自己创建的用户testuser1 a12345678登录,进行上传,删除操作
加上删除权限:
可以看到文件已经没了。但是不知道小伙伴们有没有发现,明明管理员登录创建了2个桶,为什么这个用户testuser1只看到了一个桶??
当然是作了权限控制:
这里只给用户testuser1设定了testpolicy1的访问资源
做一下更改:
再看一看,这是就2个桶都有了
Amazon S3 定义的操作:即各种权限配置
Amazon S3 的操作、资源和条件键
如图所示:
这里简单罗列一下:
名称 | 作用 |
---|---|
GetObject | 下载对象 |
ListBucket | 查看桶内的对象列表 |
ListAllMyBuckets | 查看所有的桶列表 |
PutObject | 上传对象 |
DeleteObject | 删除对象 |
AbortMultipartUpload | 授予权限以中止分段上传 |
… | … |
分布式集群权限配置
笔者对分布式下集群的权限配置做了模拟,发现如下:
1.只需要在一个节点创建用户,创建策略。其他节点能够使用该用户登录界面,且该用户拥有相应的权限。但是这个节点mc命令行里面是找不到用户和策略配置的
疑问:分布式集群下,需要在其他节点都重新创建用户配置权限吗???
总结
// 查看mc配置
./mc config host list
// 提供minio.service账号密码,创建策略别名sxdb
./mc config host add sxdb http://localhost:9000 admin 12345678
// 查看策略sxdb的权限列表
./mc admin policy list sxdb
// 给策略sxdb添加自定义策略权限文件testPolicy1.json,名字为test1
./mc admin policy add sxdb test1 testPolicy1.json
// 添加用户,账号密码为testuser1 a12345678,与权限策略test1绑定
./mc admin user add sxdb testuser1 a12345678 test1
// 查询别名sxdb下面的所有用户状态
./mc admin user list sxdb
// 给用户testuser1 设置权限策略test1
./mc admin user set-policy sxdb testuser1 test1
// 启用用户testuser1
./mc admin user enable sxdb testuser1
// 禁用用户testuser1
./mc admin user disable sxdb testuser1