为同一租户上的另一个用户设置 Ceph Rgw 存储桶的只读访问权限不起作用

为同一租户上的另一个用户设置 Ceph Rgw 存储桶的只读访问权限不起作用

两个用户无法在 Ceph Reef 上看到彼此的存储桶。

首先,我在 ceph admin vm 上创建用户:

radosgw-admin user create --tenant=homelab --uid=user1 --display-name="First User" --email="[email protected]"
radosgw-admin user create --tenant=homelab --uid=user2 --display-name="Second User" --email="[email protected]"

然后,从我的机器上使用 minio 的 mc 客户端(在 RELEASE.2024-02-09T22-18-24Z,rgw ingress 在 192.168.56.50:4443),我设置了每个用户的别名:

mc --insecure alias set ceph-test-user1 https://192.168.56.50:4443 <user1 access key> <user1 secret key>
mc --insecure alias set ceph-test-user2 https://192.168.56.50:4443 <user2 access key> <user2 secret key>

然后,我为每个用户创建了一个存储桶:

mc --insecure mb ceph-test-user1/user1-test
mc --insecure mb ceph-test-user2/user2-test

每个用户都可以看到自己的存储桶,没问题:

mc --insecure ls ceph-test-user1
mc --insecure ls ceph-test-user2

然后,我设置一个策略以允许用户 2 查看用户 1 的存储桶,如下所示:

mc --insecure anonymous set-json policy.json ceph-test-user1/user1-test

我收到了一条成功消息,但无论我如何调整策略,用户 2 似乎都无法看到用户 1 的存储桶列表:

mc --insecure ls ceph-test-user2

我的策略文件的最后一次迭代如下所示(我尝试将我能找到的每个读取权限都放在文档中):

{
  "Version": "2012-10-17",
  "Id": "S3Policy1",
  "Statement": [
    {
     "Sid": "BucketAllow",
     "Effect": "Allow",
     "Principal": {
       "AWS": ["arn:aws:iam::homelab:user/user2"]
     },
     "Action": [
       "s3:ListBucket",
       "s3:ListBucketVersions",
       "s3:ListAllMyBuckets",
       "s3:ListBucketMultiPartUploads",
       "s3:ListMultipartUploadParts",
       "s3:GetBucketAcl",
       "s3:GetBucketCORS",
       "s3:GetBucketLocation",
       "s3:GetBucketLogging",
       "s3:GetBucketNotification",
       "s3:GetBucketPolicy",
       "s3:GetBucketRequestPayment",
       "s3:GetBucketTagging",
       "s3:GetBucketVersioning",
       "s3:GetBucketWebsite",
       "s3:GetLifecycleConfiguration",
       "s3:GetObjectAcl",
       "s3:GetObject",
       "s3:GetObjectTorrent",
       "s3:GetObjectVersionAcl",
       "s3:GetObjectVersion",
       "s3:GetObjectVersionTorrent",
       "s3:GetReplicationConfiguration"
     ],
     "Resource": [
       "arn:aws:s3:::user1-test",
       "arn:aws:s3:::user1-test/*"
     ]
    }
  ]
}

我也尝试过将存储桶放入不带策略的策略中arn:aws:s3:::user1-test/*(或反之),但没有效果。

有人有任何见解吗?

编辑:好的,实际上,它几乎可以起作用。

当明确传递存储桶的路径时,用户 2 可以查看共享存储桶内用户 1 的对象,如下所示:

mc --insecure ls ceph-test-user2/user1-test

但是,用户 2 必须知道存储桶已经存在,因为通过执行根列表似乎无法发现它。不确定我是否遗漏了权限中的某些内容,或者它是否根本不受支持。

相关内容