You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现多用户间的Ceph/S3对象访问权限共享?

问题分析与解决方案

问题根源

你遇到的问题核心是Ceph S3的默认对象ACL规则:用户通过常规方式上传对象且未指定ACL时,对象会被自动设置为私有状态——只有上传者(user-02)拥有完全控制权。尽管你的桶策略允许所有认证用户访问,但S3兼容的权限评估逻辑中,对象级ACL的优先级高于桶策略,因此user-01执行复制操作时会被拒绝。


解决方案(无需实时修改对象ACL)

方案1:配置桶的默认对象ACL

给目标桶设置默认对象ACL,让所有新上传的对象自动继承该权限规则,无需用户手动指定。适合需要保留对象所有者为上传用户,但开放给所有认证用户访问的场景:

  • 执行AWS CLI命令设置默认ACL为authenticated-read(所有认证用户拥有对象读权限,若需支持修改/复制操作,可结合桶策略或使用更宽松的自定义ACL):
aws s3api put-bucket-acl --bucket mybucket --default-object-acl authenticated-read
  • 效果:后续所有用户上传的对象,默认ACL会自动包含所有认证用户的读权限,结合你现有的桶策略,user-01即可正常完成对象复制操作。

方案2:启用桶所有者强制控制(Bucket Ownership Controls)

若可以接受所有上传对象的所有者归桶所有者(user-00),此方案更彻底,能让桶策略完全覆盖对象级权限限制:

  • 执行以下命令开启BucketOwnerEnforced模式:
aws s3api put-bucket-ownership-controls --bucket mybucket --ownership-controls Rules=[{ObjectOwnership=BucketOwnerEnforced}]
  • 效果:开启后,任何用户上传的对象都会自动归桶所有者user-00所有,对象自身的ACL会被忽略,直接遵循桶策略的规则。你的现有桶策略已允许所有认证用户完全访问,因此user-01可直接复制对象,无需再关注对象级ACL。

补充说明

  • 上述方案均针对新上传对象自动生效,无需实时修改已存在的对象ACL;若需处理历史对象,可批量修改ACL,但你明确无需此操作,因此无需额外处理。
  • 注意Ceph版本兼容性:BucketOwnershipControls需要Ceph Nautilus及以上版本支持,default-object-acl为基础特性,多数Ceph版本均兼容。

内容的提问来源于stack exchange,提问作者David Parks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 22:22:49