Ceph storage cluster的认证和授权默认是启用的。Ceph的客户端用户要么是独立的个体用户,要么是系统中的一个应用,他们都使用ceph的客户端与ceph存储集群交互。
当ceph启用认证和授权时,你必须要指定用户名和包含秘钥的钥匙环才可以使用客户端与集群进行交互。如果不指定如:ceph heath,它会使用默认用户client.admin并自动通过keyring查找对用的key。
指定用户和秘钥的方式:
ceph –n client.admin –keyring=/etc/ceph/ceph.client.admin.keyring health
和上面的指令的效果是相同的。
不管什么类型的客户端(块,对象,文件系统,还是本地api)ceph把所有的数据都统一存储在池中。用户必须要有对池的访问权限,而且ceph用户还要有执行权限,以便使用ceph的管理指令。
用户可以是一个独立的个体,或者系统的一个角色如一个应用。创建了用户,才允许你访问存储集群,它的池,和池中的数据。
Ceph中有用户type概念,用户的管理通常是client。Ceph对用户的辨别是通过点分割的形式,它包含类型和用户名如:TYPE.ID格式client.admin,client.user1。使用用户类型的原因是因为ceph monitors osds 和metadata 服务也都使用了cephx协议,但是他们不是客户端,类型就是用于区分的。区分用户类型有助于在客户端用户和其他用户的访问控制,用户监控和跟踪的辨别。
注:ceph存储集群用户和ceph对象存储用户或者ceph文件系统用户是不一样的,ceph object gateway使用存储集群用户来进行gateway守护进程和存储集群之间交互。但是gateway有他自己的终端用户管理功能。Ceph文件系统使用的是posix,与ceph文件系统相关的用户跟ceph存储集群用户也是不同的。
Ceph使用“capability”来标识赋予已认证用户执行monitors ,osd,和metadata 服务功能的能力。Capability严格控制对池中数据的访问或者池中命名空间的访问。当创建用户的时候由管理员用户来赋予用户capability。
Capability的语法如下:
{daemon-type} ‘ allow {capablility}’ [{daemon-type} ‘allow {capablility}’]
Monitor Caps:monitor capabilities 包括r,w,x和allow profile {cap},例如:
mon ‘allow rwx’
mon ‘allow profile osd’
OSD Caps:OSD capabilities包括r,w,x,class-read,class-write和profile osd,另外osdcapability也允许对pool和namaspace的设置。
osd ‘allow {capability}’ [pool={poolname}] [namespace={namespace-name}]
Metadata Server Caps:metadata server capability需要allow,或者是空白而且不不解析任何特性。
mds ‘allow’
注:ceph object gateway daemo (radosgw)是一个ceph存储集群客户端,所以它没有被标识为ceph存储集群的守护进程类型。
Pool是对存储的逻辑划分,用户把数据都放到pool里,默认情况下,ceph storage cluster中有data pool,rbd pool,metadata pool。在ceph的部署中为相似的数据创建一个pool来存放数据是很普遍的。例如当把ceph作为opentack的后端时,典型的部署有volumes ,image,backups,和virtual machine pool,和用户如:client.glance,client.cinder,etc。
池中对象的一个逻辑组织,池中的对象可以关联到该命名空间中。户访问的pool可以关联到一个池中,这样用户所做的读写尽在该命名空间中有效。Pool中写在命名空间中的数据只有对该命名空间有访问权限的用户才可以访问。
命名空间对与使用librados写数据的应用是很有用的,但是像block device client,object storage client和filesystem 暂时还不支持该特性。
用户管理功能在ceph集群中给ceph管理员直接创建,跟新,删除用户的能力。
列表内容
ceph auth list
可以使用-o {filename}选项把输出内容打印到指定文件中。
ceph auth get {TYPE.ID}
创建用户会添加一个用户名,秘钥和capability
用户的key使用户能通过ceph storage cluster认证,用户的capabilities使用户具有一定的monitors,osds,或者metadata server的功能。
下面有三种创建用户的方式:
如果只创建用户,没有赋予用户capabilities,那么用户基本是无用的,但是可以使用命令ceph auth caps 给其添加capabilities。
下面是这些命令使用的例子:
ceph auth add client.john mon 'allow r' osd 'allow rw pool=liverpool'
ceph auth get-or-create client.paul mon 'allow r' osd 'allow rw pool=liverpool'
ceph auth get-or-create client.george mon 'allow r' osd 'allow rw pool=liverpool' -o george.keyring
ceph auth get-or-create-key client.ringo mon 'allow r' osd 'allow rw pool=liverpool' -o ringo.key
如果赋予用户osd的capability,但是没有指定特定的pool,则该用户对集群中所有的pool有访问权限。
ceph auth caps USERTYPE.USERID {daemon} 'allow [r|w|x|*|...] [pool={pool-name}] [namespace={namespace-name}']
例如:
ceph auth caps client.john mon 'allow r' osd 'allow rw pool=liverpool'
ceph auth caps client.paul mon 'allow rw' osd 'allow rwx pool=liverpool'
ceph auth caps client.brian-manager mon 'allow *' osd 'allow *'
删除用户的capabilities ,对权限指向空字符串。
ceph auth caps client.rngo mon ‘’ osd ‘’
删除用户
ceph auth del {TYPE}.{ID}
ceph auth print-key {TYPE}.{ID}
ceph auth import –I /path/to/keyring
注:ceph集群会添加新的用户,他们的keys和capabilities而且也会更新已经存在用户的keys和capabilities。
用户使用ceph client访问ceph时,ceph client会寻找本地的本地的keyring,ceph默认情况下预先对keyring做了下面四个文件的设置,所以你不必再设置它们,除非你想覆盖默认设置。
/etc/ceph/$cluster.$name.keyring
/etc/ceph/$cluster.keyring
/etc/ceph/keyring
/etc/ceph/keyring.bin
变量 cluster是集群的名字,它被ceph的配置文件名所定义,(例如:ceph.conf意思是集群的名字是ceph因此ceph.keyring),变量 name是用户类型和用户id(如client.admin因此ceph.client.admin.keyring)
当你在用户管理中创建一个用户,然后需要要创建一个钥匙环,你需要给ceph client提供一个用户keys,这样ceph client才能检索到指定用户的key,然后通过ceph storage cluster的认证。Ceph client 通过查询keyring来寻找用户名和用户的key。
Sudo ceph-authtool –C /etc/ceph/ceph.keyring
当创建的钥匙环为单个用户使用,最好使用集群的名字,用户的类型和用户的名字,并保存在/etc/ceph目录下。例如client.admin用户的钥匙环ceph.client.admin.keyring。
在/etc/ceph目录下创建钥匙环,必须使用root用户。这意味着只有root用户才有钥匙环rw权限,当钥匙环包含的是管理源的keys,这样就比较合理了。如果你打算为某个特定的用户,或者用户组使用一个特定的钥匙环,要确保使用chown或者chmod来建立适当的keyring所有权和访问权。
Sudo ceph auth get client.admin –o /etc/ceph/ceph.client.admin.keyring
注:要为对个的个体用户,使用推荐的文件格式。
:
Sudo ceph-authtool /etc/ceph/ceph.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring
Sudo ceph-authtool –n client.`这里写代码片`ringo –cap osd ‘allow rwx’ –cap mon ‘allow rwx’ /etc/ceph/ceph.keyring
Sudo ceph-authtool –C /etc/ceph/ceph.keyring –n client.ringo –cap osd ‘allow rwx’ –cap mon ‘allow rwx’ –gen-key
sudo ceph auth add client.ringo –I /eetc/ceph/ceph.keyring
更改记录在keyring中的用户的capabilities,通过capabilities指定keyring和用户名:
Sudo ceph-authtool /etc/ceph/ceph.keyring –n client.ringo –cap osd ‘allow rwx’ –cap mon ’allow rxx’
这里写代码片
更新用户到ceph storage cluster中,在ceph storage cluster Sudo ceph auth import –I /etc/ceph/ceph.keyring
你也可以在集群中直接更新用户的capabilities,把结果存储在keyring文件中,然后把keyring导入到你的主要ceph.keyring中。