JuiceFS v1.2-beta1,Gateway 升级,多用户场景权限管理更灵活

2024-04-22
执剑

JuiceFS v1.2-beta1 今天正式发布。在这个版本中,除了进行了大量使用体验优化和 bug 修复外,新增三个特性:

  1. Gateway 功能扩展:新增了“身份和访问管理(Identity and Access Management,IAM)” 与 “事件通知” ,为用户提供更安全、灵活和自动化的数据管理和监控能力,适用于多用户环境和复杂的业务场景;

  2. 支持 POSIX ACL:使用 Linux 自带的 ACL 工具(setfacl/getfacl)即可实现更加强大的用户权限管理;

  3. 支持平滑升级:在相同的挂载点再次挂载 JuiceFS 即可实现业务无感的平滑升级;此外,这种方式也可用来在线调整挂载参数。

本次版本更新,共有 41 名贡献者参与,合入 354 次代码。感谢每位贡献者的付出!

在近期的博客中,我们将逐一为大家介绍这些特性的原理及应用。

01 JuiceFS Gateway 简介#

JuiceFS 将文件分块存储到底层的对象存储中,向用户提供 POSIX 接口访问 JuiceFS 中的文件。当用户需要同时用 S3 兼容接口访问文件时,就需要用 JuiceFS Gateway。

JuiceFS Gateway 架构图
JuiceFS Gateway 架构图

在本次 JuiceFS 1.2-beta1 版本中,我们对 Gateway 功能新增了两项备受期待的模块:

  1. 身份和访问管理(IAM):支持多用户的管理和访问控制,支持匿名访问控制;

  2. 事件通知:可以使用桶事件通知来监控桶中对象发生的事件。

02 实现#

JuiceFS Gateway 的核心服务是将 POSIX 文件系统通过 S3 接口对外提供访问。在 v1.2 版本以前,我们的实现方式是将 MinIO Gateway 模块集成到我们的代码中,当时该模块是基于 Apache 许可证的版本。这种集成方式使得 JuiceFS 的运行机制与 MinIO 的原生命令 minio gateway NAS 相似。对于用户来说,JuiceFS 可被视为 MinIO Gateway 的一种实现方式。此外,MinIO 的其他后端实现还包括 NAS、Hadoop 等。

在 v1.2 版本中,我们直接实现了 MinIO object 接口 ,并将 JuiceFS 作为其服务的后端存储。这样做让用户获得了近乎原生 MinIO 体验,并继承了 MinIO 许多高级功能。JuiceFS 在这里充当了 MinIO 服务器命令的一块本地盘,整体的原理类似于 minio server /data1

用户可以使用 MinIO 的 mc 工具直接管理 Juicefs Gateway。由于 MinIO 目前是遵循 AGPL 许可证进行发布的,而 JuiceFS 是使用的是其 Apache 许可证的版本,因此我们建议使用与之相匹配的 Apache 许可版本的 mc工具,以避免潜在的兼容性问题,可以点击这里下载。

本次新增的两个模块的使用方法基本与 MinIO 相应模块的使用方法基本一致,用户可参考 MinIO 相关文档JuiceFS 文档来了解详细信息。接下来,我们将简要介绍这些新功能及其使用方法。

03 新增功能#

身份和访问管理#

用户管理#

juicefs gateway 允许使用 mc admin user add 添加新的用户。添加的用户可以使用 mc admin user 进行管理,支持添加,关闭,启用,删除用户,也支持查看所有用户以及展示用户信息和查看用户的策略。

服务账户#

允许为某个用户添加服务账户,每个服务账户都与用户身份相关联,并继承附加到其父用户或父用户所属组的策略。每个访问密钥还支持可选的内联策略,可进一步限制对父用户可用的操作和资源子集的访问。具体使用 mc admin user svcacct 命令来进行服务账户的管理。

AssumeRole 安全令牌服务#

AssumeRole 会返回一组临时安全凭证,用户可以使用这些凭证访问 Gateway 资源。AssumeRole 需要现有 Gateway 用户的授权凭据,返回的临时安全凭证包括访问密钥、秘密密钥和安全令牌。应用程序可以使用这些临时安全凭证对 Gateway API 操作进行签名调用。应用于这些临时凭据的策略继承自 Gateway 用户凭据。具体使用方法请参考使用文档

权限管理#

默认新创建的用户是没有任何权限的,需要使用 mc admin policy 为其赋权后才可使用。该命令支持权限的增删改查以及为用户添加删除更新权限操作。另外 gateway 还内置了以下 4 种常用的策略。

  • readonly:只读用户
  • readwrite:可读写用户
  • writeonly:只写用户
  • consoleAdmin:可读可写可管理,可管理指可以调用管理 API,比如创建用户等等。如需设置自定义的策略,可以使用 mc admin policy add 添加。

用户组管理#

JuiceFS Gateway 支持创建用户组,类似于 Linux 用户组的概念,使用 mc admin group 管理。你可以把一个或者多个用户设置为一个组,然后为组统一赋权。

匿名访问管理 以上是针对有用户记录的管理,但是有时我们希望特定的对象或桶可以被任何人访问,这时就需要匿名访问管理了,这部分功能使用 mc policy 命令管理。Gateway 默认内置了 4 种匿名权限:

  • none: 不允许匿名访问(一般用来清除已有的权限)
  • download:允许任何人读取
  • upload:允许任何人写入
  • public:允许任何人读写

桶事件通知#

有时用户需要根据桶上发生的事件来触发一些行为,这时就需要桶时间通知该功能了。存储桶事件通知可以用来监视存储桶中对象上发生的事件。

目前支持的对象事件类型有:

  • s3:ObjectCreated:Put
  • s3:ObjectCreated:CompleteMultipartUpload
  • s3:ObjectAccessed:Head
  • s3:ObjectCreated:Post
  • s3:ObjectRemoved:Delete
  • s3:ObjectCreated:Copy
  • s3:ObjectAccessed:Get

支持的全局事件有:

  • s3:BucketCreated
  • s3:BucketRemoved

可以使用 mc 客户端工具通过 event 子命令设置和监听事件通知。MinIO 发送的用于发布事件的通知消息是JSON 格式的,JSON 结构参考这里

目前存储桶事件可以支持发布到以下目标:

  • Redis
  • MySQL
  • PostgreSQL
  • WebHooks

具体用法请参考使用文档

其他功能#

  1. 支持对象标签(object-tagging) 允许用户为对象设置自定义标签,可以使用 mc tag 进行管理

  2. 后台运行 支持 gateway 以后台模式运行,在启动时添加 -d 参数即可

👆👆以上是 JuiceFS 1.2-beta1 Gateway 新功能的介绍,欢迎大家下载试用:https://github.com/juicedata/juicefs/releases/tag/v1.2.0-beta1

Author#

执剑
Juicedata 系统工程师

相关博客

JuiceFS 社区版 v1.2 发布,新增企业级权限管理、平滑升级功能

2024-06-21
JuiceFS 社区版 v1.2 今天正式发布,这是自 2021 年开源以来的第三个大版本。v1.2 也是一个长期支持版本(LTS)。我们将持续维护 v1.2 以及 v1.1 这两个版本,v1.0 …

JuiceFS v1.2-beta 1: ACL 功能全解析,更精细的权限控制

2024-04-26
在最新的 JuiceFS v1.2-beta1 版本中,我们引入了对 POSIX ACL(POSIX Access Control Lists,以下简称 ACL)的支持。通过这个功能,用户能实现更细…