前面刚刚讲了如何搭建 MinIO,本文趁热打铁手把手教你如何配置 MinIO 权限配置。对于略懂 MinIO 的用户,配置权限可能是个挑战:如何安全地让别人读取存储内容,但不能列出所有存储桶或文件列表?或者让某个存储桶的内容可以列出? 本文将深入讲解 MinIO 的身份管理和权限配置,聚焦存储桶权限(private、public、custom)的区别和 匿名访问 的应用,通过清晰的场景示例,教你实现安全分享,同时保护数据。
MinIO 的身份管理负责用户认证和授权,默认使用内置身份提供者(IDP)。核心概念包括:
Access Key
(用户名)和 Secret Key
(密码)访问 MinIO,可用命令行工具 mc
或 Web 控制台管理。Access Key
)通过 URL 或 API 访问特定资源,需通过存储桶权限配置。用户组:可通过 mc admin group
批量管理用户权限,本文不展开。
我们的目标是:安全地让匿名用户或服务账号读取特定内容,限制列出存储桶或文件列表,或有选择地允许列出某个存储桶的内容。
http://localhost:9000
,管理员账号为 homes4
,密码为 aiy0ooCheephai0ohNahmu3Aijee6eiv
。mc
),用于配置权限(支持 Windows、Mac、Linux)。mc alias set homes4 http://localhost:9000 homes4 aiy0ooCheephai0ohNahmu3Aijee6eiv
Added `homes4` successfully.
准备好后,我们开始配置权限!
PS:命令行方式和可视化操作效果是一样的,下文会穿插着来,但是主要还是以可视化 web 操作为主
MinIO 的存储桶权限控制匿名访问行为,分为 private
、public
和 custom
三种模式,可通过 mc anonymous
命令设置。以下是它们的区别
mc anonymous set none homes4/web
注意:风险较高,容易暴露所有文件,慎用。(我个人基本不用)
定义:允许匿名用户访问,权限包括:
适用场景:分享公开资源,如网站静态文件、开源软件。
配置(只读):mc anonymous set download homes4/web
效果:匿名用户可通过 URL(如 http://localhost:9000/web/file.jpg)读取对象,可能列出文件列表(若未限制)。
推荐用
模式 | 匿名访问权限 | 适用场景 | 配置命令 |
---|---|---|---|
Private | 禁止匿名访问 | 敏感数据 | mc anonymous set none |
Public | 读、写或读写(看设置) | 公开资源 | mc anonymous set download upload/public |
Custom | 自定义(JSON 策略) | 部分公开、精确控制 | mc anonymous set-json |
通过一个最常见的场景,教你如何:
此外,还会写如何用服务账号为应用程序提供类似权限。
先创建一个存储桶,默认创建的存储桶都是私有权限
root@docker:~$ mc mb homes4/cli
Bucket created successfully `homes4/cli`.
root@docker:~$ mc ls homes4
[2025-05-01 11:26:11 EDT] 0B cli/
[2025-05-01 11:23:57 EDT] 0B ddd/
[2025-05-01 10:38:53 EDT] 0B homes4/
[2025-05-01 11:29:06 EDT] 0B web/
需求:存储桶 web 包含 public/photo.jpg 和 private/secret.pdf。想让匿名用户只读 photo.jpg,但不能列出 web 桶中 的文件列表,也不能访问其他文件或存储桶
步骤:
mc anonymous set none homes4/web
{
"Version": "2012-10-17",
"Statement": [
{
"Action": ["s3:GetObject"],
"Effect": "Allow",
"Resource": ["arn:aws:s3:::web/public/photo.jpg"],
"Principal": "*"
}
]
}
arn:aws:s3:::web/public/*
mc anonymous set-json custom.json homes4/web
控制台可以直接编辑存储桶的 Access Policy,改成 Custom,内容和上面一致
root@docker:~$ mc anonymous get-json homes4/web
{
"Statement": [
{
"Action": [
"s3:GetObject"
],
"Effect": "Allow",
"Principal": {
"AWS": [
"*"
]
},
"Resource": [
"arn:aws:s3:::web/public/photo.jpg"
]
}
],
"Version": "2012-10-17"
}
需求:为应用程序(如网站后端)提供只读 public/photo.jpg 的权限,类似上述场景,但通过服务账号实现
步骤:
密码长度需要 8-40
mc admin user add homes4 app1user app1pass
web 可视化操作,policy 那里随便选个小权限的,后面需要调整
mc admin user svcacct add homes4 app1user --access-key svc1 --secret-key svc1pass --policy custom.json
可视化操作创建服务状态,凭证信息会随机生成,且只显示一次
策略信息只能在生成 access key 后才能编辑操作
mc anonymous get-json homes4/web
确认存储桶权限# 分享下载链接,下载速度限制10MB/s有效期7天
mc share download --limit-download 10MB homes4/web/private/secret.pdf
MinIO 的权限配置简单而灵活,用服务账号拥有某个存储桶的只读权限就行了。