转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。
MinIO搭建好之后,出于不同场景的需要,有时候需要对不同的用户和Bucket做一些针对性的权限控制。
MinIO的权限控制配置方式不是很友好,需要自己修改策略的配置代码。最近研究测试了一些可能用到的权限做了一下实验,或许你也遇到过相同的需求......
环境搭建
1. 部署一个minio(minio单点和集群的部署可参考《圣诞来了,介绍个对象》、《Look,一群对象来了》);
2. 并创建一个名为sre01、一个sre02的Bucket用于测试权限;
权限实验
前提说明:后面的权限实验中,针对指定Bucket的场景,均默认指定sre01这个Bucket。
1. 拥有全部Bucket的只读权限
权限说明:能看到minio里面的全部Bucket,但无法看到里面有哪些文件。这个就是minio默认的readonly权限,无需自己编辑权限策略:
Bucket | 查看文件 | Upload | Download | Share | Delete |
ALL | N | N | N | N | N |
1.1 创建名为sre的用户,并赋予readonly权限
1.2 权限验证
2. 对指定Bucket的只读权限
权限说明:只能看到sre01这一个Bucket,能看到sre01下有哪些文件,可以生成分享链接,但不能上传、下载和删除文件。
Bucket | 查看文件 | Upload | Download | Share | Delete |
sre01 | Y | N | N | Y | N |
2.1 创建一个名为sre01-read的权限策略
策略代码:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::sre01/*"
]
}
]
}
2.2 修改用户sre权限,改为sre01-read权限
2.3 权限验证
登录sre用户验证权限,对sre01下的文件可分享,不可上传、下载和删除:
3. 对指定Bucket的下载&分享权限
权限说明:能看到sre01这一个Bucket,能看到sre01下有哪些文件,可以生成分享链接和下载,但是不能上传&下载和删除文件。
Bucket | 查看文件 | Upload | Download | Share | Delete |
sre01 | Y | N | Y | Y | N |
3.1 创建一个名为sre01-download的权限策略
策略代码:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::sre01/*"
]
}
]
}
3.2 修改用户sre权限,改为sre01-download权限
3.3 权限验证
登录sre用户验证权限,对sre01下的文件可分享&下载,不可上传&删除:
4. 对指定Bucket的上传&分享权限
权限说明:能看到sre01这一个Bucket,能看到sre01下有哪些文件,可以上传文件到sre01,对文件可以生成分享链接,但不能下载和删除文件。
Bucket | 查看文件 | Upload | Download | Share | Delete |
sre01 | Y | Y | N | Y | N |
4.1 创建一个名为sre01-uplouad的权限策略
策略代码:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket", #如果去掉这一行,就只拥有uplouad权限,看不到bucket下的文件
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::sre01/*"
]
}
]
}
4.2 创建修改用户sre权限,改为sre01-upload权限
4.3 权限验证
登录sre用户,验证权限,可分享可上传,不可下载,不可删除:
5. 对指定Bucket的上传&分享&下载权限
权限说明:能看到sre01这一个Bucket,能看到sre01下有哪些文件,可以在sre01执行文件上传和下载,对文件可以生成分享链接,但不能删除文件。
Bucket | 查看文件 | Upload | Download | Share | Delete |
sre01 | Y | Y | Y | Y | N |
5.1 创建一个名为sre01-uplouad-download的权限策略
策略代码:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:PutObject",
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::sre01/*"
]
}
]
}
5.2 创建修改用户sre权限,改为sre01-uplouad-download权限
5.3 权限验证
登录sre用户,验证权限,可分享可上传,不可下载,不可删除:
6. 对指定Bucket的全控制权限
权限说明:能看到sre01这一个Bucket,能看到sre01下有哪些文件,可以在sre01执行文件上传、下载和删除,对文件可以生成分享链接。
Bucket | 查看文件 | Upload | Download | Share | Delete |
sre01 | Y | Y | Y | Y | Y |
6.1 创建一个名为sre01-uplouad-download-delete的权限策略
策略代码:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:ListBucket",
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::sre01/*"
]
}
]
}
6.2 创建修改用户sre权限,改为sre01-uplouad-download权限
6.3 权限验证
登录sre用户,验证权限,可分享可上传,不可下载,不可删除:
以上就是实验的几种minio用户权限控制场景。那么问题来了:
在上面几种权限控制中,只要拥有Bucket下文件的查看权限,就会拥有生成分享链接的share权限。那么在用户不拥有download权限的场景下(如sre-read、sre-upload),该用户能利用自身的share权限,将Bucket下的文件生成下载链接,供自己在浏览器访问链接下载文件吗?