9.7. bucket 管理


作为存储管理员,在使用 Ceph 对象网关时,您可以通过在用户之间移动 bucket 并将它们重命名来管理存储桶。您可以创建存储桶通知,在特定事件时触发。此外,您可以在 Ceph 对象网关中发现在存储集群的生命周期内可能会发生孤立或泄漏的对象。

注意

当数百万对象上传到具有高容量率的 Ceph 对象网关 bucket 时,会使用 radosgw-admin bucket stats 命令报告不正确的 num_objects。使用 radosgw-admin bucket list 命令,您可以更正 num_objects 参数的值。

注意

在多站点集群中,从次要站点中删除存储桶不会与主站点同步元数据更改。因此,红帽建议只从主站点中删除存储桶,而不是从次要站点中删除存储桶。

9.7.1. 重命名存储桶

您可以重命名存储桶。如果要在存储桶名称中允许下划线,请将 rgw_relaxed_s3_bucket_names 选项设置为 true

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 安装 Ceph 对象网关软件.
  • 一个现有存储桶。

流程

  1. 列出存储桶:

    示例

    [ceph: root@host01 /]# radosgw-admin bucket list
    [
        "34150b2e9174475db8e191c188e920f6/swcontainer",
        "s3bucket1",
        "34150b2e9174475db8e191c188e920f6/swimpfalse",
        "c278edd68cfb4705bb3e07837c7ad1a8/ec2container",
        "c278edd68cfb4705bb3e07837c7ad1a8/demoten1",
        "c278edd68cfb4705bb3e07837c7ad1a8/demo-ct",
        "c278edd68cfb4705bb3e07837c7ad1a8/demopostup",
        "34150b2e9174475db8e191c188e920f6/postimpfalse",
        "c278edd68cfb4705bb3e07837c7ad1a8/demoten2",
        "c278edd68cfb4705bb3e07837c7ad1a8/postupsw"
    ]

  2. 重命名存储桶:

    语法

    radosgw-admin bucket link --bucket=ORIGINAL_NAME --bucket-new-name=NEW_NAME --uid=USER_ID

    示例

    [ceph: root@host01 /]# radosgw-admin bucket link --bucket=s3bucket1 --bucket-new-name=s3newb --uid=testuser

    如果存储桶位于租户中,还要指定租户:

    语法

    radosgw-admin bucket link --bucket=tenant/ORIGINAL_NAME --bucket-new-name=NEW_NAME --uid=TENANT$USER_ID

    示例

    [ceph: root@host01 /]# radosgw-admin bucket link --bucket=test/s3bucket1 --bucket-new-name=s3newb --uid=test$testuser

  3. 验证存储桶已被重命名:

    示例

    [ceph: root@host01 /]# radosgw-admin bucket list
    [
        "34150b2e9174475db8e191c188e920f6/swcontainer",
        "34150b2e9174475db8e191c188e920f6/swimpfalse",
        "c278edd68cfb4705bb3e07837c7ad1a8/ec2container",
        "s3newb",
        "c278edd68cfb4705bb3e07837c7ad1a8/demoten1",
        "c278edd68cfb4705bb3e07837c7ad1a8/demo-ct",
        "c278edd68cfb4705bb3e07837c7ad1a8/demopostup",
        "34150b2e9174475db8e191c188e920f6/postimpfalse",
        "c278edd68cfb4705bb3e07837c7ad1a8/demoten2",
        "c278edd68cfb4705bb3e07837c7ad1a8/postupsw"
    ]

9.7.2. 删除存储桶

使用 Ceph 对象网关配置从 Red Hat Ceph Storage 集群中删除存储桶。

当存储桶没有对象时,您可以运行 radosgw-admin bucket rm 命令。如果存储桶中存在对象,您可以使用 --purge-objects 选项。

对于多站点配置,红帽建议从主站点中删除存储桶。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 安装 Ceph 对象网关软件.
  • 一个现有存储桶。

流程

  1. 列出存储桶。

    示例

    [ceph: root@host01 /]# radosgw-admin bucket list
    [
        "34150b2e9174475db8e191c188e920f6/swcontainer",
        "s3bucket1",
        "34150b2e9174475db8e191c188e920f6/swimpfalse",
        "c278edd68cfb4705bb3e07837c7ad1a8/ec2container",
        "c278edd68cfb4705bb3e07837c7ad1a8/demoten1",
        "c278edd68cfb4705bb3e07837c7ad1a8/demo-ct",
        "c278edd68cfb4705bb3e07837c7ad1a8/demopostup",
        "34150b2e9174475db8e191c188e920f6/postimpfalse",
        "c278edd68cfb4705bb3e07837c7ad1a8/demoten2",
        "c278edd68cfb4705bb3e07837c7ad1a8/postupsw"
    ]

  2. 移除存储桶。

    语法

    radosgw-admin bucket rm --bucket=BUCKET_NAME

    示例

    [ceph: root@host01 /]# radosgw-admin bucket rm --bucket=s3bucket1

  3. 如果存储桶有对象,请运行以下命令:

    语法

    radosgw-admin bucket rm --bucket=BUCKET --purge-objects --bypass-gc

    示例

    [ceph: root@host01 /]# radosgw-admin bucket rm --bucket=s3bucket1 --purge-objects --bypass-gc

    --purge-objects 选项清除对象,--bypass-gc 选项会触发删除对象,而无需垃圾收集器使进程更高效。

  4. 验证存储桶已被删除。

    示例

    [ceph: root@host01 /]# radosgw-admin bucket list
    [
        "34150b2e9174475db8e191c188e920f6/swcontainer",
        "34150b2e9174475db8e191c188e920f6/swimpfalse",
        "c278edd68cfb4705bb3e07837c7ad1a8/ec2container",
        "c278edd68cfb4705bb3e07837c7ad1a8/demoten1",
        "c278edd68cfb4705bb3e07837c7ad1a8/demo-ct",
        "c278edd68cfb4705bb3e07837c7ad1a8/demopostup",
        "34150b2e9174475db8e191c188e920f6/postimpfalse",
        "c278edd68cfb4705bb3e07837c7ad1a8/demoten2",
        "c278edd68cfb4705bb3e07837c7ad1a8/postupsw"
    ]

9.7.3. 移动存储桶

radosgw-admin bucket 实用程序提供在用户之间移动 bucket 的功能。为此,请将存储桶链接到新用户,并将 bucket 的所有权更改为新用户。

您可以移动存储桶:

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 已安装 Ceph 对象网关。
  • S3 存储桶。
  • 各种租户和非租户用户。

9.7.3.1. 在非租户用户之间移动存储桶

radosgw-admin bucket chown 命令提供将 bucket 的所有权及其包含的所有对象从一个用户更改为另一个用户的功能。为此,请从当前用户取消链接存储桶,将它链接到新用户,然后将 bucket 的所有权更改为新用户。

流程

  1. 将存储桶链接到一个新用户:

    语法

    radosgw-admin bucket link --uid=USER --bucket=BUCKET

    示例

    [ceph: root@host01 /]# radosgw-admin bucket link --uid=user2 --bucket=data

  2. 验证存储桶已成功链接到 user2

    示例

    [ceph: root@host01 /]# radosgw-admin bucket list --uid=user2
    [
        "data"
    ]

  3. 将存储桶的所有权更改为新用户:

    语法

    radosgw-admin bucket chown --uid=user --bucket=bucket

    示例

    [ceph: root@host01 /]# radosgw-admin bucket chown --uid=user2 --bucket=data

  4. 通过检查以下命令输出中的 owner 行来验证 data 存储桶的所有权是否已成功更改:

    示例

    [ceph: root@host01 /]# radosgw-admin bucket list --bucket=data

9.7.3.2. 在租户用户之间移动存储桶

您可以在租户用户和另一个租户用户之间移动存储桶。

流程

  1. 将存储桶链接到一个新用户:

    语法

    radosgw-admin bucket link --bucket=CURRENT_TENANT/BUCKET --uid=NEW_TENANT$USER

    示例

    [ceph: root@host01 /]# radosgw-admin bucket link --bucket=test/data --uid=test2$user2

  2. 验证存储桶已成功链接到 user2

    [ceph: root@host01 /]# radosgw-admin bucket list --uid=test$user2
    [
        "data"
    ]
  3. 将存储桶的所有权更改为新用户:

    语法

    radosgw-admin bucket chown --bucket=NEW_TENANT/BUCKET --uid=NEW_TENANT$USER

    示例

    [ceph: root@host01 /]# radosgw-admin bucket chown --bucket='test2/data' --uid='test$tuser2'

  4. 通过检查以下命令输出中的 owner 行来验证 data 存储桶的所有权是否已成功更改:

    [ceph: root@host01 /]# radosgw-admin bucket list --bucket=test2/data

9.7.3.3. 将存储桶从非租户用户移到租户的用户

您可以将存储桶从非租户用户移到租户用户。

流程

  1. 可选:如果您还没有多个租户,您可以通过启用 rgw_keystone_implicit_tenants 并从外部租户访问 Ceph 对象网关来创建它们:

    启用 rgw_keystone_implicit_tenants 选项:

    示例

    [ceph: root@host01 /]# ceph config set client.rgw rgw_keystone_implicit_tenants true

    使用 s3cmdswift 命令从外部租户访问 Ceph 对象网关:

    示例

    [ceph: root@host01 /]# swift list

    或使用 s3cmd:

    示例

    [ceph: root@host01 /]# s3cmd ls

    从外部租户进行第一次访问可创建等效的 Ceph 对象网关用户。

  2. 将存储桶移到租户的用户:

    语法

    radosgw-admin bucket link --bucket=/BUCKET --uid='TENANT$USER'

    示例

    [ceph: root@host01 /]# radosgw-admin bucket link --bucket=/data --uid='test$tenanted-user'

  3. 验证 data 存储桶是否已成功链接到 tenanted-user

    示例

    [ceph: root@host01 /]# radosgw-admin bucket list --uid='test$tenanted-user'
    [
        "data"
    ]

  4. 将存储桶的所有权更改为新用户:

    语法

    radosgw-admin bucket chown --bucket='tenant/bucket name' --uid='tenant$user'

    示例

    [ceph: root@host01 /]# radosgw-admin bucket chown --bucket='test/data' --uid='test$tenanted-user'

  5. 通过检查以下命令输出中的 owner 行来验证 data 存储桶的所有权是否已成功更改:

    示例

    [ceph: root@host01 /]# radosgw-admin bucket list --bucket=test/data

9.7.3.4. 查找孤立和泄漏对象

健康的存储集群没有任何孤立或泄漏的对象,但在某些情况下可能会发生孤立或泄漏的对象。

存储集群中存在孤立对象,并且具有与 RADOS 对象关联的对象 ID。但是,在 bucket 索引引用中,没有通过 S3 对象引用 RADOS 对象。例如,如果 Ceph 对象网关在操作的中间发生,这可能会导致一些对象变得孤立。另外,未发现的错误可能导致孤立对象发生。

您可以了解 Ceph 对象网关对象如何映射到 RADOS 对象。radosgw-admin 命令提供了一个用于搜索和生成这些潜在孤立或泄漏对象的列表的工具。使用 radoslist 子命令可显示 bucket 中存储的对象,或者存储集群中的所有 bucket。rgw-orphan-list 脚本显示池中的孤立对象。

注意

radoslist 子命令将替代已弃用的 orphans findorphans finish 子命令。

重要

不要使用无索引存储桶 因为所有对象都显示为 孤立

身份孤立对象的另一种方法是运行 rados -p <pool> ls | grep BUCKET_ID 命令。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 正在运行的 Ceph 对象网关.

流程

  1. 生成存储桶中保存数据的对象列表。

    语法

    radosgw-admin bucket radoslist --bucket BUCKET_NAME

    示例

    [root@host01 ~]# radosgw-admin bucket radoslist --bucket mybucket

    注意

    如果省略 BUCKET_NAME,则会显示所有存储桶中的所有对象。

  2. 检查 rgw-orphan-list 的版本。

    示例

    [root@host01 ~]# head /usr/bin/rgw-orphan-list

    版本应该是 2023-01-11 或更新版本。

  3. 创建一个需要生成孤立项列表的目录。

    示例

    [root@host01 ~]# mkdir orphans

  4. 导航到之前创建的目录。

    示例

    [root@host01 ~]# cd orphans

  5. 从池列表中,选择要在其中查找孤立的池。根据集群中的对象,此脚本可能会长时间运行。

    示例

    [root@host01 orphans]# rgw-orphan-list

    示例

    Available pools:
        .rgw.root
        default.rgw.control
        default.rgw.meta
        default.rgw.log
        default.rgw.buckets.index
        default.rgw.buckets.data
        rbd
        default.rgw.buckets.non-ec
        ma.rgw.control
        ma.rgw.meta
        ma.rgw.log
        ma.rgw.buckets.index
        ma.rgw.buckets.data
        ma.rgw.buckets.non-ec
    Which pool do you want to search for orphans?

    输入池名称以搜索孤立项。

    重要

    在使用 rgw-orphan-list 命令而非元数据池时,必须指定数据池。

  6. 查看 rgw-orphan-list 工具用法的详细信息。

    Synatx

    rgw-orphan-list -h
    rgw-orphan-list POOL_NAME /DIRECTORY

    示例

    [root@host01 orphans]# rgw-orphan-list default.rgw.buckets.data /orphans
    
    2023-09-12 08:41:14 ceph-host01 Computing delta...
    2023-09-12 08:41:14 ceph-host01 Computing results...
    10 potential orphans found out of a possible 2412 (0%).         <<<<<<< orphans detected
    The results can be found in './orphan-list-20230912124113.out'.
        Intermediate files are './rados-20230912124113.intermediate' and './radosgw-admin-20230912124113.intermediate'.
    ***
    *** WARNING: This is EXPERIMENTAL code and the results should be used
    ***          only with CAUTION!
    ***
    Done at 2023-09-12 08:41:14.

  7. 运行 ls -l 命令,以验证以 error 结尾的文件应该为零长度,表示脚本运行没有任何问题。

    示例

    [root@host01 orphans]# ls -l
    
    -rw-r--r--. 1 root root    770 Sep 12 03:59 orphan-list-20230912075939.out
    -rw-r--r--. 1 root root      0 Sep 12 03:59 rados-20230912075939.error
    -rw-r--r--. 1 root root 248508 Sep 12 03:59 rados-20230912075939.intermediate
    -rw-r--r--. 1 root root      0 Sep 12 03:59 rados-20230912075939.issues
    -rw-r--r--. 1 root root      0 Sep 12 03:59 radosgw-admin-20230912075939.error
    -rw-r--r--. 1 root root 247738 Sep 12 03:59 radosgw-admin-20230912075939.intermediate

  8. 检查列出的孤立对象。

    示例

    [root@host01 orphans]# cat ./orphan-list-20230912124113.out
    
    a9c042bc-be24-412c-9052-dda6b2f01f55.16749.1_key1.cherylf.433-bucky-4865-0.0
    a9c042bc-be24-412c-9052-dda6b2f01f55.16749.1_key1.cherylf.433-bucky-4865-0.1
    a9c042bc-be24-412c-9052-dda6b2f01f55.16749.1_key1.cherylf.433-bucky-4865-0.2
    a9c042bc-be24-412c-9052-dda6b2f01f55.16749.1_key1.cherylf.433-bucky-4865-0.3
    a9c042bc-be24-412c-9052-dda6b2f01f55.16749.1_key1.cherylf.433-bucky-4865-0.4
    a9c042bc-be24-412c-9052-dda6b2f01f55.16749.1_key1.cherylf.433-bucky-4865-0.5
    a9c042bc-be24-412c-9052-dda6b2f01f55.16749.1_key1.cherylf.433-bucky-4865-0.6
    a9c042bc-be24-412c-9052-dda6b2f01f55.16749.1_key1.cherylf.433-bucky-4865-0.7
    a9c042bc-be24-412c-9052-dda6b2f01f55.16749.1_key1.cherylf.433-bucky-4865-0.8
    a9c042bc-be24-412c-9052-dda6b2f01f55.16749.1_key1.cherylf.433-bucky-4865-0.9

  9. 删除孤立对象:

    语法

    rados -p POOL_NAME rm OBJECT_NAME

    示例

    [root@host01 orphans]# rados -p default.rgw.buckets.data rm myobject

    警告

    验证您是否删除了正确的对象。运行 rados rm 命令从存储集群中移除数据。

9.7.3.5. 管理存储桶索引条目

您可以使用 radosgw-admin bucket check 子命令,在 Red Hat Ceph Storage 集群中管理 Ceph 对象网关的存储桶索引条目。

与多部分上传对象相关的每个 bucket 索引条目都与其对应的 .meta 索引条目匹配。对于给定多部分上传,应该有一个 .meta 条目。如果某个部分找不到对应的 .meta 条目,它会在输出的部分中列出"孤立"片段条目。

bucket 的统计信息存储在存储桶索引标头中。此阶段加载这些标头,并迭代存储桶索引中的所有普通对象条目,并重新计算统计。然后,它会在标有 "existing_header" 和 "calculated_header" 的部分中分别显示实际和计算的统计数据,以便可以比较它们。

如果您将 --fix 选项与 bucket check 子命令搭配使用,它会从存储桶索引中删除"孤立"条目,并用它计算的标头中覆盖标头中的现有统计。这会导致输出中列出所有条目,包括版本控制中使用的多个条目。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 正在运行的 Ceph 对象网关.
  • 新创建的存储桶。

流程

  1. 检查特定存储桶的存储桶索引:

    语法

    radosgw-admin bucket check --bucket=BUCKET_NAME

    示例

    [root@rgw ~]# radosgw-admin bucket check --bucket=mybucket

  2. 修复存储桶索引中的不一致问题,包括删除孤立对象:

    语法

    radosgw-admin bucket check --fix --bucket=BUCKET_NAME

    示例

    [root@rgw ~]# radosgw-admin bucket check --fix --bucket=mybucket

9.7.3.6. bucket 通知

bucket 通知提供了一种方式,可以在 bucket 中发生特定事件时从 Ceph 对象网关发送信息。bucket 通知可以发送到 HTTP、AMQP0.9.1 和 Kafka 端点。必须创建一个通知条目,以便为特定存储桶上的事件和特定主题发送存储桶通知。可以在事件类型的子集上创建 bucket 通知,也可以默认为所有事件类型创建 bucket 通知。bucket 通知可以根据密钥前缀或后缀、匹配键的正则表达式、附加到对象或对象标签的元数据属性过滤出事件。bucket 通知具有 REST API,用于为 bucket 通知机制提供配置和控制接口。

注意

bucket 通知 API 会被默认启用。如果明确设置了 rgw_enable_apis 配置参数,请确保包含 s3notifications。要进行验证,请运行 ceph --admin-daemon /var/run/ceph/ceph-client.rgw.NAME.asok config get rgw_enable_apis 命令。将 NAME 替换为 Ceph 对象网关实例名称。

使用 CLI 的主题管理

您可以管理 Ceph 对象网关存储桶的列表、获取和删除主题:

  • 列出主题 : 运行以下命令列出所有主题的配置:

    示例

    [ceph: host01 /]# radosgw-admin topic list

  • 获取主题 : 运行以下命令以获取特定主题的配置:

    示例

    [ceph: host01 /]# radosgw-admin topic get --topic=topic1

  • 删除主题 : 运行以下命令以删除特定主题的配置:

    示例

    [ceph: host01 /]# radosgw-admin topic rm --topic=topic1

    注意

    即使 Ceph 对象网关存储桶已配置至该主题,该主题也会被删除。

9.7.3.7. 创建存储桶通知

在 bucket 级别上创建 bucket 通知。通知配置具有 Red Hat Ceph Storage Object Gateway S3 事件、ObjectCreatedObjectRemovedObjectLifecycle:Expiration。它们需要与目的地一起发布,以发送存储桶通知。bucket 通知是 S3 操作。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 正在运行的 HTTP 服务器、RabbitMQ 服务器或 Kafka 服务器。
  • 根级别访问权限.
  • 安装 Red Hat Ceph Storage 存储对象网关.
  • 用户 access key 和 secret key。
  • 端点参数.
重要

红帽支持 ObjectCreate 事件,如 put, post, multipartUpload, 和 copy。红帽还支持 ObjectRemove 事件,如 object_deletes3_multi_object_delete

流程

  1. 创建 S3 存储桶。
  2. httpamqpkafka 协议创建一个 SNS 主题。
  3. s3:objectCreate,s3:objectRemove, 和 s3:ObjectLifecycle:Expiration 事件创建一个 S3 存储桶通知:

    示例

    client.put_bucket_notification_configuration(
       Bucket=bucket_name,
       NotificationConfiguration={
           'TopicConfigurations': [
               {
                   'Id': notification_name,
                   'TopicArn': topic_arn,
                   'Events': ['s3:ObjectCreated:*', 's3:ObjectRemoved:*', 's3:ObjectLifecycle:Expiration:*']
               }]})

  4. 在存储桶中创建 S3 对象。
  5. httprabbitmqkafka 接收器验证对象创建事件。
  6. 删除对象。
  7. httprabbitmqkafka 接收器验证对象删除事件。

9.7.4. S3 bucket 复制 API

S3 bucket 复制 API 已被实施,允许用户在不同 bucket 之间创建复制规则。请注意,虽然 AWS 复制功能允许在同一区内复制存储桶,但 Ceph 对象网关目前不允许它。但是,Ceph 对象网关 API 也添加了一个 Zone 数组,允许用户选择要同步特定 bucket 的区域。

9.7.4.1. 创建 S3 存储桶复制

为存储桶创建复制配置或替换现有配置。

复制配置必须至少包含一个规则。每个规则通过过滤源存储桶中的对象来识别要复制的对象子集。

先决条件

  • 正在运行的 Red Hat Ceph Storage 集群配置多站点 Ceph 对象网关。有关创建多站点同步策略的更多信息,请参阅创建同步策略组
  • 已创建 zone group 级别策略。有关创建 zone group 策略的更多信息,请参阅 Bucket 粒度同步策略

流程

  1. 创建包含复制详情的复制配置文件:

    语法

    {
    "Role": "arn:aws:iam::account-id:role/role-name",
        "Rules": [
            {
                "ID": "String",
                "Status": "Enabled",
                "Priority": 1,
                "DeleteMarkerReplication": { "Status": "Enabled"|"Disabled" },
                "Destination": {
                    "Bucket": "BUCKET_NAME"
                }
            }
        ]
    }

    示例

    [root@host01 ~]# cat replication.json
    {
        "Role": "arn:aws:iam::account-id:role/role-name",
        "Rules": [
            {
                "ID": "pipe-bkt",
                "Status": "Enabled",
                "Priority": 1,
                "DeleteMarkerReplication": { "Status": "Disabled" },
                "Destination": {
                    "Bucket": "testbucket"
                }
            }
        ]
    }

  2. 创建 S3 API 放置存储桶复制:

    语法

    aws --endpoint-url=RADOSGW_ENDPOINT_URL s3api put-bucket-replication --bucket BUCKET_NAME --replication-configuration file://REPLICATION_CONFIIRATION_FILE.json

    示例

    [root@host01 ~]# aws --endpoint-url=http://host01:80 s3api put-bucket-replication --bucket testbucket --replication-configuration file://replication.json

验证

  1. 使用 sync policy get 命令验证同步策略。

    语法

    radosgw-admin sync policy get --bucket BUCKET_NAME

    注意

    应用复制策略时,规则将转换为 sync-policy 规则,称为 管道,并归类为 启用和禁用

    • 启用 :这些管道已启用,并且组状态设置为 'rgw_sync_policy_group:STATUS'。例如,s3-bucket-replication:enabled
    • disabled :此集合下的管道不是活跃的,组状态被设置为 'rgw_sync_policy_group:STATUS'。例如,s3-bucket-replication:disabled

    由于可能存在多个规则,它们可以配置为复制策略的一部分,它有两个独立的组(一个带有 'enabled',另一个带有"allowed"状态)来准确映射每个组。

    示例

    [ceph: root@host01 /]# radosgw-admin sync policy get --bucket testbucket
    {
        "groups": [
            {
                "id": "s3-bucket-replication:disabled",
                "data_flow": {},
                "pipes": [],
                "status": "allowed"
            },
            {
                "id": "s3-bucket-replication:enabled",
                "data_flow": {},
                "pipes": [
                    {
                        "id": "",
                        "source": {
                            "bucket": "*",
                            "zones": [
                                "*"
                            ]
                        },
                        "dest": {
                            "bucket": "testbucket",
                            "zones": [
                                "*"
                            ]
                        },
                        "params": {
                            "source": {},
                            "dest": {},
                            "priority": 1,
                            "mode": "user",
                            "user": "s3cmd"
                        }
                    }
                ],
                "status": "enabled"
            }
        ]
    }

其它资源

9.7.4.2. 获取 S3 存储桶复制

您可以检索存储桶的复制配置。

先决条件

流程

  • 获取 S3 API 放置存储桶复制:

    语法

    aws s3api get-bucket-replication --bucket BUCKET_NAME --endpoint-url=RADOSGW_ENDPOINT_URL

    示例

    [root@host01 ~]# aws s3api get-bucket-replication --bucket testbucket --endpoint-url=http://host01:80
    {
    
    "ReplicationConfiguration": {
        "Role": "",
        "Rules": [
            {
                "ID": "pipe-bkt",
                "Status": "Enabled",
                "Priority": 1,
                "Destination": {
                    Bucket": "testbucket"
                }
            }
        ]
      }
    
    }

9.7.4.3. 删除 S3 存储桶复制

从存储桶中删除复制配置。

bucket 所有者可以为其他人授予权限来删除复制配置。

先决条件

流程

  1. 删除 S3 API 放置存储桶复制:

    语法

    aws s3api delete-bucket-replication --bucket BUCKET_NAME --endpoint-url=RADOSGW_ENDPOINT_URL

    示例

    [root@host01 ~]# aws s3api delete-bucket-replication --bucket testbucket --endpoint-url=http://host01:80

验证

  • 验证现有的复制规则是否已删除:

    语法

    radosgw-admin sync policy get --bucket=BUCKET_NAME

    示例

    [ceph: root@host01 /]# radosgw-admin sync policy get --bucket=testbucket

9.7.4.4. 为用户禁用 S3 存储桶复制

作为管理员,您可以为其他用户设置用户策略,以限制对位于该特定用户/用户的存储桶执行任何 s3 复制 API 操作。

先决条件

  • 正在运行的 Red Hat Ceph Storage 集群配置多站点 Ceph 对象网关。有关创建多站点同步策略的更多信息,请参阅创建同步策略组
  • 已创建 zone group 级别策略。有关创建 zone group 策略的更多信息,请参阅 Bucket 粒度同步策略

流程

  1. 创建用户策略配置文件以拒绝对 S3 存储桶复制 API 的访问:

    示例

    [root@host01 ~]# cat user_policy.json
    {
    	"Version":"2012-10-17",
    	"Statement":
    	{
    		"Effect":"Deny",
    		"Action":
    		[
    			"s3:PutReplicationConfiguration",
    			"s3:GetReplicationConfiguration",
    			"s3:DeleteReplicationConfiguration"
    		],
    		"Resource": "arn:aws:s3:::*",
    	}
    }

  2. 以 admin 用户身份,将用户策略设置为 user 以禁用用户对 S3 API 的访问:

    语法

    aws --endpoint-url=ENDPOINT_URL iam put-user-policy --user-name USER_NAME --policy-name USER_POLICY_NAME --policy-document POLICY_DOCUMENT_PATH

    示例

    [root@host01 ~]# aws --endpoint-url=http://host01:80 iam put-user-policy --user-name newuser1 --policy-name userpolicy --policy-document file://user_policy.json

验证

  • 以 admin 用户身份,验证用户策略集:

    语法

    aws --endpoint-url=ENDPOINT_URL iam get-user-policy --user-name USER_NAME --policy-name USER_POLICY_NAME --region us

    示例

    [root@host01 ~]# aws --endpoint-url=http://host01:80 iam get-user-policy --user-name newuser1 --policy-name userpolicy --region us

  • 作为 admin 用户设置了用户策略的用户,请尝试在 S3 存储桶复制 API 操作下执行,以验证操作是否如预期拒绝。

其它资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.