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/*" ] // 作用资源}]
}

关键字段说明

字段

说明

Effect

Allow 或 Deny

Action

S3 操作,如 s3:PutObjects3:DeleteObjects3:ListBucket

Resource

资源 ARN,格式:arn:aws:s3:::<bucket-name>/<object-key>

实战:创建精细化访问策略

场景 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 不仅是一个存储系统,更是一个需要严谨权限管理的“数据金库”。通过合理的策略设计,可以实现:

“谁能在什么条件下,访问哪些数据” 的精细化管控。