9.7. bucket 管理


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

注意

当将数百万对象上传到具有高ingest 速率的 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. 列出存储桶:

    Example

    [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

    Example

    [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

    Example

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

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

    Example

    [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. 列出存储桶。

    Example

    [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

    Example

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

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

    语法

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

    Example

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

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

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

    Example

    [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

    Example

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

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

    Example

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

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

    语法

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

    Example

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

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

    Example

    [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

    Example

    [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

    Example

    [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 选项:

    Example

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

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

    Example

    [ceph: root@host01 /]# swift list

    或使用 s3cmd:

    Example

    [ceph: root@host01 /]# s3cmd ls

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

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

    语法

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

    Example

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

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

    Example

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

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

    语法

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

    Example

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

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

    Example

    [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

    Example

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

    注意

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

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

    Example

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

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

  3. 创建一个目录,在其中生成孤立项的列表。

    Example

    [root@host01 ~]# mkdir orphans

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

    Example

    [root@host01 ~]# cd orphans

  5. 从池列表中,选择要在其中查找孤立的池。这个脚本可能会运行很长时间,具体取决于集群中的对象。

    Example

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

    Example

    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

    Example

    [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 结尾的文件应为零长度,表示脚本在没有任何问题的情况下运行。

    Example

    [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. 检查列出的孤立对象。

    Example

    [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

    Example

    [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 对象网关的存储桶索引条目。

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

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

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

先决条件

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

流程

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

    语法

    radosgw-admin bucket check --bucket=BUCKET_NAME

    Example

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

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

    语法

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

    Example

    [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 对象网关存储桶的列表、获取和删除主题:

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

    Example

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

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

    Example

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

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

    Example

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

    注意

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

9.7.3.7. 创建存储桶通知

在 bucket 级别上创建 bucket 通知。通知配置具有 Red Hat Ceph Storage 对象网关 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 存储桶通知:

    Example

    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. 在 bucket 中创建 S3 对象。
  5. httprabbitmqkafka 接收器上验证对象创建事件。
  6. 删除对象。
  7. httprabbitmqkafka 接收器上验证对象删除事件。

9.7.4. S3 存储桶复制 API

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

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"
                }
            }
        ]
    }

    Example

    [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

    Example

    [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"状态)来准确映射每个组。

    Example

    [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

    Example

    [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

    Example

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

验证

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

    语法

    radosgw-admin sync policy get --bucket=BUCKET_NAME

    Example

    [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 的访问:

    Example

    [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

    Example

    [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

    Example

    [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.