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
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=johndoeaccess 键是输出中的
"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}