MinIO 外网访问与 mc 使用说明
1. 目的
本文面向需要在外网访问当前 MinIO 的同事,说明:
- 外网应该连接哪个地址
- 哪个地址不能用于
mc mc应该如何配置- 配置后能做哪些管理动作
- 当前风险和注意事项
2. 先说结论
当前外网可用的 MinIO API 地址是:
http://tx2.898311.xyz:9010/不能用于 mc 的地址是:
https://minio.898311.xyz/原因:
tx2.898311.xyz:9010是frpc映射出去的真实 MinIO APIminio.898311.xyz当前是自定义上传页面,不是 S3 API 根入口
3. 外网地址是怎么来的
当前本机 MinIO 实际监听:
127.0.0.1:9000frpc 配置中存在这条代理:
[[proxies]]
name = "bj-minio"
type = "tcp"
localIP = "127.0.0.1"
localPort = 9000
remotePort = 9010对应含义是:
- 本机
127.0.0.1:9000 - 通过
tx2.898311.xyz:9010对外暴露
因此外网访问时,应该连:
http://tx2.898311.xyz:90104. 为什么不能用 minio.898311.xyz
https://minio.898311.xyz/ 当前返回的是:
200 OKContent-Type: text/html- 页面标题
MinIO 图片上传器
这说明它是一个上传页,而不是 MinIO API。
直接拿它给 mc 用,会报类似错误:
mc: <ERROR> Unable to list folder. XML syntax error on line 8: attribute name without = in element所以不要这样配:
mc alias set remote https://minio.898311.xyz 用户名 密码5. 外网如何配置 mc
5.1 标准配置
mc alias set remote http://tx2.898311.xyz:9010 <MINIO_ROOT_USER> <MINIO_ROOT_PASSWORD>含义:
remote是你给这个连接起的本地别名http://tx2.898311.xyz:9010是真实外网 API 地址- 后面的用户名密码是 MinIO 账号凭证
5.2 普通上传账号示例
当前已创建一个最小权限普通账号:
- 用户名:
uploadrw0511a - 授权桶:
generalandroid、blog-assets、blogfile、upload、tmp-image
该账号具备:
- 列出授权桶
- 上传文件
- 下载文件
- 删除文件
- 分片上传需要的对象权限
该账号不具备:
- 访问
blogimg - 访问
image - 管理用户和策略
- 管理未授权桶
凭证:
- 密码:
UpRw_20260511_Tm9Qx7L2
配置命令:
mc alias set uploadrw http://tx2.898311.xyz:9010 uploadrw0511a UpRw_20260511_Tm9Qx7L25.3 配置后验证
先执行:
mc ls remote如果能列出桶,说明配置成功。
进一步可以执行:
mc admin info remote
mc ls remote/blogimg
mc anonymous get remote/blogimg如果使用普通上传账号,则建议执行:
mc ls uploadrw
mc ls uploadrw/blog-assets
mc ls uploadrw/tmp-image
mc cp ./example.txt uploadrw/tmp-image/
mc cat uploadrw/tmp-image/example.txt
mc rm uploadrw/tmp-image/example.txt6. 配置后能做什么
按当前验证结果,外网 mc 已经可以成功:
mc ls remote
mc admin info remote这说明:
- 外网地址确实连到了 MinIO 本体
- 当前账号具备管理权限
- 不是只能访问上传页
因此理论上可以做完整管理动作:
- 查:列桶、看对象、看策略、看版本化、看生命周期
- 增:新建桶、上传对象、加标签
- 改:改匿名策略、改版本化、改生命周期
- 删:删对象、删空桶
常见命令示例:
mc ls remote
mc mb remote/new-bucket
mc anonymous set download remote/blogimg
mc version enable remote/blogimg
mc rb remote/old-bucket注意:
- 本次实际只验证了“读”和“管理信息查询”
- 没有直接执行生产环境写删操作
- 但当前账号是
root,所以按权限判断,增删改查都具备能力
6.1 普通上传账号能做什么
普通上传账号 uploadrw0511a 当前只针对授权桶开放对象级操作。
已实际验证成功的动作:
mc ls uploadrw- 上传对象到
tmp-image - 列出上传对象
- 读取对象内容
- 删除对象
mc ls uploadrw/generalandroid- 向
generalandroid/external-check/minio-uploadrw0511a-ga-test.txt上传新的小测试文件 mc cat uploadrw/generalandroid/external-check/minio-uploadrw0511a-ga-test.txtmc rm uploadrw/generalandroid/external-check/minio-uploadrw0511a-ga-test.txt
其中 generalandroid 相关验证结果为:
- 可以正常列出一级目录:
books/ media/ releases/ tools/ traces/ - 可以成功写入测试文件
- 可以成功读回内容:
ga-check-2026-05-11 - 可以成功删除测试文件
- 删除时返回 delete marker,说明桶已开启版本化,行为正常
已实际验证失败的动作:
mc ls uploadrw/blogimg
返回结果为:
mc: <ERROR> Unable to list folder. Access Denied.说明授权边界生效正常。
当前可以正式下结论:
uploadrw0511a已满足generalandroid桶的列、读、写、删需求- 可以作为 GeneralAndroid 远程 clone 恢复主账号使用
6.2 关于多线程上传与断点续传
这里要明确一点:
- 多线程上传
- 断点续传
主要由客户端工具或 SDK 决定,不是账号本身“开一个权限开关”就自动拥有。
当前这个账号已经包含了分片上传相关权限:
s3:ListBucketMultipartUploadss3:AbortMultipartUploads3:ListMultipartUploadPartss3:PutObject
这意味着:
- 如果你用支持 multipart 的
mc/ SDK - 就可以基于这个账号做多线程上传和断点续传类能力
但是否真的“多线程”,取决于具体客户端实现。
7. 风险与注意事项
当前外网使用方式有几个明显风险:
- 使用的是
root凭证 - 走的是外网暴露口
- 当前地址是
http,不是https
这意味着:
- 一旦凭证泄漏,外部可直接操作全部桶
- 不适合长期多人共享 root 账号
- 不适合在不可信网络环境长期使用
更建议的后续改造:
- 单独创建运维子账号
- 按桶或按操作范围授权
- 尽量补上
https - 只给确有需要的同事分配外网管理权限
普通上传账号相对更合适:
- 不直接暴露 root
- 只开放授权桶
- 更适合同事日常上传和对象维护
8. 建议的使用边界
如果只是上传内容:
- 优先使用现有上传页
如果需要做桶管理:
- 使用
mc - 先做只读巡检
- 先备份,再改配置
- 改完后做校验
- 最后更新仓库文档
推荐配套阅读: