前言
虽然docker里面可以安装minio客户端,但是在docker的Minio客户端容器里面,有很多常用命令不能使用,而且minio客户端就是一些mc命令,完全不需要放到docker容器里面,去启动,进入容器,操作策略,用户等,太麻烦。直接下载mc文件添加执行权限就可以使用了
Minio服务,客户端安装可以看我另外博客
docker安装Minio服务
docker安装Minio客户端
安装
1、使用wget命令安装mc命令
wget https://dl.min.io/client/mc/release/linux-amd64/mc -P /usr/local/bin/
2、给路径下的mc添加执行权限
chmod +x /usr/local/bin/mc
3、绑定自己Linux上或者docker上的Minio服务
示例
// 从MinIO服务获得URL、access key和secret key。
// API签名是可选参数,默认情况下,它被设置为"S3v4"。
mc config host add minio http://xxx.xx.xx.xxx:9010 minioxxx minioxxx --api S3v4
4、测试是否绑定Minio服务
mc ls minio
可以看到我的Minio就两个桶,而且都没有东西
客户端安装好之后,就正式进入了我们的多用户,权限的创建了
查看信息
1、查看配置信息
// 查看配置信息
mc alias list
这个minio就是我们当前的策略,里面对应了服务路径,以及账户密码
这里显示的配置信息,其实也就是 /root/.mc目录下的config.json配置文件的信息。这个目录会在初次使用mc客户端命令的时候自动生成。
2、查看minio当前策略的权限
mc admin policy list minio
这里分别代表的意思是
readwrite // 读写
writeonly // 只写
consoleAdmin // 控制台管理员
diagnostics // 诊断
readonly // 只读
以上都是Minio策略的权限
自定义策略权限
MinIO默认的权限管理策略只有writeonly,readonly和readwrite,而且是针对所有的桶的,要实现对不同的桶进行不同的权限管理,需要使用自定义策略。
使用mc admin policy创建策略。可以在/root/.mc目录中创建一个json文件
比如我们业务中,有很多的系统,可以根据业务系统的不同,创建不用的业务账号,做到数据隔离的作用
1、添加策略,并给访问策略执行策略配置
如:
我们创建一个zlbucket.json。即表示我们要设置只能操作一个桶的一个账户。
我们先创建zlbucket.json策略文件,内容如下:
在自定义/www/docker/minio/custom_strategy目录下,创建 touch zlbucket.json
加入下面配置信息
在配置文件中,是不允许加入 "//注释"注释的,否则会报错
所以在zlbucket.json文件中添加下面json的时候需要去掉注销
示例
{
"Version": "2012-10-17", // 版本,按照官方的
"Statement": [
{
"Effect": "Allow", // Allow或者deny,允许或者拒绝下面配置的访问权限
"Action": [ // 配置权限,上传,删除,下载等等的权限
"s3:GetBucketLocation", // 授予权限以返回 Amazon S3 存储桶所在的区域 文章底下会详解
"s3:GetBucketPolicy", // 授予权限以返回指定存储桶的策略 文章底下会详解
"s3:ListBucket", // 查看桶权限
"s3:GetObject", // 下载权限
"s3:PutObject", // 上传权限
"s3:DeleteObject" // 删除权限
],
"Resource": [ // 配置权限的作用范围
"arn:aws:s3:::image-zl/*","arn:aws:s3:::image-xx/*" // arn:aws:s3不用动,*表示权限作用于image-zl这个桶下的所有数据,加逗号可以写多个桶
]
}
]
}
3、增加新策略
在zlbucket.json加入上面去掉注释后的策略
这里的策略我是限制了只能操作image-zl桶
{
"Version": "2012-10-17",
"Statement": [
{
"Action": [
"s3:GetBucketPolicy",
"s3:ListBucket",
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::image-zl/*"
],
"Sid": ""
}
]
}
4、给Minio增加自定义策略
// 策略别名
mc admin policy add minio zlbucket /www/docker/minio/custom_strategy/zlbucket.json
/**
这里注意,不同用户用同一策略别名zlbucket 没问题
如果zlbucket.json有所修改,请更换别名
*/
这里有个疑问
我在zlbucket.json里面将"Version": 设置为"2021-04-23",会报错,
直译:mc:<错误>无法解析输入策略:无效的版本’2021-04-23’
后面看到官方文档是用2012-10-17,不知道为什么只能用这个,知道的小伙伴可以评论底下告诉我,多谢
5、给Minio增加策略后检查是否加入
查看权限
mc admin policy list minio
6、给minio增加用户
mc admin user add minio adminzl adminzlxxxx
7、检查是否新增成功
// 查看minio用户
mc admin user list minio
8、给新用户增加我们自定义的权限
// 使用mc admin policy set 给用户名为 user=adminzl 的用户添加 权限:zlbucket 权限策略
mc admin policy set minio zlbucket user=adminzl
9、后续修改或者新增自定义策略,重复上面4、6步骤即可
测试
1、登录
给新用户增加后,在网页访问自己Minio服务,输入自己加的用户账号密码
adminzl账户登录成功后,只能看到一个image-zl桶 ListBucket权限
2、操作
1)PutObject:上传
2)下载
3)删除
没权限的情况下
1)创建桶
策略里面的权限只能对image-zl桶进行查看,上传、下载、删除操作
连接
java代码连接Minio后,会出现Access Denied
这是因为没有权限访问,需要开启对应的权限,也就是GetBucketLocation命令,它的作用授予可以访问桶的权限,可以让java代码对桶进行上传操作
进行上传操作,会出现
这是因为,image-zl这个桶,默认的是可读,不可写,java自然无法访问到资源进行上传
后面我在官方的Action权限里面看到GetBucketPolicy命令,给用户授予操作桶读写权限,所以在zlbucket.json里面加入GetBucketPolicy命令
流程图
相关命令
命令 | 作用 |
---|---|
mc admin user disable myminio newuser | 禁用用户 |
mc admin user remove myminio newuser | 删除用户 |
mc admin user list myminio | 列出所有启用和禁用的用户 |
本文只是介绍了怎么创建多个用户和策略,还只是Minio里面的冰山一角,更多功能请看
官方文档
有疑问和不懂的欢迎评论区留言,感谢你们的阅读