MinIO创建存储桶与密钥对赋权操作指南 MinIO 对象存储创建存储桶与密钥对赋权操作指南文档版本v1.0 | 日期2026-06-09 | 适用于 MinIO RELEASE.2024 版本1 概述MinIO 是一款高性能的开源对象存储服务器完全兼容 Amazon S3 API。它适合存储非结构化数据如图片、视频、日志文件、备份数据等。本文档以「创建存储桶并为其分配专属密钥对」为主线介绍 MinIO 的核心操作流程。1.1 架构与端口MinIO 服务通常会监听两个端口分别用于不同的访问场景端口用途说明9000默认S3 API 端口程序通过此端口进行文件上传/下载等 S3 操作9001默认Web Console 端口浏览器访问的可视化管理界面提示在云服务器或 Docker 环境中端口可能被自定义。请确保防火墙已放行 S3 API 端口9000否则程序无法连接。1.2 核心概念概念说明类比Bucket存储桶存储对象的顶级容器名称全局唯一类似文件系统的根目录Object对象存储在桶中的文件通过 key路径访问类似文件Policy策略JSON 格式的 IAM 权限声明定义允许/禁止的操作类似文件权限 ACLUser用户拥有固定密钥对的身份可绑定策略类似系统用户Service Account服务账号用户的子账号可分配独立的策略和密钥对类似 API Key2 创建存储桶Bucket存储桶是 MinIO 中存储对象的顶级容器。创建时需注意桶名必须全局唯一仅允许小写字母、数字、短横线和点号且长度在 3–63 个字符之间。2.1 方式一通过 Web Console 创建这是最直观的方式适合日常管理操作。打开浏览器访问 Console 地址如http://192.168.58.227:9001使用管理员账号登录。在左侧导航栏点击「Buckets」进入存储桶管理页面。点击右上角「Create Bucket」按钮。填写桶名如business-platform根据需要开启 Versioning版本控制或 Object Locking对象锁定。点击「Create Bucket」确认创建。创建成功后会出现在存储桶列表中。注意Versioning 开启后每次覆盖同名文件都会保留历史版本可用于数据恢复但会增加存储用量。2.2 方式二通过 mc 命令行创建mcMinIO Client是官方提供的命令行工具适合自动化脚本和批量操作。首先配置连接别名# 配置一个名为 myminio 的连接别名mcaliassetmyminio http://192.168.58.227:9000 business business123然后创建存储桶# 创建存储桶mcmb myminio/business-platform# 验证是否创建成功mclsmyminio/2.3 方式三通过 S3 API代码创建适合在应用程序中集成以下为 Python 示例使用 minio-py SDKpipinstallminiofromminioimportMinio clientMinio(192.168.58.227:9000,access_keybusiness,secret_keybusiness123,secureFalse)# 创建存储桶bucket_namebusiness-platformifnotclient.bucket_exists(bucket_name):client.make_bucket(bucket_name)print(f存储桶{bucket_name}创建成功)else:print(f存储桶{bucket_name}已存在)提示Java 可使用 MinIO Java SDKio.minio:minioNode.js 可使用 minio npm 包API 逻辑均相同。3 创建密钥对并赋权这是本文档的核心部分。我们需要为应用程序创建一对专属的 Access Key / Secret Key并通过策略Policy限制其只能访问特定的存储桶。这样既能让应用正常读写文件又不会影响其他数据的安全。3.1 理解 MinIO 的身份与权限模型MinIO 采用与 AWS IAM 兼容的权限模型。密钥对的赋权有两种方式方式适用场景特点创建 User用户需要登录 Console 的人员账号可登录 Console可创建多个 Service Account创建 Service Account服务账号程序/API 调用场景不能登录 Console策略可独立于父用户对于应用程序集成推荐使用 Service Account 方式因为它可以定义独立的策略且不会影响父用户的权限。3.2 编写 IAM Policy权限策略Policy 是一个 JSON 文档定义了密钥对能做什么、不能做什么。以下策略允许对business-platform桶进行读写操作同时禁止访问其他桶{Version:2012-10-17,Statement:[{Effect:Allow,Action:[s3:ListBucket,s3:ListBucketMultipartUploads,s3:GetBucketLocation],Resource:[arn:aws:s3:::business-platform]},{Effect:Allow,Action:[s3:GetObject,s3:PutObject,s3:DeleteObject,s3:AbortMultipartUpload,s3:ListMultipartUploadParts],Resource:[arn:aws:s3:::business-platform/*]}]}策略解读StatementEffectActionResource含义第一条Allows3:ListBucket 等arn:aws:s3:::business-platform允许列出桶内容和查看桶信息第二条Allows3:Get/Put/DeleteObjectarn:aws:s3:::business-platform/*允许对桶内文件进行读写删操作关键区别Resource 中的arn:aws:s3:::bucket-name代表桶本身用于 ListBucket而arn:aws:s3:::bucket-name/*代表桶内所有对象用于 GetObject/PutObject。两者缺一不可。3.3 方式一通过 Console 创建 Service Account登录 MinIO Console在左侧导航栏点击「User」或「Service Accounts」。点击「Create Service Account」按钮。在 Policy 区域粘贴上方 3.2 节的 JSON 策略。可选填写 Name 和 Description方便日后识别用途。点击「Create」。系统会生成一对 Access Key 和 Secret Key。立即复制并安全保存 Secret Key——它只显示一次重要Secret Key 创建后仅显示一次关闭弹窗后无法再次查看。如果遗失只能删除该 Service Account 并重新创建。3.4 方式二通过 mc 命令行创建先将策略保存为文件再创建并绑定# 1. 将策略写入文件cat/tmp/bp-rw-policy.jsonEOF { Version: 2012-10-17, Statement: [ { Effect: Allow, Action: [s3:ListBucket,s3:GetBucketLocation], Resource: [arn:aws:s3:::business-platform] }, { Effect: Allow, Action: [s3:GetObject,s3:PutObject,s3:DeleteObject], Resource: [arn:aws:s3:::business-platform/*] } ] } EOF# 2. 创建 Service Account 并绑定策略mcadmin user svcacctadd\--policy/tmp/bp-rw-policy.json\myminio business# 输出示例# Access Key: MQ8484Z8S41I6YPPMZTQ# Secret Key: HpsWhe22tALzskv2SeIefb7YNpyqd7qaCg0PP3.5 方式三通过 Console REST API 创建适合自动化部署场景通过 HTTP 请求直接调用 Console API# 1. 登录获取 Session TokenTOKEN$(curl-s-XPOST http://192.168.58.227:9001/api/v1/login\-HContent-Type: application/json\-d{accessKey:business,secretKey:business123}\-c-|greptoken|awk{print $NF})# 2. 创建 Service Accountcurl-XPOST http://192.168.58.227:9001/api/v1/service-accounts\-HContent-Type: application/json\-btoken$TOKEN\-d{ policy: 上述 JSON 策略字符串, name: business-platform-rw, description: Read/Write access to business-platform }4 验证权限配置创建完成后必须验证新密钥对的权限范围是否正确。以下是推荐的验证流程4.1 正向验证应该成功的操作使用新密钥对连接 MinIO确认能看到business-platform桶。上传一个测试文件到business-platform确认上传成功。下载该文件确认内容正确。列出桶内文件确认能看到刚上传的文件。删除测试文件确认删除成功。4.2 反向验证应该被拒绝的操作尝试创建新的存储桶——应返回AccessDenied。尝试访问其他存储桶的文件——应返回AccessDenied。尝试删除business-platform桶本身——应返回AccessDenied。如果所有正向验证通过且所有反向验证均被拒绝则说明权限配置正确、无越权风险。4.3 验证脚本示例PythonfromminioimportMiniofromminio.errorimportS3Errorimportio clientMinio(192.168.58.227:9000,access_keyMQ8484Z8S41I6YPPMZTQ,# 替换为实际值secret_key你的 Secret Key,secureFalse)# 正向: 上传文件databhello minioclient.put_object(business-platform,test.txt,io.BytesIO(data),len(data))# 反向: 尝试创建新桶 (应报错)try:client.make_bucket(hacker-bucket)exceptS3Errorase:print(f被拒绝:{e.code})# AccessDenied5 常用 mc 命令速查以下是日常运维中最常用的 mc 命令操作命令说明配置连接mc alias set name url ak sk配置服务器别名创建桶mc mb alias/bucket创建新存储桶删除桶mc rb alias/bucket删除空桶--force可删非空桶列出文件mc ls alias/bucket列出桶内对象--recursive递归上传文件mc cp local alias/bucket/上传本地文件到桶下载文件mc cp alias/bucket/key local从桶下载文件到本地删除文件mc rm alias/bucket/key删除桶内对象查看信息mc stat alias/bucket/key查看对象元数据生成预签名 URLmc share download alias/bucket/key生成临时访问链接创建用户mc admin user add alias user pass创建 MinIO 用户创建 Service Accountmc admin user svcacct add alias user为用户创建子账号查看策略mc admin policy info alias policy查看策略详情服务器信息mc admin info alias查看服务器状态和用量6 最佳实践与注意事项6.1 密钥对管理每个应用程序使用独立的 Service Account不要共享密钥对。Secret Key 创建后只显示一次必须立即安全存储如密码管理器、环境变量、KMS。定期轮换密钥对创建新的 Service Account → 应用切换 → 删除旧的。绝不将密钥对硬编码在源代码中或提交到 Git 仓库。6.2 最小权限原则只授予应用所需的最小权限。如果只需读取就不要给PutObject和DeleteObject权限。用 Resource 精确限制访问范围可以用前缀路径进一步细化如arn:aws:s3:::bucket/app-data/*。避免使用Resource: *或Action: s3:*这类通配策略。6.3 存储桶设计桶名使用小写字母 短横线避免特殊字符。按业务或环境分桶如app-prod、app-staging、logs-2026不要把所有数据放在一个桶里。重要数据开启 Versioning可防止误删除和意外覆盖。6.4 网络与安全生产环境务必使用 HTTPSuseSSLTrue避免密钥对和数据在网络中明文传输。通过防火墙限制 S3 API 端口的访问来源只开放给必要的 IP 或网段。Console 端口9001应仅对管理网络开放不对外网暴露。