搭建自有的OSS服务-Minio客户端使用

使用Minio的客户端工具进行管理

Minio是一种分布式的存储服务,他的好处主要有:

  • 开源
  • 小而美
  • 跨平台
  • 各种接口完备
  • 各种SDK
  • 文档齐全

我用Minio搭建了一个自用的存储服务,并用于个人博客的图床,搭建完成后结合picgo+typora非常方便的编写自己的个人工作blog;于是推广到部门内部,原先是我一个人使用,帐号也使用的是管理员帐号,现在需要多人使用,我需要给部门每个人开通一个帐号,同时也要设置好每个人的权限和存储桶(brucke);于是要使用到Minio的客户端进行设置操作。

搭建HTTPS访问minio

第一步、获取Minio客户端工具

官方文档已经介绍非常细了,这里我就不再多说,将文档路径贴出给大家参考

搭建自有的OSS服务-Minio客户端使用-平凡之路

第二步、学习使用客户端(MC.exe)

示例-MinIO云存储

从MinIO服务获得URL、access key和secret key。

# 下载md.exe
https://min.io/docs/minio/linux/reference/minio-mc.html

# 创建一个minio 服务的别名
# mc alias set ALIAS HOSTNAME ACCESS_KEY SECRET_KEY
mc alias set fyminio https://XX.com.cn:5008 minioadmin xxxxx

# 增加一个配置文件;
mc config host add fyminio https://xxx.com.cn:5008 minioadmin xxxxx --api s3v4

# 查看所有存储桶
mc ls fyminio

# 查看策略设置命令
mc admin policy

# 或者 (删除一个主机)
mc config host remove minio
// c:\user\chenlip\mc\

搭建自有的OSS服务-Minio客户端使用-平凡之路

MC share 命令

share命令安全地授予上传或下载的权限。此访问只是临时的,与远程用户和应用程序共享也是安全的。如果你想授予永久访问权限,你可以看看mc policy命令。

生成的网址中含有编码后的访问认证信息,任何企图篡改URL的行为都会使访问无效。想了解这种机制是如何工作的,请参考Pre-Signed URL技术。

搭建自有的OSS服务-Minio客户端使用-平凡之路

示例: 生成一个对一个对象有4小时访问权限的URL。


mc share download --expire 4h play/mybucket/myobject.txt
URL: https://play.min.io/mybucket/myobject.txt
Expire: 0 days 4 hours 0 minutes 0 seconds
Share: https://play.min.io/mybucket/myobject.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=Q3AM3UQ867SPQQA43P2F%2F20160408%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20160408T182008Z&X-Amz-Expires=604800&X-Amz-SignedHeaders=host&X-Amz-Signature=1527fc8f21a3a7e39ce3c456907a10b389125047adc552bcd86630b9d459b634

示例: 生成一个curl命令,赋予上传到play/mybucket/myotherobject.txt的权限。

mc share upload play/mybucket/myotherobject.txt
URL: https://play.min.io/mybucket/myotherobject.txt
Expire: 7 days 0 hours 0 minutes 0 seconds
Share: curl https://play.min.io/mybucket -F x-amz-date=20160408T182356Z -F x-amz-signature=de343934bd0ba38bda0903813b5738f23dde67b4065ea2ec2e4e52f6389e51e1 -F bucket=mybucket -F policy=eyJleHBpcmF0aW9uIjoiMjAxNi0wNC0xNVQxODoyMzo1NS4wMDdaIiwiY29uZGl0aW9ucyI6W1siZXEiLCIkYnVja2V0IiwibXlidWNrZXQiXSxbImVxIiwiJGtleSIsIm15b3RoZXJvYmplY3QudHh0Il0sWyJlcSIsIiR4LWFtei1kYXRlIiwiMjAxNjA0MDhUMTgyMzU2WiJdLFsiZXEiLCIkeC1hbXotYWxnb3JpdGhtIiwiQVdTNC1ITUFDLVNIQTI1NiJdLFsiZXEiLCIkeC1hbXotY3JlZGVudGlhbCIsIlEzQU0zVVE4NjdTUFFRQTQzUDJGLzIwMTYwNDA4L3VzLWVhc3QtMS9zMy9hd3M0X3JlcXVlc3QiXV19 -F x-amz-algorithm=AWS4-HMAC-SHA256 -F x-amz-credential=Q3AM3UQ867SPQQA43P2F/20160408/us-east-1/s3/aws4_request -F key=myotherobject.txt -F file=@<FILE>

find命令 - 查找文件和对象

find命令通过指定参数查找文件,它只列出满足条件的数据。

用法:
  mc find PATH [FLAGS]

FLAGS:
  --help, -h                       显示帮助。
  --exec value                     为每个匹配对象生成一个外部进程(请参阅FORMAT)
  --name value                     查找匹配通配符模式的对象。
  ...
  ...

示例: 持续从s3存储桶中查找所有jpeg图像,并复制到minio "play/bucket"存储桶

mc find s3/bucket --name "*.jpg" --watch --exec "mc cp {} play/bucket"

第三步、为成员创建帐号及权限

创建固定访问策略

使用mc admin policy创建罐装政策。服务器提供罐装政策的默认设置,即writeonlyreadonlyreadwrite(这些政策适用于所有服务器上的资源)。可以使用mc admin policy命令通过自定义策略来覆盖这些设置。

创建新的罐头策略文件 myhome.json

mc admin policy add minio别名 策略别名 策略.json

#示例
mc admin policy add myminio myhome myhome.json

创建用户、设置策略

在MinIO使用上创建一个新用户 mc admin user

mc admin user add myminio wzy wzy123
mc admin user add myminio chr chr123
mc admin user add myminio clp clp123

成功创建用户后,您现在可以 getonly 为该用户应用策略。

mc admin policy set myminio readwrite user=wzy
mc admin policy set myminio readwrite user=chr

注意:目前还有两个需求没有找到解决方法:

​ 1- 为每个帐号设置桶的权限,也就是说我希望用户只能完全访问某个指定的存储桶

设置存储桶或路径策略为download

# download 后面 跟存储桶或路径: <存储桶>/<路径>
mc policy set download minio/test
Access permission for `minio/test` is set to `download`

mc policy get minio/test         
Access permission for `minio/test` is `download`

第四步、实际应用场景

​ 计划为软件研发部提供内部的Markdown文档图床服务,所有部门人员可以编写Markdown文档,使用统一的图床服务,在内部与其他部门进行交流时方便。

​ 后续计划再使用docsify 进行团队文档协同编制。

​ 后续计划在使用(SVN)office文档的在线预览功能;

​ 部门情况:6人,包括部门经理、项目经理、需求分析、开发测试、运维服务等角色

​ 部门日常工作:运维服务、项目管理、需求分析、开发测试

​ 部门关键文档:故障分析、问题描述、项目汇报、需求分析、原型设计、程序结构、部署结构、测试总结、系统部署、上线运行情况、

​ 为了日常文档编辑时使用,初步计划:

  • 创建一个专门的 存储桶,用于所有文档的图床; publicmd
  • 按部门人员姓名简称,在这个存储桶下面创建不同的目录;
  • 创建一个统一图床使用的帐号:fymc / fysoft@2022
  • 设置该存储桶权限为可下载
  • 统一使用 Typora 1.24 + PicGo 进行文档编辑,
    • 在配置PicGo的图床时,每个人指定使用自己的目录;

Minio Client 操作命令:

# 创建用户
mc admin user add fyminio fymc XXXXX

# 设置用户权限;可读写;
mc admin policy set fyminio readwrite user=fymc

# 设置存储桶目录权限为可以下载和显示;
mc anonymous set public fyminio/publicmd/requ
mc anonymous set download fyminio/publicmd/requ

# 查看存储通或目录的权限
mc policy get fyminio/publicmd

特别说明:

Minio 2021年6月之后的版本中设置目录的 public和download 权限 已经改用 mc anonymous 命令了;

参考:

mc admin policy - MinIO 教程 (hxstrive.com)

Minio设置永久下载链接 - 哈喽哈喽111111 - 博客园 (cnblogs.com)

<video id="video" controls="" width="100%" preload="none" poster="" type="video/mp4">
<source id="mp4" src="https://mdblog.oss-cn-hangzhou.aliyuncs.com/51epub.cc/mdimages/blog/2022/4/3/Nancy.mp4" type="video/mp4">
</video>