转载自:https://github.com/blueboay/ceph-study
认证与授权
Ceph使用cephx协议对客户端进行身份验证,集群中每一个Monitor节点都可以对客户端进行身份验证,所以不存在单点故障。cephx仅用于Ceph集群中的各组件,而不能用于非Ceph组件。它并不解决数据传输加密问题,但也可以提高访问控制安全性问题。
认证授权流程
- 客户端向Monitor请求创建用户。
- Monitor返回用户共享密钥给客户端,并将此用户信息共享给MDS和OSD。
- 客户端使用此共享密钥向Monitor进行认证。
- Monitor返回一个session key给客户端,并且此session key与对应客户端密钥进行加密。此session key过一段时间后就会失效,需要重新请求。
- 客户端对此session key进行解密,如果密钥不匹配无法解密,这时候认证失败。
- 如果认证成功,客户端向服务器申请访问的令牌。
- 服务端返回令牌给客户端。
- 这时候客户端就可以拿着令牌访问到MDS和OSD,并进行数据的交互。因为MDS和Monitor之间有共享此用户的信息,所以当客户端拿到令牌后就可以直接访问。
认证授权流程如下图所示:
用户
用户通常指定个人或某个应用,个人就是指定实际的人,比如管理员。而应用就是指客户端或Ceph集群中的某个组件,通过用户可以控制谁可以如何访问Ceph集群中的哪块数据。 Ceph支持多种类型的用户,个人与某应用都属于client类型。还有mds、osd、mgr一些专用类型。
用户标识
用户标识由“TYPE.ID”组成,通常ID也代表用户名,如client.admin、osd.1等。
使能caps
使能表示用户可以行使的能力,通俗点也可以理解为用户所拥有的权限。 对于不同的对象所能使用的权限也不一样,大致如下所示。
- Monitor权限有:r、w、x和allow、profile、cap。
- OSD权限有:r、w、x、class-read、class-wirte和profile osd。另外OSD还可以指定单个存储池或者名称空间,如果不指定存储池,默认为整个存储池。
- MDS权限有:allow或者留空。
关于各权限的意义:
- allow:对mds表示rw的意思,其它的表示“允许”。
- r:读取。
- w:写入。
- x:同时拥有读取和写入,相当于可以调用类方法,并且可以在monitor上面执行auth操作。
- class-read:可以读取类方法,x的子集。
- class-wirte:可以调用类方法,x的子集。
- *:这个比较特殊,代表指定对象的所有权限。
- profile:类似于Linux下sudo,比如profile osd表示授予用户以某个osd身份连接到其它OSD或者Monitor的权限。profile bootstrap-osd表示授予用户引导OSD的权限,关于此处可查阅更多资料。
用户管理
关于用户管理将介绍如何创建、修改与删除用户。
查看用户信息
查看所有用户信息。
~]$ ceph auth list
list可以简写为ls,通过此命令可以获取所有用户的key与权限相关信息。如果只需要某个用户的信息可以使用get子命令,如。
~]$ ceph auth get client.admin
这里clinet.admin为用户标识,如果只需要某个用户的key信息,可以使用pring-key子命令,如。
~]$ ceph auth print-key client.admin
创建用户
~]$ ceph auth add client.test mon "allow r" osd "allow rw"
上面创建了一个用户,用户标识为client.test。指定该用户对mon有r的权限,对osd有rw的权限,osd没有指定存储池,所以是对所有存储池都有rw的权限。在创建用户的时候还会自动创建用户的密钥。
~]$ ceph auth import -i ceph.client.test.keyring
使用import可以从某个keyring文件中导入用户信息,-i指定keyring文件的位置。有导入就有导出,导出用户信息命令如下。
~]$ ceph auth get client.test -o ceph.client.test.keyring
获取到用户信息后,指定-o选项即可将用户信息保存至keyring文件。
修改用户权限
ceph auth caps client.test mon "allow r" osd "allow rw pool=kvm"
修改权限不等于增加权限,修改后的权限会完全覆盖之前的所有权限。这里在osd上面指定了pool=kvm,如果不指定默认就是所有存储池。
删除用户
ceph auth del client.test
关于keyring密钥环
keyring文件是一个包含密码,key,证书等内容的一个集合。一个keyring文件可以包含多个用户的信息,也就是可以将多个用户信息存储到一个keyring文件。
keyring自动加载顺序
当访问Ceph集群时候默认会从以下四个地方加载keyring文件。
- /etc/ceph/cluster-name.user-name.keyring:通过这种类型的文件用来保存单个用户信息,文件名格式固定:集群名.用户标识.keyring。如ceph.client.admin.keyring。这个代表ceph这个集群,这里的ceph是集群名,而client.admin为admin用户的标识。
- /etc/ceph/cluster.keyring:通用来保存多个用户的keyring信息。
- /etc/ceph/keyring:也用来保存多个用户的keyring信息。
- /etc/ceph/keyring.bin:二进制keyring文件,也用来保存多个用户的keyring信息。
keyring文件管理
创建keyring文件。
ceph-authtool --create-keyring /etc/ceph/cluster.keyring
通过ceph-authtool命令也可以用来管理用户,比ceph更底层。通常keyring文件应该保存至/etc/ceph目录下,并且文件名应按照规范。上面创建的多用户的keryring文件。 将用户添加至keryring。 ceph-authtool /etc/ceph/cluster.keyring –import-keyring /etc/ceph/ceph.client.test.keyring
- –import-keyring:指定被导入的信息。