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 对象网关软件.
- 一个现有存储桶。
流程
列出存储桶:
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" ]
重命名存储桶:
语法
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
验证存储桶已被重命名:
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 对象网关软件.
- 一个现有存储桶。
流程
列出存储桶。
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" ]
删除存储桶。
语法
radosgw-admin bucket rm --bucket=BUCKET_NAME
Example
[ceph: root@host01 /]# radosgw-admin bucket rm --bucket=s3bucket1
如果存储桶有对象,请运行以下命令:
语法
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
选项会触发删除没有垃圾收集器的对象,从而使进程更高效。验证存储桶已被删除。
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 的所有权更改为新用户。
流程
将存储桶链接到一个新用户:
语法
radosgw-admin bucket link --uid=USER --bucket=BUCKET
Example
[ceph: root@host01 /]# radosgw-admin bucket link --uid=user2 --bucket=data
验证存储桶已成功链接到
user2
:Example
[ceph: root@host01 /]# radosgw-admin bucket list --uid=user2 [ "data" ]
将存储桶的所有权更改为新用户:
语法
radosgw-admin bucket chown --uid=user --bucket=bucket
Example
[ceph: root@host01 /]# radosgw-admin bucket chown --uid=user2 --bucket=data
通过检查以下命令输出中的
owner
行来验证data
存储桶的所有权是否已成功更改:Example
[ceph: root@host01 /]# radosgw-admin bucket list --bucket=data
9.7.3.2. 在租户用户之间移动存储桶
您可以在一个租户用户和另一个租户用户之间移动存储桶。
流程
将存储桶链接到一个新用户:
语法
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
验证存储桶已成功链接到
user2
:[ceph: root@host01 /]# radosgw-admin bucket list --uid=test$user2 [ "data" ]
将存储桶的所有权更改为新用户:
语法
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'
通过检查以下命令输出中的
owner
行来验证data
存储桶的所有权是否已成功更改:[ceph: root@host01 /]# radosgw-admin bucket list --bucket=test2/data
9.7.3.3. 将存储桶从非租户用户移到租户的用户
您可以将存储桶从非租户用户移到租户用户。
流程
可选:如果您还没有多个租户,您可以通过启用
rgw_keystone_implicit_tenants
并从外部租户访问 Ceph 对象网关来创建它们:启用
rgw_keystone_implicit_tenants
选项:Example
[ceph: root@host01 /]# ceph config set client.rgw rgw_keystone_implicit_tenants true
使用
s3cmd
或swift
命令从外部租户访问 Ceph 对象网关:Example
[ceph: root@host01 /]# swift list
或使用
s3cmd
:Example
[ceph: root@host01 /]# s3cmd ls
从外部租户进行第一次访问可创建等效的 Ceph 对象网关用户。
将存储桶移到租户的用户:
语法
radosgw-admin bucket link --bucket=/BUCKET --uid='TENANT$USER'
Example
[ceph: root@host01 /]# radosgw-admin bucket link --bucket=/data --uid='test$tenanted-user'
验证
data
存储桶是否已成功链接到tenanted-user
:Example
[ceph: root@host01 /]# radosgw-admin bucket list --uid='test$tenanted-user' [ "data" ]
将存储桶的所有权更改为新用户:
语法
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'
通过检查以下命令输出中的
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 find
和 orphans finish
子命令。
不要在使用无索引存储桶 时使用此命令
,因为所有对象都显示为 孤立的
。
身份孤立对象的另一种方式是运行 rados -p <pool> ls | grep BUCKET_ID
命令。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- 正在运行的 Ceph 对象网关.
流程
生成存储桶中保存数据的对象列表。
语法
radosgw-admin bucket radoslist --bucket BUCKET_NAME
Example
[root@host01 ~]# radosgw-admin bucket radoslist --bucket mybucket
注意如果省略 BUCKET_NAME,则会显示所有存储桶中的所有对象。
检查
rgw-orphan-list
的版本。Example
[root@host01 ~]# head /usr/bin/rgw-orphan-list
版本应该是
2023-01-11
或更新版本。创建一个目录,在其中生成孤立项的列表。
Example
[root@host01 ~]# mkdir orphans
导航到之前创建的目录。
Example
[root@host01 ~]# cd orphans
从池列表中,选择要在其中查找孤立的池。这个脚本可能会运行很长时间,具体取决于集群中的对象。
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
命令而非元数据池时,必须指定数据池。查看
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.
运行
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
检查列出的孤立对象。
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
删除孤立对象:
语法
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 对象网关.
- 新创建的存储桶。
流程
检查特定存储桶的存储桶索引:
语法
radosgw-admin bucket check --bucket=BUCKET_NAME
Example
[root@rgw ~]# radosgw-admin bucket check --bucket=mybucket
修复存储桶索引中的不一致,包括删除孤立对象:
语法
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
配置参数,请确保包含 s3
和 notifications
。要验证这一点,请运行 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 事件、ObjectCreated
、ObjectRemoved
和 ObjectLifecycle: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_delete
和 s3_multi_object_delete
。
流程
- 创建 S3 存储桶。
-
为
http
、amqp
或kafka
协议创建一个 SNS 主题。 为
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:*'] }]})
- 在 bucket 中创建 S3 对象。
-
在
http
、rabbitmq
或kafka
接收器上验证对象创建事件。 - 删除对象。
-
在
http
、rabbitmq
或kafka
接收器上验证对象删除事件。
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 粒度同步策略。
流程
创建包含复制详情的复制配置文件:
语法
{ "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" } } ] }
创建 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
验证
使用
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" } ] }
-
启用 :这些管道已启用,并且组状态设置为 'rgw_sync_policy_group:STATUS'。例如,
其它资源
- 详情请参阅 Red Hat Ceph Storage Object Gateway 指南中的使用多站点同步策略部分。 https://docs.redhat.com/en/documentation/red_hat_ceph_storage/8/html-single/object_gateway_guide/index##using-multisite-sync-policies
9.7.4.2. 获取 S3 存储桶复制
您可以检索存储桶的复制配置。
先决条件
- 正在运行的 Red Hat Ceph Storage 集群配置多站点 Ceph 对象网关。有关创建多站点同步策略的更多信息,请参阅创建同步策略组。
- 已创建 zone group 级别策略。有关创建 zone group 策略的更多信息,请参阅 Bucket 粒度同步策略。
- 已创建 S3 存储桶复制。如需更多信息,请参阅 S3 存储桶复制 API。
流程
获取 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 所有者可以向其他人授予权限,以删除复制配置。
先决条件
- 正在运行的 Red Hat Ceph Storage 集群配置多站点 Ceph 对象网关。有关创建多站点同步策略的更多信息,请参阅创建同步策略组。
- 已创建 zone group 级别策略。有关创建 zone group 策略的更多信息,请参阅 Bucket 粒度同步策略。
- 已创建 S3 存储桶复制。如需更多信息,请参阅 S3 存储桶复制 API。
流程
删除 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 粒度同步策略。
流程
创建用户策略配置文件以拒绝对 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:::*", } }
以 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 Ceph Storage Object Gateway Guide 中的 S3 bucket 复制 API 部分。