1、CephX是什么
CephX是一种对称秘钥加密协议,加密算法使用AES,Ceph集群通过CephX协议对客户端进行身份认证。
2、CephX认证机制
- 每个Monitor都可以对客户端进行身份验证并分发秘钥,此过程是无状态的,不存在单点故障和性能瓶颈。
- Monitor会返回身份验证的数据结构,其包含获取Ceph服务时用到的session key。
- session key通过客户端秘钥进行加密。
- 客户端使用session key向Monitor发起请求。
- Monitor向客户端提供一个用session key加密过的ticket。
- 客户端使用此ticket用于向实际处理数据的OSD验证客户端身份。
- Monitor和OSD共享同一个secret,因此OSD信任Monitor发放的ticket。
- ticket存在有效期。
- CephX身份验证功能仅限于Ceph各组件之间,不能扩展到非Ceph组件(如radosgw是否认证客户端,需要由应用程序保证。)
- 不能解决数据传输加密的问题。
3、CephX身份验证流程

- 管理员在Monitor创建一个用户账号,将账号信息共享给MDS和OSD,并将账号预共享秘钥传给Client。
- Client使用此账号对Monitor发起请求,完成认证,获取SessionKey。
- Client请求获取ticket,Minotir将生成ticket并发送给Client。
- Client使用此ticket向MDS或OSD发起访问。
- MDS或OSD解密ticket,认证通过处理请求。
4、CephX用户认证与授权
4.1、用户
用户是指个人或系统参与者(如Ceph集群中的其他组件应用)
通过用户控制用户是否能否访问Ceph存储集群、以及可访问的存储池及存储池中的数据
Ceph支持多种类型的用户,可管理的用户都属于Client类型
- 区分类型的原因在于Monitor、OSD、MDS等服务也使用CephX协议,但它们并不是Client
Ceph以句点(.)标识用户,由用户类型和用户ID组成,格式为TYPE.ID,例如client.admin。
4.2、授权和能力
Ceph用能力(capabilities,caps)这个术语来描述认证用户的权限,这样来限制Monitor、OSD或MDS的权限范围或级别。
caps的语法格式:{daemon-type} 'allow {capability}' [{daemon-type} 'allow {capability}']
daemon-type:表示应用类型,如mon表示客户端操作mon的权限,可以一次授权多个类型。
allow:允许哪些授权
capability:授予的权限4.2.1、Mon支持的能力
允许r、w、x和’allow profile osd’
如mon ‘allow rw’或mon ‘allow profile osd’
4.2.2、OSD支持的能力
允许r、w、x和class-read 、 class-write 和 profile osd
-
4.2.3、MDS支持的能力
-
4.2.4、各项能力的描述
allow:在守护进程的访问设置之前,仅对MDS有rw的含义,对其他类型无意义。
- r:授予用户读取权限,监视器mon需要它才能获取到CRUSH运行图
- w:授予用户写对象的权限
- x:授予用户调用类方法的能力,既同时用户读和写,且能在mon上执行auth操作。
- class-read:授予用户调用类读取方法的能力,x的子集
- class-write:授予用户调用类写入方法的能力,x的子集
- *:授权此用户读、写和执行某守护进程/存储池,且允许执行管理命令。
- profile osd:授权一个用户以 OSD 身份连接其它 OSD 或监视器。授予 OSD 们允许其它 OSD处理复制、心跳流量和状态报告。
- profile mds:授权一个用户以 MDS 身份连接其它 MDS 或监视器。
- profile bootstrap-osd:授权用户引导OSD的权限,授予部署工具
profile bootstrap-mds:授权用户引导MDS的权限,授予像ceph-deploy部署工具
5、用户管理
用户管理功能为 Ceph 存储集群管理员提供了在 Ceph 存储集群中创建、更新和删除用户的能力。
在Ceph集群中创建删除用户时,可能需要将秘钥分发给客户端,以便将秘钥添加到秘钥环keyting中。-
5.1、用户管理常用指令
列出用户
]$ ceph auth listmds.ceph-mon1 # 用户标识key: AQCsmxhh5aSfDBAAMaFWbKAKYbjk6CYQbMiO5A==caps: [mds] allowcaps: [mon] allow profile mdscaps: [osd] allow rwxosd.0key: AQDK4RdhrkftDBAAMU841pbG/eIDMMCApMGt9A==caps: [mgr] allow profile osdcaps: [mon] allow profile osdcaps: [osd] allow *
获取特定用户
]$ ceph auth get client.admin
添加用户
- ceph auth add:此命令是添加用户的规范方式。它将创建用户、生成密钥并添加任何指定的功能。
- ceph auth get-or-create:简单方法,用户不存在会创建用户返回一个包含用户名和密钥的密钥文件格式。如果用户已存在,此命令仅以密钥文件格式返回用户名和密钥。
- ceph auth get-or-create-key:创建用户并返回密钥。如果用户已存在,返回密钥。
创建用户时,可以创建一个没有能力的用户,但此用户只能认证,没有检索集群运行图的能力,因此一个典型用户应该至少包含mon监视器上的读取能力和osd的读写能力。
获取用户秘钥
]$ ceph auth print-key TYPE.ID
导入用户
需要指定秘钥环。
]$ ceph auth import -i /path/to/keyring
- 修改用户能力caps
修改用户能力会覆盖现用的caps,因此修改前应该先使用ceph auth get TYPE.ID查看用户的caps,在此基础上进行修改。
# 命令格式]$ ceph auth caps USERTYPE.USERID {daemon} 'allow [r|w|x|*|...] [pool={pool-name}] [namespace={namespace-name}]' [{daemon} 'allow [ r|w|x|*|...] [pool={pool-name}] [namespace={namespace-name}]']# 示例,设置用户rbduser拥有对存储池rbddata的mon的rw和osd的rwx权限]$ ]$ ceph auth add client.rbduser mon 'allow rw' osd 'allow rw pool=rbddata'added key for client.rbduser
删除用户
ceph auth del {TYPE}.{ID}
6、秘钥环管理
当您通过 Ceph 客户端访问 Ceph 时,Ceph 客户端将查找本地密钥环。Ceph默认使用以下四个密钥环名称预设密钥环设置。
/etc/ceph/$cluster.$name.keyring # 保存单个用户的keyring
- /etc/ceph/$cluster.keyring # 保存多个用户的keyring
- /etc/ceph/keyring
- /etc/ceph/keyring.bin
cluster是为集群名称,user是为用户标识(TYPE.ID)
client.admin用户的在名为ceph的集群上的密钥环文件名为ceph.client.admin.keyring
6.1、创建keyring
- ceph auth add等命令添加的用户还需要额外使用ceph-authtool命令为其创建用户密钥环
- ceph客户端通过keyring文件查找用户名并检索密钥
可以使用命令:ceph-authtool —create-keyring /path/to/kerying创建keyring文件
]$ ceph-authtool --create-keyring cluster.keyringcreating cluster.keyring
可将某个用户从包含多个用户的keyring中导出,并保存于一个专用的keyring文件
- 命令:ceph auth get TYPE.ID -o /etc/ceph/cluster-name.user-name.keyring
]$ ceph auth get client.rbduser -o ceph.client.rbduser.keyringexported keyring for client.rbduser
- 命令:ceph auth get TYPE.ID -o /etc/ceph/cluster-name.user-name.keyring
也可将用户的keyring合并至一个统一的keyring文件中
- ceph-authtool /etc/ceph/cluster-name.keyring —import-key /etc/ceph/cluster-name.user-name.keyring
# 将rbduser和admin合并到一个秘钥环]$ ceph-authtool cluster.keyring --import-keyring ceph.client.rbduser.keyringimporting contents of ceph.client.rbduser.keyring into cluster.keyring]$ ceph-authtool cluster.keyring --import-keyring ceph.client.admin.keyringimporting contents of ceph.client.admin.keyring into cluster.keyring
6.3、使用ceph-authtool管理用户
ceph-authtool命令可直接创建用户、授予caps并创建keyring,命令格式如下:ceph-authtool keyringfile [-C | --create-keyring] [-n | --name entityname] [--gen- key] [-a | --add-key base64_key] [--cap | --caps capfile]
- ceph-authtool /etc/ceph/cluster-name.keyring —import-key /etc/ceph/cluster-name.user-name.keyring
命令选项:
- -c:将创建一个新的keyring,覆盖现有的keyring文件
- —gen-key:为指定的用户生成新的秘钥
- —add-key:将向keyring添加编码密钥
- 注意:此种方式添加的用户仅存在于keyring文件中,管理员还需要额外将其添加至Ceph集群上;
- 命令: ceph auth add TYPE.ID -i /PATH/TO/keyring
