Ceph 提供 Cephx身份验证系统,以保护系统并防止攻击;
注意,Cephx 解决的是系统认证问题,但不提供网络通信时的数据加密。
被认证的对象
1)用户:用户需要完成验证,而后才能访问 Ceph Cluster 数据。比如,某客户端要想执行命令来操作集群,就要有登录Ceph的密钥;
2)进程:集群守护进程间的互相访问,也需要进行认证。这是一种特殊的用户类型MON/OSD/MDS。也就是说,Monitor、OSD、MDS都需要账号和密码来登录Ceph系统。
认证方式
None
针对用户、守护进程,不进行认证;
CephX
针对用户、守护进程,进行认证;
ceph auth cluster required = cephx ceph auth service required = cephx ceph auth client required = cephx
Client 访问 Ceph MON 完成身份认证;
Cephx 使用共享密钥进行身份验证,这意味着客户端和Monitor都具有客户端密钥的副本。身份验证协议使双方可以相互证明自己拥有密钥的副本,而无须透露密钥。也就是说,集群确定用户拥有密钥,并且用户确定集群有密钥的副本。
认证过程
客户端的凭证下发
针对请求的认证检查
用户通过Ceph客户端访问Monitor。每个Monitor都可以对用户进行身份验证并分配密钥,因此使用Cephx时不会出现单点故障。Monitor返回身份验证数据,其中包含用于获取Ceph服务的会话密钥。该会话密钥本身已使用用户的永久密钥加密,因此用户只能向Monitor请求服务,然后客户端使用会话密钥从Monitor请求其所需的服务,并且由Monitor向客户端提供密钥,客户端拿到该密钥即可向实际处理数据的OSD发起认证。Monitor和OSD共享一个密钥,因此Monitor提供的密钥可以被集群中的任何OSD或元数据服务器共用。这种身份验证形式可防止有权访问通信介质的攻击者创建虚假消息或更改其他用户的合法消息,但只要该用户的密钥在到期前不被泄露就不会有威胁。要使用Cephx,管理员必须首先设置用户。
用户权限
User Management — Ceph Documentation
allow: 只用于赋予用户 MDS 的 rw 权限;
r: 赋予用户读数据的权限,该权限也是从 monitor 读取 CRUSH map 时必须要有的;
w: 赋予用户写入数据的权限;
x: 赋予用户调用对和象方法的权限,包括读和写,以及在 monitor 上执行用户身份验证的权限;
class-read: 这是 x 权限的子集,它允许用户调用类的 read 方法;
class-write: 这是 x 权限的子集,它允许用户调用类的 write 方法;
*: 将一个指定存储池的完整权限 (r、w 和 x) 以及执行管理命令的权限授予用户;
profile osd: 允许用户像一个 OSD 一样去连接其他 OSD 或者 monitor,用于 OSD 心跳和状态报告;
profile mds: 允许用户像一个 MDS 一样去连接其他 MDS;
profile bootstrap-osd: 允许用户引导 (bootstrap) OSD。比如 ceph-deploy 和 ceph-disk 工具都使用 client.bootstrap-osd 有用户,该用户有权给 OSD 添加密钥和局动加载程序;
profile bootstrap-mds: 允许用户引导(bootstrap)MDS。比如, ceph-deploy 工具使用了 client .bootstrap-mds 用户, 该用户有权给 MDS 添加密钥和启动加载程序;
{daemon-type} 'allow {caps}' # for MON: r; w; x; allow profile {cap} mon 'allow rwx' mon 'allow profile osd' # for OSD: r; w; x; class-read; class-write; profile osd; osd 'allow rwx' osd 'allow class-read, allow rwx pool=rbd' # for MDS: r;
常用命令
ceph auth list ceph auth get client.admin ceph auth get-or-create client.hari ceph auth caps client.cephfs <caps> # 更新用户的权限;