注意

本文档适用于 Ceph 开发版本。

管理员指南

Ceph 对象存储服务启动后,可以使用用户管理、访问控制、配额和使用跟踪来管理。

User Management

Ceph 对象存储的用户管理仅指 Ceph 对象存储服务的用户,而不是作为 Ceph 存储集群用户使用的 Ceph 对象网关。创建用户、访问密钥和密钥以使终端用户能够与 Ceph 对象网关服务交互。可选地,用户可以属于账户以便于管理。

有两种类型的用户:

  • 用户:“用户”一词指的是 S3 接口的用户。

  • 子用户:“子用户”一词指的是 Swift 接口用户。子用户与用户相关联。

用户和子用户可以被创建、修改、查看、暂停和删除。你可以添加显示名称和电子邮件地址到用户配置文件。密钥和密钥可以指定或自动生成。在生成或指定密钥时,请记住用户 ID 对应于 S3 密钥类型,子用户 ID 对应于 Swift 密钥类型。

Swift 密钥具有访问级别read, write, readwritefull.

创建用户

要创建用户(S3 接口),运行以下格式的命令:

radosgw-admin user create --uid={username} --display-name="{display-name}" [--email={email}]

例如:

radosgw-admin user create --uid=johndoe --display-name="John Doe" --email=john@example.com
{ "user_id": "johndoe",
  "display_name": "John Doe",
  "email": "john@example.com",
  "suspended": 0,
  "max_buckets": 1000,
  "subusers": [],
  "keys": [
        { "user": "johndoe",
          "access_key": "11BS02LGFB6AL6H1ADMW",
          "secret_key": "vzCEkuryfn060dfee4fgQPqFrncKEIkh3ZcdOANY"}],
  "swift_keys": [],
  "caps": [],
  "op_mask": "read, write, delete",
  "default_placement": "",
  "placement_tags": [],
  "bucket_quota": { "enabled": false,
      "max_size_kb": -1,
      "max_objects": -1},
  "user_quota": { "enabled": false,
      "max_size_kb": -1,
      "max_objects": -1},
  "temp_url_keys": []}

创建用户涉及创建一个access_keysecret_key条目,该条目可用于任何 S3 API 兼容客户端。

重要

检查密钥输出。有时radosgw-admin生成 JSON 转义字符(\)字符,而一些客户端不知道如何处理 JSON 转义字符。补救措施包括删除 JSON 转义字符(\),将字符串括在引号中,重新生成密钥并确保它没有 JSON 转义字符,或手动指定密钥和密钥。

创建子用户

要为用户创建子用户(Swift 接口用户),请指定用户 ID(--uid={username})、子用户 ID 和子用户的访问级别:

radosgw-admin subuser create --uid={uid} --subuser={uid} --access=[ read | write | readwrite | full ]

例如:

radosgw-admin subuser create --uid=johndoe --subuser=johndoe:swift --access=full

Note

full不等同于readwrite一起使用。该full访问级别readwrite,但它还包括访问控制策略。

{ "user_id": "johndoe",
  "display_name": "John Doe",
  "email": "john@example.com",
  "suspended": 0,
  "max_buckets": 1000,
  "subusers": [
        { "id": "johndoe:swift",
          "permissions": "full-control"}],
  "keys": [
        { "user": "johndoe",
          "access_key": "11BS02LGFB6AL6H1ADMW",
          "secret_key": "vzCEkuryfn060dfee4fgQPqFrncKEIkh3ZcdOANY"}],
  "swift_keys": [],
  "caps": [],
  "op_mask": "read, write, delete",
  "default_placement": "",
  "placement_tags": [],
  "bucket_quota": { "enabled": false,
      "max_size_kb": -1,
      "max_objects": -1},
  "user_quota": { "enabled": false,
      "max_size_kb": -1,
      "max_objects": -1},
  "temp_url_keys": []}

获取用户信息

要获取有关用户的信息,请指定user info和用户 ID(--uid={username})。使用以下格式的命令:

radosgw-admin user info --uid=johndoe

修改用户信息

要修改有关用户的信息,请指定用户 ID(--uid={username})以及您要修改的属性。通常对密钥和密钥、电子邮件地址、显示名称和访问级别进行修改。使用以下格式的命令:

radosgw-admin user modify --uid=johndoe --display-name="John E. Doe"

要修改子用户值,请指定subuser modify、用户 ID 和子用户 ID。使用以下格式的命令:

radosgw-admin subuser modify --uid=johndoe --subuser=johndoe:swift --access=full

用户暂停

当用户被创建时,用户默认启用。但是,可以暂停用户权限并在稍后重新启用它们。要暂停用户,请在以下格式的命令中指定user suspend和用户 ID:

radosgw-admin user suspend --uid=johndoe

用户启用

要重新启用暂停的用户,请提供user enable并在以下格式的命令中指定用户 ID:

radosgw-admin user enable --uid=johndoe

Note

禁用用户也会禁用任何子用户。

删除用户

当您删除用户时,您还会删除与该用户关联的任何子用户。

可以在不删除其关联用户的情况下删除子用户。这将在名为删除子用户.

要删除用户及其关联的任何子用户,请使用user rm命令并提供要删除的用户 ID。使用以下格式的命令:

radosgw-admin user rm --uid=johndoe

选项包括:

  • 清除数据: The --purge-data选项清除与 UID 关联的所有数据。

  • 清除密钥: The --purge-keys选项清除与 UID 关联的所有密钥。

删除子用户

删除子用户会删除对 Swift 接口或 S3 的访问。删除子用户后,与之关联的用户仍保留在系统中。

要删除子用户,请使用subuser rm命令并提供要删除的子用户 ID。使用以下格式的命令:

radosgw-admin subuser rm --subuser=johndoe:swift

选项包括:

  • 清除密钥: The --purge-keys选项清除与 UID 关联的所有密钥。

添加或删除密钥

无论是用户还是子用户,都需要密钥才能访问 S3 或 Swift 接口。要使用 S3,用户需要一个密钥对,该密钥对由访问密钥和密钥组成。要使用 Swift,用户需要一个密钥(密码),它与其关联的用户 ID 一起使用。您可以创建密钥,并指定或生成访问密钥或密钥。您还可以删除密钥。选项包括:

  • --key-type=<type>指定密钥类型。选项是:s3, swift

  • --access-key=<key>手动指定 S3 访问密钥。

  • --secret-key=<key>手动指定 S3 密钥或 Swift 密钥。

  • --gen-access-key自动生成随机 S3 访问密钥。

  • --gen-secret自动生成随机 S3 密钥或随机 Swift 密钥。

  • --generate-key创建带或不带凭证的用户。如果设置为 false,则用户无法设置gen-secret/gen-access-key/access-key/secret-key

添加 S3 密钥

要为用户添加特定的 S3 密钥对,请运行以下格式的命令:

radosgw-admin key create --uid=foo --key-type=s3 --access-key fooAccessKey --secret-key fooSecretKey
{ "user_id": "foo",
  "rados_uid": 0,
  "display_name": "foo",
  "email": "foo@example.com",
  "suspended": 0,
  "keys": [
    { "user": "foo",
      "access_key": "fooAccessKey",
      "secret_key": "fooSecretKey"}],
}

Note

您可以为用户创建多个 S3 密钥对。

添加 Swift 密钥

要为子用户附加特定的 Swift 密钥,请运行以下格式的命令:

radosgw-admin key create --subuser=foo:bar --key-type=swift --secret-key barSecret
{ "user_id": "foo",
  "rados_uid": 0,
  "display_name": "foo",
  "email": "foo@example.com",
  "suspended": 0,
  "subusers": [
     { "id": "foo:bar",
       "permissions": "full-control"}],
  "swift_keys": [
    { "user": "foo:bar",
      "secret_key": "asfghjghghmgm"}]}

Note

子用户只能有一个 Swift 密钥。

将子用户与 S3 密钥对关联

如果子用户与 S3 密钥对相关联,则子用户也可以使用 S3 API。要将子用户与 S3 密钥对关联,请运行以下格式的命令:

radosgw-admin key create --subuser=foo:bar --key-type=s3 --access-key barAccessKey --secret-key barSecretKey
{ "user_id": "foo",
  "rados_uid": 0,
  "display_name": "foo",
  "email": "foo@example.com",
  "suspended": 0,
  "subusers": [
     { "id": "foo:bar",
       "permissions": "full-control"}],
  "keys": [
    { "user": "foo:bar",
      "access_key": "barAccessKey",
      "secret_key": "barSecretKey"}],
}

删除 S3 密钥对

要删除 S3 密钥对,请指定要删除的访问密钥。运行以下格式的命令:

radosgw-admin key rm --uid=foo --key-type=s3 --access-key=fooAccessKey

删除 Swift 密钥

要删除 Swift 密钥,请运行以下格式的命令:

radosgw-admin key rm --subuser=foo:bar --key-type=swift

添加或删除管理员功能

Ceph 存储集群提供了一个管理操作 API,使用户能够通过 REST API 执行管理功能。默认情况下,用户没有访问此 API 的权限。要使用户能够执行管理功能,请向用户提供管理功能。

要向用户添加管理功能,请运行以下格式的命令:

radosgw-admin caps add --uid={uid} --caps={caps}

您可以向用户添加读取、写入或所有功能到用户、存储桶、元数据和用量(利用率)。为此,请使用以下格式的命令行选项:

--caps="[users|buckets|metadata|usage|zone|amz-cache|info|bilog|mdlog|datalog|user-policy|oidc-provider|roles|ratelimit|user-info-without-keys|accounts]=[\*|read|write|read, write]"

例如:

radosgw-admin caps add --uid=johndoe --caps="users=*;buckets=*"

要从用户中删除管理功能,请运行以下格式的命令:

radosgw-admin caps rm --uid=johndoe --caps={caps}

管理员和系统用户

具有该--admin--system标志的用户具有全局读写权限。这些权限适用于所有 API,包括 S3 和 Swift,与管理员功能不同,并且不能由 IAM 策略拒绝。

The --system标志应仅按文档中的说明使用多站点配置.

The --admin标志对于故障排除和恢复很有用。例如,如果用户意外删除了他们对存储桶或对象的权限,管理员用户的凭证可用于发出必要的 S3/Swift API 请求来恢复它们。

警告

不使用时,请考虑删除管理员用户或禁用其访问密钥。不要将管理员权限授予不受信任的用户。

要创建管理员用户:

radosgw-admin user create --uid={username} --display-name="{display-name}" --admin

要向现有用户添加管理员标志:

radosgw-admin user modify --uid={username} --admin

要从现有用户中删除管理员标志:

radosgw-admin user modify --uid={username} --admin=0

配额管理

Ceph 对象网关使您能够对用户拥有的用户和存储桶设置配额。配额包括存储桶中的最大对象数以及存储桶可以持有的最大存储大小。

  • 存储桶: The --bucket选项允许您为用户拥有的存储桶指定配额。

  • 最大对象: The --max-objects设置允许您指定最大对象数。负值禁用此设置。

  • 最大大小: The --max-size选项允许您指定配额大小,单位为 B/K/M/G/T,其中 B 为默认值。负值禁用此设置。

  • 配额范围: The --quota-scope选项设置配额的范围。选项是bucketuser。存储桶配额适用于用户拥有的每个存储桶。用户配额跨用户拥有的所有存储桶求和。

设置用户配额

在启用配额之前,您必须首先设置配额参数。要设置配额参数,请运行以下格式的命令:

radosgw-admin quota set --quota-scope=user --uid=<uid> [--max-objects=<num objects>] [--max-size=<max size>]

例如:

radosgw-admin quota set --quota-scope=user --uid=johndoe --max-objects=1024 --max-size=1024B

将负值作为--max-objects--max-size的参数将禁用给定的配额属性。

启用和禁用用户配额

设置用户配额后,必须启用它才能生效。要启用用户配额,请运行以下格式的命令:

radosgw-admin quota enable --quota-scope=user --uid=<uid>

要禁用已启用的用户配额,请运行以下格式的命令:

radosgw-admin quota disable --quota-scope=user --uid=<uid>

设置存储桶配额

存储桶配额适用于指定的uid。它们独立于用户。要设置存储桶配额,请运行以下格式的命令:

radosgw-admin quota set --uid=<uid> --quota-scope=bucket [--max-objects=<num objects>] [--max-size=<max size]

对于--max-objects--max-size的负值,表示禁用特定的配额属性。

启用和禁用存储桶配额

设置存储桶配额后,必须启用它才能生效。要启用存储桶配额,请运行以下格式的命令:

radosgw-admin quota enable --quota-scope=bucket --uid=<uid>

要禁用已启用的存储桶配额,请运行以下格式的命令:

radosgw-admin quota disable --quota-scope=bucket --uid=<uid>

获取配额设置

您可以通过用户信息 API 访问每个用户的配额设置。要使用 CLI 接口读取用户配额设置信息,请运行以下格式的命令:

radosgw-admin user info --uid=<uid>

更新配额统计

配额统计是异步更新的。您可以手动更新所有用户和所有存储桶的配额统计信息,以强制更新最新的配额统计信息。要更新所有用户和所有存储桶的配额统计信息以检索最新的配额统计信息,请运行以下格式的命令:

radosgw-admin user stats --uid=<uid> --sync-stats

获取用户使用统计

要查看用户消耗了多少配额,请运行以下格式的命令:

radosgw-admin user stats --uid=<uid>

Note

在你克隆仓库的目录中运行radosgw-admin user stats使用--sync-stats选项以接收最新数据。

默认配额

您可以在 Ceph 对象网关配置中设置默认配额。这些默认值如果在 Ceph 对象网关配置中设置了默认配额,则该配额将用于所有后续创建的用户,并且该配额将被启用。有关更多信息,请参阅rgw_bucket_default_quota_max_objects, rgw_bucket_default_quota_max_size, rgw_user_default_quota_max_objects, rgw_user_default_quota_max_size, rgw_account_default_quota_max_objects,并rgw_account_default_quota_max_size in Ceph 对象网关配置参考.

配额缓存

每个 RGW 实例都会缓存配额统计信息。如果部署了多个 RGW 实例,则此缓存可能会阻止完美执行配额,因为每个实例可能具有不同的配额设置集。

以下是控制此行为的选项:

rgw_bucket_quota_ttl rgw_user_quota_bucket_sync_interval rgw_user_quota_sync_interval

增加这些值将使配额操作更高效,但会增加多个 RGW 实例可能不会一致拥有最新配额设置的几率。减少这些值将使多个 RGW 实例更接近完美配额同步。

如果所有三个值都设置为0,则配额缓存实际上被禁用,并且多个实例将具有完美配额执行。有关更多信息,请参阅Ceph 对象网关配置参考.

读取/写入全局配额

您可以在期间配置中读取和写入全局配额设置。要查看全局配额设置,请运行以下命令:

radosgw-admin global quota get

全局配额设置可以使用与global quota命令对应的quota set, quota enable, and quota disable命令进行操作,如下面的示例所示:

radosgw-admin global quota set --quota-scope bucket --max-objects 1024
radosgw-admin global quota enable --quota-scope bucket

Note

在存在领域和期间的 multisite 配置中,对全局配额的更改必须使用period update --commit提交。如果没有期间,RGW 实例必须重新启动才能使更改生效。

速率限制管理

可以在 Ceph 对象网关的用户和存储桶上设置配额。“速率限制”包括每分钟的最大读取操作(读取操作)和写入操作(写入操作)以及每分钟每个用户或每个存储桶可以写入或读取的字节数。

读取请求和写入请求

使用GET方法或在其 REST 请求中使用HEAD方法的操作是“读取请求”。所有其他请求都是“写入请求”。

指标工作原理

每个对象网关单独跟踪用户指标和存储桶指标。这些指标不会与其他网关共享。配置的限制应除以活动对象网关的数量。例如,如果“用户 A”要限制为每分钟 10 个操作,并且集群中有两个对象网关,则“用户 A”的限制应为5(每分钟 10 个操作 / 2 RGWs)。如果请求在 RGWs 之间平衡,则速率限制可能未被充分利用。例如:如果操作限制是firefly 发布。Firefly 将延迟至少另一个冲刺,以便我们可以对新代码进行一些操作经验,并进行一些额外的测试,然后再承诺长期支持。 balanced between RGWs, the rate limit might be underutilized. For example: if the ops limit is 5并且有两个 RGWs,但是负载均衡器只将负载发送到一个 RGW,则有效限制是 5 个操作,因为此限制是针对每个 RGW 实施的。如果为存储桶设置的速率限制已达到,但为用户设置的速率限制尚未达到,则请求将被取消。反之亦然:如果为用户设置的速率限制已达到,但为存储桶设置的速率限制尚未达到,则请求将被取消。

带宽的核算仅在请求被接受后发生。这意味着即使请求执行期间达到存储桶速率限制或用户速率限制,请求也会继续进行。RGW 跟踪一个“债务”,其中包括超出配置值的字节数;产生这种债务的用户或存储桶将阻止发送更多请求,直到“债务”被偿还。债务的最大大小是每分钟最大读取/写入字节的 twice。如果“用户 A”受每分钟 1 字节读取限制,并且他们尝试GET一个大小为 1 GB 的对象,则GET操作将失败。在“用户 A”完成此 1 GB 操作后,RGW 将阻止用户请求长达两分钟。在此时间过去后,“用户 A”将能够再次发送GET请求。

  • 存储桶: The --bucket选项允许您为存储桶指定速率限制。

  • 用户: The --uid选项允许您为用户指定速率限制。

  • 最大读取操作: The --max-read-ops设置允许您限制每个 RGW 实例每分钟的读取字节数。值为0禁用节流。

  • 最大读取字节数: The --max-read-bytes设置允许您限制每个 RGW 实例每分钟的读取字节数。值为0禁用节流。

  • 最大写入操作: The --max-write-ops设置允许您指定每个 RGW 实例每分钟的写入操作数。值为0禁用节流。

  • 最大写入字节数: The --max-write-bytes设置允许您指定每个 RGW 实例每分钟的写入字节数。值为0禁用节流。

  • 速率限制范围: The --ratelimit-scope选项设置速率限制的范围。选项是bucket , useranonymous。存储桶速率限制适用于存储桶。用户速率限制适用于用户。选项anonymous适用于未身份验证用户。匿名范围仅适用于全局速率限制。

设置用户速率限制

在启用速率限制之前,您必须首先设置速率限制参数。以下命令的一般形式用于设置速率限制参数:

radosgw-admin ratelimit set --ratelimit-scope=user --uid=<uid> \
                              <[--max-read-ops=<num ops>] [--max-read-bytes=<num bytes>] \
                              [--max-write-ops=<num ops>] [--max-write-bytes=<num bytes>]>

使用radosgw-admin ratelimit set设置速率限制的示例可能如下所示:

radosgw-admin ratelimit set --ratelimit-scope=user --uid=johndoe --max-read-ops=1024 --max-write-bytes=10240

分配给0禁用指定的速率限制。--max-read-ops, --max-read-bytes, --max-write-ops--max-write-bytes的值为

获取用户速率限制

The radosgw-admin ratelimit get命令返回当前配置的速率限制参数。

以下命令的一般形式返回当前配置的限制参数:

radosgw-admin ratelimit get --ratelimit-scope=user --uid=<uid>

使用radosgw-admin ratelimit get返回速率限制参数的示例可能如下所示:

radosgw-admin ratelimit get --ratelimit-scope=user --uid=johndoe

分配给0禁用指定的速率限制。--max-read-ops, --max-read-bytes, --max-write-ops--max-write-bytes的值为

启用和禁用用户速率限制

设置用户速率限制后,您必须启用它才能生效。运行以下格式的命令以启用用户速率限制:

radosgw-admin ratelimit enable --ratelimit-scope=user --uid=<uid>

要禁用已启用的用户速率限制,请运行以下格式的命令:

radosgw-admin ratelimit disable --ratelimit-scope=user --uid=johndoe

设置存储桶速率限制

在启用速率限制之前,您必须首先设置速率限制参数。以下命令的一般形式用于设置速率限制参数:

radosgw-admin ratelimit set --ratelimit-scope=bucket --bucket=<bucket> \
                              <[--max-read-ops=<num ops>] [--max-read-bytes=<num bytes>] \
                              [--max-write-ops=<num ops>] [--max-write-bytes=<num bytes>]>

使用radosgw-admin ratelimit set为存储桶设置速率限制的示例可能如下所示:

radosgw-admin ratelimit set --ratelimit-scope=bucket --bucket=mybucket --max-read-ops=1024 --max-write-bytes=10240

分配给0禁用指定的速率限制。--max-read-ops, --max-read-bytes, --max-write-ops-max-write-bytes禁用指定的存储桶速率限制。

获取存储桶速率限制

The radosgw-admin ratelimit get命令返回当前配置的速率限制参数。

以下命令的一般形式返回当前配置的限制参数:

radosgw-admin ratelimit get --ratelimit-scope=bucket --bucket=<bucket>

使用radosgw-admin ratelimit get返回存储桶速率限制参数的示例可能如下所示:

radosgw-admin ratelimit get --ratelimit-scope=bucket --bucket=mybucket

分配给0禁用指定的速率限制。--max-read-ops, --max-read-bytes, --max-write-ops--max-write-bytes的值为

启用和禁用存储桶速率限制

设置存储桶速率限制后,您可以启用它。以下命令的一般形式radosgw-admin ratelimit enable命令启用存储桶速率限制:

radosgw-admin ratelimit enable --ratelimit-scope=bucket --bucket=<bucket>

要禁用已启用的存储桶速率限制,请运行以下格式的命令:

radosgw-admin ratelimit disable --ratelimit-scope=bucket --uid=mybucket

读取和写入全局速率限制配置

您可以在期间的配置中读取和写入全局速率限制设置。要查看全局速率限制设置,请运行以下命令:

radosgw-admin global ratelimit get

全局速率限制设置可以使用与global ratelimit命令对应的ratelimit set, ratelimit enable, and ratelimit disable命令进行操作。每个用户和每个存储桶的速率限制配置将覆盖全局配置:

radosgw-admin global ratelimit set --ratelimit-scope bucket --max-read-ops=1024
radosgw-admin global ratelimit enable --ratelimit-scope bucket

全局速率限制可用于配置所有经过身份验证用户的速率限制范围:

radosgw-admin global ratelimit set --ratelimit-scope user --max-read-ops=1024
radosgw-admin global ratelimit enable --ratelimit-scope user

全局速率限制可用于配置所有未经过身份验证用户的速率限制范围:

radosgw-admin global ratelimit set --ratelimit-scope=anonymous --max-read-ops=1024
radosgw-admin global ratelimit enable --ratelimit-scope=anonymous

Note

在存在领域和期间的 multisite 配置中,对全局速率限制的任何更改都必须使用period update --commit提交。如果没有期间,RGW 实例必须重新启动才能使更改生效。

查看当前由 cephadm 使用的文件模板。

Ceph 对象网关记录每个用户的使用情况。您可以在指定的日期范围内跟踪每个用户的使用情况。

  • rgw_enable_usage_log = true。Cephadm 还支持使用[client.rgw]部分ceph.conf和重启的radosgw服务。

    Note

    在 Ceph 拥有一个可处理所有设置选项的多种方式的宏之前,我们建议您在中央配置或rgw_enable_usage_log = true并重启所有 RGWs。ceph.conf中设置

选项包括:

  • 开始日期: The --start-date选项允许您从指定的开始日期和可选的开始时间(格式: yyyy-mm-dd [HH:MM:SS]).

  • 结束日期: The --end-date选项允许您过滤到特定结束日期和可选的结束时间(格式: yyyy-mm-dd [HH:MM:SS]).

  • 日志条目: The --show-log-entries选项允许您指定是否要包括使用统计信息中的日志条目(选项:true | false).

Note

您可以指定到分钟和秒的精度,但指定的时间只存储为每小时分辨率。

显示使用情况

要显示使用统计信息,请使用radosgw-admin usage show命令。要显示特定用户的使用情况,您必须指定用户 ID。您还可以指定开始日期、结束日期和是否显示日志条目。以下是一个此类命令的示例:

radosgw-admin usage show --uid=johndoe --start-date=2012-03-01 --end-date=2012-04-01

您可以通过省略用户 ID 来显示所有用户的摘要使用信息,如下面的示例命令所示:

radosgw-admin usage show --show-log-entries=false

剪辑使用情况

使用日志可能会消耗大量存储空间,尤其是在随着时间的推移和重使用的情况下。您可以为所有用户和特定用户剪辑使用日志。您还可以指定剪辑操作的日期范围,如下面的示例命令所示:

radosgw-admin usage trim --start-date=2010-01-01 --end-date=2010-12-31
radosgw-admin usage trim --uid=johndoe
radosgw-admin usage trim --uid=johndoe --end-date=2013-12-31

由 Ceph 基金会带给您

Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.