ceph使用cephx协议对客户端进行身份认证,cephx用于对ceph保存的数据进行认证访问和授权,与mon通信的请求都要经过ceph认证通过,但是也可以在mon节点关闭ceph认证,但是关闭认证之后任何访问都将被允许,因此无法保证数据的安全性。同时,Mon 还负责维护整个集群的用户名和秘钥等;
认证流程
Ceph 客户端与 Mon 之间在创建时,存在一对域共享秘钥。
客户端向 Monitor 发出请求时,Monitor 会返回用于验证用户身份的数据结构,其中包含获取 Ceph 服务时用到的临时 Session key,这个是加密的;
客户端拿到这个临时加密的 Session key后,客户端通过密钥进行解密 Seesion key;(其实这里双方提前有一个域共享密钥,只有有了它之后,才可以对临时 Session key 进行解密)
然后客户端使用解密的 Session key 向 mon 请求所需要的服务,比如OSD,然后 mon 给出一个令牌 ticket ,并且 mon 还需要检查这个 Session key 的合法性;并且 mon 提供一个 ticket需要使用Session key 对ticket进行对称加密,然后发送给客户端,客户端也具有这个Session key,所以他可以解密出ticket;
客户端然后通过tocket 去访问对应的服务,这里以OSD为例,去访问OSD服务;
注意session key与 ticket 都会有过期时间的,就算用户拿到了 session key与ticket,过一段时间后就失效了。
客户端与 ceph 组件服务并没有一直使用域共享密钥进行通信;域共享密钥,只有在客户端与 Monitor 在共享 Session key的时候使用到;同时,还可以发现域共享密钥并没有在互联网上面进行传输;
CephX 身份验证功能仅限制Ceph的各组件之间,它不能扩展到其它非Ceph组件,它并不解决数据传输加密的问题;
ceph 用户介绍
- 用户是指个人(ceph管理者)或 系统参与者(mon/osd/mds)。
- 通过创建用户,可以控制用户或那个参与者能够访问ceph存储集群、以及可访问的存储池及存储池的数据。
- 通过点号来分割用户类型和用户名,格式为TYPE.ID,例如:ceph.client.admin.keyring
授权的能力
能力 | 含义 |
---|---|
r | 向用户授予读取权限,访问监视器(mon)以检索CRUSH运行图时需要由此能力 |
w | 向用户授予针对对象的写入权限 |
x | 授予用户调用类方法(包括读取和写入)的能力,以及在监视器中执行auth操作的能力 |
* | 授予用户对特定守护进程/存储池的读取、写入和执行权限,以及执行管理命令的能力 |
class-read | 授予用户调用类读取方法的能力,属于是x能力的子集 |
class-write | 授予用户调用类写入方法的能力,属于是x能力的子集 |
profile osd | 授予用户以某个OSD身份连接到其它OSD或监视器的权限。授予OSD权限,使OSD能够处理复制检测信号流量和状态报告(获取OSD的状态信息) |
profile mds | 授予用户以某个MDS身份连接到其它MDS或监视器权限 |
profile bootstrap-osd | 授予用户引导OSD的权限(初始化OSD并将OSD加入ceph集群),授权给部署工具,使其在引导OSD时有权添加秘钥 |
profile bootstrap-mds | 授予用户引导元数据服务器的权限,授权部署工具权限,使其在引导元数据服务器时有权添加秘钥 |
用户管理
ceph 主要通过ceph auth命令来进行用户管理。
-
列出用户
# ceph auth ls
-
添加用户
ceph auth add
此命令是添加用户的规范方法。它会创建用户、生成秘钥,并添加所有指定的能力。# ceph auth add client.wgs mon 'allow r' osd 'allow rwx pool=wgspool' added key for client.wgs
ceph auth get-or-create 创建用户并返回密钥文件格式的密钥信息,或者在用户存 在时返回用户名及密钥文件格式的密钥信息;
#
-
删除用户
# ceph auth del client.wgs
-
获取指定用户权限
# ceph auth get client.admin
-
验证权限
#
-
修改权限
使用ceph auth caps命令可以指定用户以及更改用户的能力,设置新能力会完全覆盖当前的能力,因此,要加上之前的用户已经拥有的和新的能力。#
秘钥管理
- 秘钥环
ceph密钥环是一个保存了secrets、keys、certificates并且能够让客户端通过认证访问ceph的keyring file(集合文件),一个keyring file可以保存一个或者多个认证信息,每一个key都有一个实体名称加权限,类型为:{client、mon、mds、osd}.name
使用ceph-authtool命令为其创建用户密钥环文件。
-
创建
# cceph-authtool --create-keyring wgs.key creating wgs.key
-
验证秘钥环文件
# ceph-authtool -l wgs.key
-
导出用户认证信息至keyring文件
# ceph auth get client.wgs -o ceph.client.wgs.keyring exported keyring for client.wgs
-
从keyring文件恢复用户认证信息