Ceph存储系列(七) 管理Ceph身份验证
1 | 作者:李晓辉 |
用户身份验证
红帽 Ceph 存储会使用 cephx
协议来授权集群中客户端、应用和守护进程之间的通信。cephx
协议基于共享机密密钥运行。
Ceph 会使用用户帐户实现多种用途:
Ceph 守护进程之间的内部通信。
通过
librados
库访问集群的客户端应用。集群管理员。
Ceph 守护进程使用的帐户具有与相关守护进程相匹配的名称:osd.1
或 mgr.serverc
,并在安装期间创建。
使用 librados
的客户端应用所用帐户的名称具有 client.
前缀。例如,在将 OpenStack 与 Ceph 集成时,常常会创建专用的 client.openstack
用户帐户
管理员帐户的名称 client.admin
,在您运行管理性命令时,Ceph 会使用 client.admin
帐户,除非您通过 --name
或 --id
选项明确指定了用户名。
需要注意,–id不需要指定前缀,而–name需要前缀
1 | [root@serverc ~]# ceph health --id admin |
Ceph 感知应用的最终用户不在 Ceph 集群中拥有帐户。他们会访问应用,然后由应用代表他们访问 Ceph。从 Ceph 角度来看,应用就是客户端。应用可能会通过其他机制提供自己的用户身份验证。
Keyring 文件
为进行身份验证,客户端需要配置 Ceph 用户名,以及含有该用户机密密钥的密钥环文件。Ceph 会在用户帐户创建时,为每个用户帐户生成密钥环文件。
在运行ceph命令时,会自动加载以下位置的keyring /etc/ceph/$cluster.$name.keyring
,例如,对于 client.openstack
帐户,其密钥环文件为 /etc/ceph/ceph.client.openstack.keyring
。如果keyring不在默认位置,就需要指定--keyring
客户端从监控器请求会话密钥。监控器会使用客户端的共享机密密钥加密会话密钥,再将会话密钥提供给客户端。由客户端解密会话密钥,然后再从监控器请求票据,以便对集群守护进程进行身份验证。这与 Kerberos 协议类似,cephx 密钥环文件与 Kerberos keytab 文件相当。
1 | [root@serverc ~]# cat /etc/ceph/ceph.client.admin.keyring |
创建和查询Ceph用户
请注意,需要把keyring按照特定的格式放入特定的位置
1 | [root@serverc ~]# ceph auth get-or-create client.lxh -o /etc/ceph/ceph.client.lxh.keyring |
配置用户授权
您在创建新的用户帐户时,需授予足以授权用户集群任务的集群权限。cephx
中的权限称为功能,您通过守护进程类型(mon
、osd
、mgr
或 mds
)来授予它们。
Cephx Caps
在 cephx
内,对于每个守护进程类型来说,都有多项功能可用:
r
授予读取访问权限。每一用户帐户至少应在监控器上具有读取访问权限,以便能够检索 CRUSH 映射。w
授予写入访问权限。客户端需要写入访问权限以在 OSD 上存储和修改对象。对于管理器 (MGR),w
授予启用或禁用模块的权限。x
授予执行扩展对象类的权限。这使得客户端能够在对象上执行额外的操作,如使用rados lock get
设置锁定或使用rbd list
列出 RBD 镜像。*
授予完整访问权限。class-read
和class-write
是x
的子集。通常会用在 RBD 池中。
创建一个可以读取任何池数据的用户
1 | [root@serverc ~]# ceph auth get-or-create client.lixiaohui mon 'allow r' osd 'allow rw' |
可使用配置文件来简化用户访问权限配置
1 | [root@serverc ~]# ceph auth get-or-create client.zhangsan mon 'profile rbd' osd 'profile rbd' |
配置文件还有很多,如下所示:
能力 | 描述 |
---|---|
allow | 在守护进程的访问权限设置之前。 |
r | 为用户提供读取权限。需要用监控器来检索 CRUSH 映射。 |
w | 授予用户对对象的写入权限。 |
x | 让用户能够调用类方法(即读取和写入)并对监控器执行身份验证操作。 |
class-read | 让用户能够调用类读取方法。x 的子集。 |
class-write | 让用户能够调用类写入方法。x 的子集。 |
* | 授予用户对特定守护进程或池的读取、写入和执行权限,并允许用户执行管理命令。 |
profile osd | 授予用户作为 OSD 连接其他 OSD 或监控器的权限。授予 OSD 以便 OSD 能够处理复制心跳流量和状态报告。 |
profile bootstrap-osd | 授予用户引导 OSD 的权限,以便他们在引导 OSD 时具有添加密钥的权限。 |
profile rbd | 授予用户对 Ceph 块设备的读写权限。 |
profile rbd-read-only | 授予用户对 Ceph 块设备的只读权限。 |
限制访问
下面的例子创建了lixiaohui用户,并给了他对lxhpool池的读写权限:
1 | [root@serverc ~]# ceph auth get-or-create client.lixiaohui mon 'allow r' osd 'allow rw pool=lxhpool' |
通过对象名称前缀,下面的示例限制对任何池中名称以lxh开头的对象的访问
1 | [root@serverc ~]# ceph auth get-or-create client.user2 mon 'allow r' osd 'allow rw object_prefix lxh' |
通过namespace,实现namespace来对池中的对象进行逻辑分组,然后可以将用户帐户限制为属于特定namespace的对象:
1 | [root@serverc ~]# ceph auth get-or-create client.user3 mon 'allow r' osd 'allow rw namespace=lixiaohui' |
通过路径,Ceph文件系统(cepphfs)利用这种方法来限制对特定目录的访问,下面的例子创建了一个新的用户帐户user4,它只能访问/webcontent目录及其内容:
但这个要求你有一个运行中的文件系统
1 | [root@serverc ~]# ceph fs volume create lxhfs |
通过monitor命令,这种方法将管理员限制在特定的命令列表中,创建user5用户帐户并限制其访问两个命令的示例如下:
1 | [root@serverc ~]# ceph auth get-or-create client.user5 mon 'allow r, allow command "auth get-or-create", allow command "auth list"' |
用户管理命令汇总
ceph auth list 查询现有用户
1 | [root@serverc ~]# ceph auth list | more |
ceph auth get 获取特定帐户的详细信息
1 | [root@serverc ~]# ceph auth get client.user2 |
ceph auth print-key 显示用户密钥
1 | [root@serverc ~]# ceph auth print-key client.user2 |
ceph auth export、ceph auth import导出以及导入账号
1 | [root@serverc ~]# ceph auth export client.user2 > user2.dat |
ceph auth get-or-create 创建一个新用户帐户并生成它的密钥,通常会添加-o选项保存密钥,不然只是显示不保存
1 | [root@serverc ~]# ceph auth get-or-create client.user7 mon 'allow r' osd 'allow rw' -o /etc/ceph/ceph.client.user7.keyring |
ceph auth caps 修改用户Caps
将user6的osd中w权限去掉了,定义一个空字符串可以删除所有功能
1 | [root@serverc ~]# ceph auth get client.user6 |
ceph auth del 删除用户帐号
1 | [root@serverc ~]# ceph auth del client.user6 |