Rgw bucket policy权限设置

一. bucket policy 的应用需求

在上一篇中关于tenant,可以知道 tenant 用作用户的隔离,在实际的应用场景中,情况可能会复杂一些,关于bucket,默认的权限是只有创建者有权限访问,和使用。现在来考虑一下其他应用场景。

二. bucket policy 说明

从官网中的BUCKET POLICIES文档中可以看到,bucket policy 是从L版开始才增加的特性,并且相比AWS的policy,ceph支持的特性是AWS policy 的子集。

bucket policy 的存储形式是bucket meta rados 对象的一个xattr 属性,属性名是user.rgw.iam-policy,policy的文本结构如下

{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Principal": {"AWS": ["arn:aws:iam::usfolks:user/fred"]},
    "Action": "s3:PutObjectAcl",
    "Resource": [
      "arn:aws:s3:::happybucket/*"
    ]
  }]
}

三. bucket policy实践

1.用1个默认tenant的用户和1个显示指定tenant的用户去测试应用场景
tenant ID user ID bucket ID
默认 df_user1 df_bucket1
tenant_1 user1 bucket3
# radosgw-admin bucket list
[
    "df_bucket1", 
    "tenant_1/bucket3", 
]

# radosgw-admin user list
[
    "df_user1", 
    "tenant_1$user1", 
]
  • 因为boto3 不支持ceph的tenant,所以这里对bucket的操作全部使用boto

所有的bucket都已经上传了, 名为”testfile.txt”的文件

2.授予所有用户 df_bucket1 的ListBucket 权限
本篇博文的目的是认识policy是什么,如何通过api去设置policy,如何用api访问多租户下的bucket,关于policy json格式,在参考文档《Aws Bucket Policy》里面说的非常详细。
参考文档