9.4. 用户管理
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
, readwrite
和 full
的访问权限。
用户管理命令行语法通常遵循 用户 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]
可能需要其他选项,具体取决于您发出的命令。
9.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 中必须用引号括起具有显式租户的子用户。
9.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。
9.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": []}
9.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
9.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
9.4.6. 启用和挂起用户
当您创建用户时,该用户默认是启用的。但是,您可以暂停用户特权并稍后重新启用它们。若要暂停用户,可指定 user suspend
和用户 ID。
[root@host01 ~]# radosgw-admin user suspend --uid=johndoe
要重新启用暂停的用户,请指定 user enable
和用户 ID:
[root@host01 ~]# radosgw-admin user enable --uid=johndoe
禁用用户会禁用其子用户。
9.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 关联的所有密钥。
9.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 关联的所有密钥。
9.4.9. 重命名用户
要更改用户名称,使用 radosgw-admin user rename
命令。此命令花费的时间取决于用户拥有的 bucket 和对象的数量。如果数字较大,红帽建议使用 screen
软件包提供的 Screen
工具中的命令。
先决条件
- 正常运行的 Ceph 集群。
-
对运行 Ceph 对象网关的主机
的根
或sudo
访问权限。 - 安装的 Ceph 对象网关。
流程
重命名用户:
语法
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" }
验证用户是否已成功重命名:
语法
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)
手册页
9.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"}]}
9.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。
要删除访问密钥,您需要指定用户和密钥:
查找特定用户的访问密钥:
示例
[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==" } ], ... }
指定用户 ID 和上一步中的访问密钥以删除访问密钥:
语法
radosgw-admin key rm --uid=USER_ID --access-key ACCESS_KEY
示例
[root@host01 ~]# radosgw-admin key rm --uid=johndoe --access-key 0555b35654ad1656d804
9.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}