MinIO 安全模型:IAM 与策略
MinIO 借鉴了 AWS IAM 的设计思想,其权限控制体系包含三大核心概念:
概念 | 说明 |
用户(User) | 代表一个访问实体(如应用、服务、个人) |
组(Group) | 用户的集合,便于批量授权 |
策略(Policy) | 定义“允许或拒绝”哪些操作的 JSON 规则 |
📌 权限生效逻辑:
策略 → 绑定到 用户 或 组 → 用户访问资源时进行权限校验
🧱 核心:策略(Policy)的结构与语法
MinIO 策略是基于 JSON 的文档,遵循 S3 策略语法。
基本结构
{"Version": "2012-10-17","Statement": [{"Effect": "Allow", // 允许或拒绝"Action": [ "s3:GetObject" ], // 允许的操作"Resource": [ "arn:aws:s3:::mybucket/*" ] // 作用资源}]
}
关键字段说明
字段 | 说明 |
|
|
| S3 操作,如 |
| 资源 ARN,格式: |
实战:创建精细化访问策略
场景 1:前端直传文件(只允许上传,不允许删除)
{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Action": ["s3:PutObject"],"Resource": ["arn:aws:s3:::uploads/*" // 只能上传到 uploads bucket]},{"Effect": "Allow","Action": ["s3:ListBucket"],"Resource": ["arn:aws:s3:::uploads"]}]
}
📌 说明:
- 允许
PutObject
:上传文件 - 允许
ListBucket
:列出文件(用于展示) - 未授权
DeleteObject
:无法删除
场景 2:只读备份用户
{"Version": "2012-10-17","Statement": [{"Effect": "Allow","Action": ["s3:GetObject","s3:ListBucket"],"Resource": ["arn:aws:s3:::backups/*","arn:aws:s3:::backups"]}]
}
场景 3:禁止删除策略(安全加固)
{"Version": "2012-10-17","Statement": [{"Effect": "Deny","Action": ["s3:DeleteObject","s3:DeleteBucket"],"Resource": "*"}]
}
📌 Deny
优先级高于 Allow
,可用于强制禁止某些操作。
实战:通过 MinIO Client(mc)管理用户与策略
1. 创建用户
mc admin user add myminio readonly-user secure-password123
2. 创建自定义策略
# 将策略保存为 readonly-policy.json
mc admin policy add myminio readonly-policy readonly-policy.json
3. 为用户绑定策略
mc admin policy set myminio readonly-policy user=readonly-user
4. 验证权限
使用该用户的密钥尝试删除文件,将返回 Access Denied
。
MinIO 不仅是一个存储系统,更是一个需要严谨权限管理的“数据金库”。通过合理的策略设计,可以实现:
“谁能在什么条件下,访问哪些数据” 的精细化管控。