0

我有一个包含数百万个对象的 ceph/radosgw 存储桶,我需要将存储桶的所有权更改给另一个用户。

通常,这是通过link将存储桶 ing 到新用户,然后chowning 中的所有文件来完成的,如下所示:

radosgw-admin bucket unlink --uid=user1 --bucket=bigbucket
radosgw-admin bucket link --uid=user2 --bucket=bigbucket
radosgw-admin bucket chown --uid=user2 --bucket=bigbucket

不幸的是,该chown操作必须遍历存储桶中的每个对象才能更新元数据。这会导致停机时间延长(有时显然是每百万个对象 1 小时),旧用户和新用户都无法访问存储桶的全部内容。

有什么方法可以在不需要停机的情况下更改存储桶所有权?一些想法:

  • 两个用户是否可以同时拥有一个存储桶或特定对象?
  • 我们可以创建新用户,然后只更改他们uid或其他一些元数据,授予他们访问旧用户存储桶的权限吗?
  • 问题可以在客户端解决,还是可以通过代理解决?
4

1 回答 1

0

您可以向存储桶添加存储桶策略以访问两个用户,直到通过chown命令完成迁移:

{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Principal": {"AWS": ["arn:aws:iam:::user/user1", "arn:aws:iam:::user/user2"]},
    "Action": "*",
    "Resource": [
      "arn:aws:s3:::bigbucket/*"
    ]
  }]
}
于 2021-06-30T16:46:11.460 回答