Menu Close

Red Hat Training

A Red Hat training course is available for Red Hat Ceph Storage

第 5 章 用户管理

本节介绍 Ceph 客户端用户,以及他们通过红帽 Ceph 存储集群的身份验证和授权。用户可以是个人或系统执行者,如应用,它们使用 Ceph 客户端与红帽 Ceph 存储集群守护进程交互。

OSD States

当 Ceph 在运行时启用身份验证和授权(默认为启用)时,您必须指定包含指定用户的 secret key(通常使用命令行)的用户名和密钥环。如果不指定用户名,Ceph 将使用 client.admin 管理用户作为默认用户名。如果没有指定密钥环,Ceph 将使用 Ceph 配置中的 keyring 设置来查找密钥环。例如:如果您在没有指定用户或密钥环的情况下执行 ceph health 命令:

# ceph health

Ceph 将该命令解释如下:

# ceph -n client.admin --keyring=/etc/ceph/ceph.client.admin.keyring health

另外,您可以使用 CEPH_ARGS 环境变量以避免重新输入用户名和 secret。

有关将红帽 Ceph 存储集群配置为使用身份验证的详细信息,请参阅红帽 Ceph 存储 3 的配置指南

5.1. 背景信息

无论 Ceph 客户端的类型如何,如块设备、对象存储、文件系统、原生 API 或 Ceph 命令行,Ceph 将所有数据存储为池内的对象。Ceph 用户必须有权访问池,才能读取和写入数据。此外,管理 Ceph 用户必须具有执行 Ceph 管理命令的权限。以下概念将帮助您了解 Ceph 用户管理:

5.1.1. 用户

红帽 Ceph 存储集群的用户是一个或多个个人或系统操作程序,如应用程序。通过创建用户,您可以控制谁(或什么)可以访问存储集群、其池和池中的数据。

Ceph 具有用户 type 的概念。出于用户管理的目的,类型将始终为 client。Ceph 以句点(.)分隔形式标识用户,其由用户类型和用户 ID 组成:例如 TYPE.IDclient.adminclient.user1。用户调用的原因在于 Ceph 监视器和 OSD 也使用 Cephx 协议,但它们不是客户端。区分用户类型有助于区分客户端用户和其他用户 - 提取访问控制、用户监控和可追溯性。

有时,Ceph 的用户类型可能会看上去有些混淆,因为 Ceph 命令行允许您根据命令行使用情况来指定包含或不使用类型的用户。如果指定了 --user--id,您可以省略 类型。因此 client.user1 只需输入为 user1。如果指定了 --name-n,您必须指定类型和名称,如 client.user1。我们建议尽可能将类型和名称用作最佳做法。

注意

红帽 Ceph 存储集群用户与 Ceph 对象存储用户不同。对象网关使用红帽 Ceph 存储集群用户在网关守护进程和存储集群之间进行通信,但该网关对其最终用户有自己的用户管理功能。

5.1.2. 授权(功能)

Ceph 使用术语"功能"(容量)来描述授权经过身份验证的用户来练习 monitor 和 OSD 的功能。功能还可以限制对池中数据或池中命名空间的数据的访问。Ceph 管理用户在创建或更新用户时设置用户的功能。

功能语法采用以下形式:

<daemon_type> 'allow <capability>' [<daemon_type> 'allow <capability>']
  • monitor Caps: 监控器功能包括 rwxallow profile <cap>profile rbd。例如:

    mon 'allow rwx`
    mon 'allow profile osd'
  • OSDCaps: OSD 功能包括 rwxclass-readclass-writeprofile osdprofile rbdprofile rbd-read-only。此外,OSD 功能也允许对池和命名空间设置。

    osd 'allow <capability>' [pool=<pool_name>] [namespace=<namespace_name>]
注意

Ceph 对象网关守护进程(radosgw)是 Ceph 存储集群的客户端,因此它不表示为 Ceph 存储集群守护进程类型。

以下条目描述了每种功能:

allow

在守护进程的访问设置之前。

r

授予用户读取访问权限。需要使用 monitor 来检索 CRUSH map。

w

授予用户对对象的写入访问权限。

x

为用户提供调用类方法(即读取和写入)并对 monitor 执行 auth 操作的功能。

class-read

赋予用户调用类读取方法的功能。x 的子集。

class-write

赋予用户调用类写入方法的功能。x 的子集。

*

授予用户特定守护进程或池的读取、写入和执行权限,以及执行 admin 命令的功能。

profile osd

授予用户权限,以 OSD 身份连接到其他 OSD 或 monitor。调用 OSD,使 OSD 能够处理复制心跳流量和状态报告。

profile bootstrap-osd

为用户授予引导 OSD 的权限,以便他们在引导 OSD 时具有添加密钥的权限。

profile rbd

授予用户对 Ceph 块设备的读写访问权限。

profile rbd-read-only

授予用户对 Ceph 块设备的只读访问权限。

5.1.3. 池

池为 Ceph 客户端定义存储策略,并充当该策略的逻辑分区。

在 Ceph 部署中,通常要创建一个池来支持不同类型的用例,如云卷/镜像、对象存储、热存储、冷存储等。将 Ceph 部署为 OpenStack 的后端时,典型的部署具有卷、镜像、备份和虚拟机等用户的池,以及 client.glanceclient.cinder 等用户。

5.1.4. 命名空间

池中的对象可以关联到池中的 namespace-​a 逻辑对象组。用户对池的访问权限可以与命名空间关联,这样用户的读取和写入只能在命名空间内进行。写入到池中命名空间的对象只能由有权访问命名空间的用户访问。

注意

目前,命名空间仅适用于在 librados 上写入的应用程序。块设备和对象存储等 Ceph 客户端目前不支持此功能。

命名空间的理由是池可以是按用例分隔数据的计算方式,因为每个池都会创建一组映射到 OSD 的 PG。如果多个池使用相同的 CRUSH 层次结构和规则集,OSD 性能可能会随着负载的增加而降级。

例如,池应当为每个 OSD 拥有大约 100 个 PG。因此,具有 1000 个 OSD 的示范集群将具有 100,000 个池的放置组。映射到同一 CRUSH 层次结构和规则集的每个池都会在示例集群中再创建 100,000 个放置组。相比之下,将对象写入命名空间只是将命名空间与对象名称关联,与单独池的计算开销无关。您可以使用命名空间,而不是为用户或一组用户创建单独的池。

注意

目前只能使用 librados