分布式存储系统之Ceph集群CephX认证和授权

前文我们了解了Ceph集群存储池操作相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16743611.html;今天我们来聊一聊在ceph上认证和授权的相关话题;
我们知道ceph作为一个分布式存储系统,用户想要在其上面存储数据,首先得通过认证以后,才能正常使用ceph;那么对于ceph来讲,它是怎么认证用户的呢?除了认证,我们知道不是所有用户都能在ceph上创建存储池,删除存储池等;这也意味着每个用户都有一定的权限,在自己的权限范围内操作,ceph才算得上是一个安全的存储系统;那么ceph的认证和授权到底是怎么做的呢?
CephX认证机制

分布式存储系统之Ceph集群CephX认证和授权

文章插图
Ceph使用cephx协议对客户端进行身份认证,其过程大致是这样的;每个mon都可以对客户端进行身份验证并分发密钥;这意味着认证靠mon节点完成,不会存在单点和性能瓶颈;mon会返回用于身份验证的数据结构,其中包含获取Ceph服务时用到的session key;所谓session key就是客户端用来向mon请求所需服务的凭证;session key是通过客户端的密钥进行加密传输;当mon收到客户端认证请求后,首先生成session key,然后用客户端的密钥加密session key,然后发送给客户端,客户端用自己的密钥将其解密,拿到session key;客户端有了session key以后,它就可以用这个session key向mon请求服务,mon收到客户端的请求(携带session key),此时mon会向客户端提供一个ticket(入场卷,票据)然后用session key加密后发送给客户端;随后客户端用session key解密,拿着这个凭证到对应osd完成认证;
以上过程,我们需要注意,客户端的密钥是通过mon节点在创建用户帐号时就会生成,所以mon节点有对应客户端的密钥,所以通过客户端的密钥加密,客户端可以用自己的密钥解密;其次mon节点生成的session key 是有记录的,所以对于不同客户端来说,都有不同的记录;并且该session key是有时间限制的;过期即便是对应客户端,也没法正常使用;所以客户端拿着对应session key向mon请求服务,对应mon都是认可的,所以mon会发放ticket;最后我们要知道,MON和OSD都是共享客户端的密钥和session key,以及mon发放的ticket,所以客户端拿着mon发放的ticket,对应osd是认可的;这也意味着不管是那个mon节点发放的ticket,对应所有mon节点和osd都是知道的;简单讲就是集群组件之间共享同一个secret;
CephX身份验证MDS和OSD
分布式存储系统之Ceph集群CephX认证和授权

文章插图
提示:简要过程是客户端请求创建用户,mon创建用户并返回与共享密钥给客户端;客户端向mon发起认证,认证成功,mon会返回一个session key;在规定时效范围内,客户端拿着session key向mon请求ticket,mon生成ticket并用对应session加密,客户端收到对应mon返回的数据用session key解密,拿到ticket;随后客户端拿着对应当ticket去mds或者osd进行数据存取操作,对应组件会被认证通过,因为mon和mds、osd之间都是共享secret;
这里需要注意,CephX身份验正功能仅限制Ceph的各组件之间,它不能扩展到其它非Ceph组件;其次它并不解决数据传输加密的问题;什么意思呢?我们知道ceph的客户端接口有rbd、cephfs和radosgw;对于ceph来讲,它并不关心什么样的客户端通过rbd、cephfs、radosgw接口量访问数据;它只关心rbd、cephfs、radosgw这些客户端接口程序能够正常认证通过;简单讲就是数据最后“一公里”它不负责,至于用rbd、cephfs、radosgw这些接口的客户端是谁,怎么传输数据它管不着;
认证与授权相关术语
无论Ceph客户端是何类型,Ceph都会在存储池中将所有数据存储为对象;Ceph用户需要拥有存储池访问权限才能读取和写入数据;Ceph用户必须拥有执行权限才能使用Ceph的管理命令;

经验总结扩展阅读