搜索

8.4. 用户管理

download PDF

Ceph 对象存储用户管理是指属于 Ceph 对象存储服务的客户端应用的用户,而不是 Ceph 对象网关作为 Ceph 存储群集的客户端应用。您必须创建一个用户、访问密钥和机密,使客户端应用能够与 Ceph 对象网关服务交互。

用户类型有两种:

  • 用户: 术语"用户"反映了 S3 接口的用户。
  • 子用户: 术语"子用户"反映了 Swift 界面的用户。子用户会与用户关联.

您可以创建、修改、查看、暂停和删除用户和子用户。

重要

在多站点部署中管理用户时,ALWAYS 在 master zone group 的 master zone 中的 Ceph 对象网关节点上发出 radosgw-admin 命令,以确保用户在整个多站点集群中同步。不要从 second zone 或 second zone group 创建、修改或删除多站点集群上的用户。

除了创建用户和子用户 ID 外,您还可以为用户添加显示名称和电子邮件地址。您可以指定一个密钥和 secret,或者自动生成密钥和 secret。在生成或指定密钥时,请注意用户 ID 与 S3 密钥类型对应,子用户 ID 对应于 swift 密钥类型。Swift key 也具有 read, write, readwritefull 的访问权限。

用户管理命令行语法通常遵循 用户 COMMAND USER_ID,其中 USER_ID--uid= 选项,后跟用户的 ID (S3)或 --subuser= 选项,后跟用户名(Swift)。

语法

radosgw-admin user <create|modify|info|rm|suspend|enable|check|stats> <--uid=USER_ID|--subuser=SUB_USER_NAME> [other-options]

可能需要其他选项,具体取决于您发出的命令。

8.4.1. 多租户

Ceph 对象网关支持 S3 和 Swift API 的多租户,其中每个用户和 bucket 都位于"租户"。当多个租户使用通用存储桶名称,如 "test"、"main" 等时,多租户可防止命名空间冲突。

每个用户和 bucket 位于租户下。为向后兼容,将添加带有空名称的"传统"租户。每当不指定租户的情况下引用存储桶时,Swift API 将假定为"传统"租户。现有用户也存储在传统租户下,因此他们将像之前的版本一样访问 bucket 和对象。

租户对其没有任何操作。在管理用户时,它们根据需要显示和消失。为了创建、修改和删除具有显式租户的用户,提供了一个额外的选项 --tenant,或语法 "TENANT$USER" 用于 radosgw-admin 命令的参数。

要为 S3 创建用户 testx$tester,请运行以下命令:

示例

[root@host01 ~]# radosgw-admin --tenant testx --uid tester \
                    --display-name "Test User" --access_key TESTER \
                    --secret test123 user create

要为 Swift 创建用户 testx$tester,请运行以下命令之一:

示例

[root@host01 ~]# radosgw-admin --tenant testx --uid tester \
                    --display-name "Test User" --subuser tester:swift \
                    --key-type swift --access full subuser create

[root@host01 ~]# radosgw-admin key create --subuser 'testx$tester:swift' \
                    --key-type swift --secret test123

注意

shell 中必须用引号括起具有显式租户的子用户。

8.4.2. 创建用户

使用 user create 命令创建 S3-interface 用户。您必须指定用户 ID 和显示名称。您也可以指定一个电子邮件地址。如果您不指定密钥或 secret,radosgw-admin 将自动为您生成。但是,如果您不希望使用生成的密钥/secret 对,您可以指定一个密钥和/或 secret。

语法

radosgw-admin user create --uid=USER_ID \
[--key-type=KEY_TYPE] [--gen-access-key|--access-key=ACCESS_KEY]\
[--gen-secret | --secret=SECRET_KEY] \
[--email=EMAIL] --display-name=DISPLAY_NAME

示例

[root@host01 ~]# radosgw-admin user create --uid=janedoe --access-key=11BS02LGFB6AL6H1ADMW --secret=vzCEkuryfn060dfee4fgQPqFrncKEIkh3ZcdOANY --email=jane@example.com --display-name=Jane Doe

{ "user_id": "janedoe",
  "display_name": "Jane Doe",
  "email": "jane@example.com",
  "suspended": 0,
  "max_buckets": 1000,
  "auid": 0,
  "subusers": [],
  "keys": [
        { "user": "janedoe",
          "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": []}
重要

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

8.4.3. 创建子用户

要创建子用户(Swift 接口),您必须指定用户 ID(--uid=USERNAME)、子用户 ID 和子用户的访问级别。如果没有指定密钥或 secret,radosgw-admin 会自动为您生成它们。但是,如果您不希望使用生成的密钥和 secret 对,您可以指定一个密钥和 secret。

注意

full 并不是 readwrite,因为它还包含访问控制策略。

语法

 radosgw-admin subuser create --uid=USER_ID --subuser=SUB_USER_ID --access=[ read | write | readwrite | full ]

示例

[root@host01 ~]# radosgw-admin subuser create --uid=janedoe --subuser=janedoe:swift --access=full

{ "user_id": "janedoe",
  "display_name": "Jane Doe",
  "email": "jane@example.com",
  "suspended": 0,
  "max_buckets": 1000,
  "auid": 0,
  "subusers": [
        { "id": "janedoe:swift",
          "permissions": "full-control"}],
  "keys": [
        { "user": "janedoe",
          "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": []}

8.4.4. 获取用户信息

要获取有关用户的信息,请指定 user info 和用户 ID (--uid=USERNAME)。

示例

[root@host01 ~]# radosgw-admin user info --uid=janedoe

若要获取租户用户的信息,可指定用户 ID 和租户名称。

[root@host01 ~]# radosgw-admin user info --uid=janedoe --tenant=test

8.4.5. 修改用户信息

要修改用户的信息,您必须指定用户 ID (--uid=USERNAME)和您要修改的属性。典型的修改包括密钥和 secret、电子邮件地址、显示名称和访问级别。

示例

[root@host01 ~]# radosgw-admin user modify --uid=janedoe --display-name="Jane E. Doe"

若要修改子用户值,指定 subuser modify 和子用户 ID。

示例

[root@host01 ~]# radosgw-admin subuser modify --subuser=janedoe:swift --access=full

8.4.6. 启用和挂起用户

当您创建用户时,该用户默认是启用的。但是,您可以暂停用户特权并稍后重新启用它们。若要暂停用户,可指定 user suspend 和用户 ID。

[root@host01 ~]# radosgw-admin user suspend --uid=johndoe

要重新启用暂停的用户,请指定 user enable 和用户 ID:

[root@host01 ~]# radosgw-admin user enable --uid=johndoe
注意

禁用用户会禁用其子用户。

8.4.7. 删除用户

删除用户时,用户和子用户将从系统中删除。但是,如果需要,您只能删除子用户。要删除用户(及子用户),指定 user rm 和用户 ID。

语法

radosgw-admin user rm --uid=USER_ID[--purge-keys] [--purge-data]

示例

[ceph: root@host01 /]# radosgw-admin user rm --uid=johndoe --purge-data

若要仅删除子用户,指定 subuser rm 和 subuser 名称。

示例

[ceph: root@host01 /]# radosgw-admin subuser rm --subuser=johndoe:swift --purge-keys

选项包括:

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

8.4.8. 删除子用户

移除子用户时,您将删除对 Swift 接口的访问。用户保留在系统中。要删除子用户,请指定 subuser rm 和 subuser ID。

语法

radosgw-admin subuser rm --subuser=SUB_USER_ID

示例

[root@host01 /]# radosgw-admin subuser rm --subuser=johndoe:swift

选项包括:

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

8.4.9. 重命名用户

要更改用户名称,使用 radosgw-admin user rename 命令。此命令花费的时间取决于用户拥有的 bucket 和对象的数量。如果数字较大,红帽建议使用 screen 软件包提供的 Screen 工具中的命令。

先决条件

  • 正常运行的 Ceph 集群。
  • 对运行 Ceph 对象网关的主机 的根sudo 访问权限。
  • 安装的 Ceph 对象网关。

流程

  1. 重命名用户:

    语法

    radosgw-admin user rename --uid=CURRENT_USER_NAME --new-uid=NEW_USER_NAME

    示例

    [ceph: root@host01 /]# radosgw-admin user rename --uid=user1 --new-uid=user2
    
    {
        "user_id": "user2",
        "display_name": "user 2",
        "email": "",
        "suspended": 0,
        "max_buckets": 1000,
        "auid": 0,
        "subusers": [],
        "keys": [
            {
                "user": "user2",
                "access_key": "59EKHI6AI9F8WOW8JQZJ",
                "secret_key": "XH0uY3rKCUcuL73X0ftjXbZqUbk0cavD11rD8MsA"
            }
        ],
        "swift_keys": [],
        "caps": [],
        "op_mask": "read, write, delete",
        "default_placement": "",
        "placement_tags": [],
        "bucket_quota": {
            "enabled": false,
            "check_on_raw": false,
            "max_size": -1,
            "max_size_kb": 0,
            "max_objects": -1
        },
        "user_quota": {
            "enabled": false,
            "check_on_raw": false,
            "max_size": -1,
            "max_size_kb": 0,
            "max_objects": -1
        },
        "temp_url_keys": [],
        "type": "rgw"
    }

    如果用户位于租户中,同时指定用户名和租户:

    语法

    radosgw-admin user rename --uid USER_NAME --new-uid NEW_USER_NAME --tenant TENANT

    示例

    [ceph: root@host01 /]# radosgw-admin user rename --uid=test$user1 --new-uid=test$user2 --tenant test
    
    1000 objects processed in tvtester1. Next marker 80_tVtester1_99
    2000 objects processed in tvtester1. Next marker 64_tVtester1_44
    3000 objects processed in tvtester1. Next marker 48_tVtester1_28
    4000 objects processed in tvtester1. Next marker 2_tVtester1_74
    5000 objects processed in tvtester1. Next marker 14_tVtester1_53
    6000 objects processed in tvtester1. Next marker 87_tVtester1_61
    7000 objects processed in tvtester1. Next marker 6_tVtester1_57
    8000 objects processed in tvtester1. Next marker 52_tVtester1_91
    9000 objects processed in tvtester1. Next marker 34_tVtester1_74
    9900 objects processed in tvtester1. Next marker 9_tVtester1_95
    1000 objects processed in tvtester2. Next marker 82_tVtester2_93
    2000 objects processed in tvtester2. Next marker 64_tVtester2_9
    3000 objects processed in tvtester2. Next marker 48_tVtester2_22
    4000 objects processed in tvtester2. Next marker 32_tVtester2_42
    5000 objects processed in tvtester2. Next marker 16_tVtester2_36
    6000 objects processed in tvtester2. Next marker 89_tVtester2_46
    7000 objects processed in tvtester2. Next marker 70_tVtester2_78
    8000 objects processed in tvtester2. Next marker 51_tVtester2_41
    9000 objects processed in tvtester2. Next marker 33_tVtester2_32
    9900 objects processed in tvtester2. Next marker 9_tVtester2_83
    {
        "user_id": "test$user2",
        "display_name": "User 2",
        "email": "",
        "suspended": 0,
        "max_buckets": 1000,
        "auid": 0,
        "subusers": [],
        "keys": [
            {
                "user": "test$user2",
                "access_key": "user2",
                "secret_key": "123456789"
            }
        ],
        "swift_keys": [],
        "caps": [],
        "op_mask": "read, write, delete",
        "default_placement": "",
        "placement_tags": [],
        "bucket_quota": {
            "enabled": false,
            "check_on_raw": false,
            "max_size": -1,
            "max_size_kb": 0,
            "max_objects": -1
        },
        "user_quota": {
            "enabled": false,
            "check_on_raw": false,
            "max_size": -1,
            "max_size_kb": 0,
            "max_objects": -1
        },
        "temp_url_keys": [],
        "type": "rgw"
    }

  2. 验证用户是否已成功重命名:

    语法

    radosgw-admin user info --uid=NEW_USER_NAME

    示例

    [ceph: root@host01 /]# radosgw-admin user info --uid=user2

    如果用户位于租户中,请使用 TENANT$USER_NAME 格式:

    语法

    radosgw-admin user info --uid= TENANT$USER_NAME

    示例

    [ceph: root@host01 /]# radosgw-admin user info --uid=test$user2

其它资源

  • screen(1) 手册页

8.4.10. 创建密钥

要为用户创建密钥,您必须指定 key create。对于用户,指定用户 ID 和 s3 密钥类型。要为子用户创建密钥,您必须指定子用户 ID 和 swift keytype。

示例

[ceph: root@host01 /]# radosgw-admin key create --subuser=johndoe:swift --key-type=swift --gen-secret

{ "user_id": "johndoe",
  "rados_uid": 0,
  "display_name": "John Doe",
  "email": "john@example.com",
  "suspended": 0,
  "subusers": [
     { "id": "johndoe:swift",
       "permissions": "full-control"}],
  "keys": [
    { "user": "johndoe",
      "access_key": "QFAMEDSJP5DEKJO0DDXY",
      "secret_key": "iaSFLDVvDdQt6lkNzHyW4fPLZugBAI1g17LO0+87"}],
  "swift_keys": [
    { "user": "johndoe:swift",
      "secret_key": "E9T2rUZNu2gxUjcwUBO8n\/Ev4KX6\/GprEuH4qhu1"}]}

8.4.11. 添加和删除访问密钥

用户和子用户必须具有使用 S3 和 Swift 接口的访问密钥。当您创建用户或子用户且您没有指定 access key 和 secret 时,密钥和 secret 会自动生成。您可以创建一个密钥,并指定或生成 access key 和/或 secret。您也可以删除访问密钥和机密。选项包括:

  • --secret=SECRET_KEY 指定 secret 密钥,例如手动生成的 secret 密钥。
  • --gen-access-key 生成一个随机访问密钥(默认为 S3 用户)。
  • --gen-secret 生成随机 secret key。
  • --key-type=KEY_TYPE 指定密钥类型。这些选项有:swift 和 s3。

要添加密钥,请指定用户:

示例

[root@host01 ~]# radosgw-admin key create --uid=johndoe --key-type=s3 --gen-access-key --gen-secret

您还可以指定密钥和 secret。

要删除访问密钥,您需要指定用户和密钥:

  1. 查找特定用户的访问密钥:

    示例

    [root@host01 ~]# radosgw-admin user info --uid=johndoe

    access 键是输出中的 "access_key" 值:

    示例

    [root@host01 ~]# radosgw-admin user info --uid=johndoe
    {
        "user_id": "johndoe",
        ...
        "keys": [
            {
                "user": "johndoe",
                "access_key": "0555b35654ad1656d804",
                "secret_key": "h7GhxuBLTrlhVUyxSPUKUV8r/2EI4ngqJxD7iBdBYLhwluN30JaT3Q=="
            }
        ],
        ...
    }

  2. 指定用户 ID 和上一步中的访问密钥以删除访问密钥:

    语法

    radosgw-admin key rm --uid=USER_ID --access-key ACCESS_KEY

    示例

    [root@host01 ~]# radosgw-admin key rm --uid=johndoe --access-key 0555b35654ad1656d804

8.4.12. 添加和删除管理功能

Ceph Storage 集群提供了一个管理 API,允许用户通过 REST API 运行管理功能。默认情况下,用户没有访问此 API 的权限。要让用户可以使用管理功能,请为用户提供管理功能。

要为用户添加管理功能,请运行以下命令:

语法

radosgw-admin caps add --uid=USER_ID--caps=CAPS

您可以为用户、存储桶、元数据和使用(使用)添加读取、写入或所有功能。

语法

--caps="[users|buckets|metadata|usage|zone]=[*|read|write|read, write]"

示例

[root@host01 ~]# radosgw-admin caps add --uid=johndoe --caps="users=*"

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

示例

[root@host01 ~]# radosgw-admin caps remove --uid=johndoe --caps={caps}

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.