JuiceFS v1.2-beta1 今天正式发布。在这个版本中,除了进行了大量使用体验优化和 bug 修复外,新增三个特性:
-
Gateway 功能扩展:新增了"身份和访问管理(Identity and Access Management,IAM)" 与 "事件通知" ,为用户提供更安全、灵活和自动化的数据管理和监控能力,适用于多用户环境和复杂的业务场景;
-
支持 POSIX ACL:使用 Linux 自带的 ACL 工具(
setfacl/getfacl
)即可实现更加强大的用户权限管理; -
支持平滑升级:在相同的挂载点再次挂载 JuiceFS 即可实现业务无感的平滑升级;此外,这种方式也可用来在线调整挂载参数。
本次版本更新,共有 41 名贡献者参与,合入 354 次代码。感谢每位贡献者的付出!
在近期的博客中,我们将逐一为大家介绍这些特性的原理及应用。
01 JuiceFS Gateway 简介
JuiceFS 将文件分块存储到底层的对象存储中,向用户提供 POSIX 接口访问 JuiceFS 中的文件。当用户需要同时用 S3 兼容接口访问文件时,就需要用 JuiceFS Gateway。
在本次 JuiceFS 1.2-beta1 版本中,我们对 Gateway 功能新增了两项备受期待的模块:
-
身份和访问管理(IAM):支持多用户的管理和访问控制,支持匿名访问控制;
-
事件通知:可以使用桶事件通知来监控桶中对象发生的事件。
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
具体用法请参考使用文档。
其他功能
-
支持对象标签(object-tagging) 允许用户为对象设置自定义标签,可以使用
mc tag
进行管理 -
后台运行 支持 gateway 以后台模式运行,在启动时添加
-d
参数即可
👆👆以上是 JuiceFS 1.2-beta1 Gateway 新功能的介绍,欢迎大家下载试用:https://github.com/juicedata/juicefs/releases/tag/v1.2.0-beta1