目录
ceph用caps来描述给予用户的的权限来使用mon和osd/mds,caps用来限制对某一个存储池的数据或者某个命名空间的访问
ceph管理员用户可以创建或者更新普通用户来赋予caps权限
用户
示例
- #查看所有的ceph用户权限
- ceph auth list
-
- #管理员用户(对所有组件拥有完全的管理员权限)
- client.admin
- key:AQA5+FZd7J90NBAAy3upDi1HsMCC55tUJWZzPW==
- caps:[mds] allow *
- caps:[mgr] allow *
- caps:[mon] allow *
- caps:[osd] allow *

- auth_cluster_required = none
- auth_service_required = none
- auth_client_required = none
- auth_cluster_required = cephx
- auth_service_required = cephx
- auth_client_required = cephx
在ceph中认证和授权是一体的
| 具体参数项 | 参数解析 |
|---|---|
| r | 赋予用户读数据的权限,如果我们需要访问集群的任何信息,都需要先具有monitor的读权限 |
| w | 赋予用户写数据的权限,如果需要在osd上存储或修改数据就需要为0SD授予写权限x|赋予用户调用对象方法的权限,包括读和写,以及在monitor上执行用户身份验证的权限 |
| class-read | x的子集,允许用户调用类的read方法,通常用于rbd类型的池 |
| class-write: | 的子集,允许用户调用类的write方法,通常用于rbd类型的池 |
| * | 将一个指定存储池的完整权限(r、w和x)以及执行管理命令的权限授予用户 |
| profile rbd | 授权管理rbd权限 |
| profile osd | 授权一个用户以0SD身份连接其它OSD或者Monitor,用于0SD心跳和状态报告 |
| profile mds | 授权一个用户以MDS身份连接其他MDS或者 |
| Monitor profile bootstrap-osd | 允许用户引导0SD。比如ceph-deploy和ceph-disk工具都使用client.bootstrap-osd用户,该用户有权给0SD添加密钥和启动加载程序 |
| profile bootstrap-mds | 允许用户引导MDS。比如ceph-deploy工具使用了client.bootstrap-mds用户,该用户有权给MDS添加密钥和启动加载程序 |
- #授权语法:
- {daemon-type} allow {capability}' [{daemon-type} 'allow {capability}']
- #授权对象:
- monitor caps,包括r、w、x参数以及allow profiles {cap}
- mon 'allow rwx'
- mon 'allow profile osd'
- osd caps,包括r、w、x、class-read、class-write以及profile osd
- osd 'allow rw'
- osd 'allow rw pool=rbd'
- mds
- mds 'allow'
- #普通授权
- mon 'allow r' osd 'allow rw'
-
- #基于存储池的授权
- mon 'allow r' osd 'allow rw pool=Poolname'
-
- #基于对象前缀授权
- mon 'allow r' osd 'allow rw object_prefix pref'
-
- #基于命名空间授权
- mon 'allow r' osd 'allow rw pool=Poolname namespace=youNS'
-
- #基于路径授权(只适用于CephFS,CephFS通过这种方式来限制对特定目录的访问)
- mon 'allow r' osd 'allow rw pool=cephfs_data' mds 'allow rw path=/webcontent'
-
- #限制用户只能使用特定的管理员指令(指定具体能使用的命令)
- mon 'allow r, allow command "auth get-or-create", allow command "auth list"'
常规概念
- #Ceph集群管理员能够直接在Ceph集群中创建、更新和删除用户
- 创建用户时,可能需要将密钥分发到客户端,以便将密钥添加到密钥环
- #列出用户
- 命令:ceph auth list
- 用户标识:TYPE.ID,因此,osd.0表示OSD类型的用户,用户ID为0
- #检索特定用户
- 命令:ceph auth get TYPE.ID或者ceph auth export TYPE.ID
- #添加用户
- ceph auth add:规范方法,它能够创建用户、生成密钥并添加指定的caps
- ceph auth get-or-create:简便方法,创建用户并返回密钥文件格式的密钥信息,或者在用户存在时返回用户名及密钥文件格式的密钥信息
- ceph auth get-or-create-key:简便方法,创建用户并返回密钥信息,或者在用户存在时返回密钥信息
- 注意:典型的用户至少对Ceph monitor 具有读取功能,并对Ceph OSD具有读取和写入功能;另外,用户的OSD权限通常应该限制为只能访问特定的存储池,否则,他将具有访问集群中所有存储池的权限
Ceph守护进程使用的帐户名与相关守护进程名称匹配:osd.1 或 mon.ceph-node1,这些用户默认会在安装时被创建
librados的客户端应用,帐户名以client.开头。例如,将OpenStack与Ceph集成时,常常会创建专用的client.openstack用户。另外,当部署 Ceph Object Gateway时,会创建client.rgw.帐户。如果要在librados基础上部署自定义软件,也应当创建特定帐户
Ceph客户端所使用的帐户名以client.开头,运行ceph和rados等命令时使用。安装程序会创建超级管理员client.admin,它具有访问所有内容及修改集群配置的功能。如果运行命令时不通过 –name 或 –id 明确指定用户名,Ceph默认使用client.admin
- #两种访问方式
- ceph -s --id admin
- ceph -s --name client.admin
- #示例
- ceph auth add client.breeze mon "allow r" osd "allow rw pool=PoolName"
- #示例
- ceph auth get-or-create client.tina mon "allow r" osd "allow rw pool=PoolName"
- #示例
- ceph auth get-or-create client,bernie mon "allow r" osd
ceph auth import -i /etc/ceph/ceph.client.username.keyring
ceph auth get clinet.username -o path(指定路径,规范为[ceph.client.username.keyring])
- #显示所有的用户信息
- ceph auth list
-
- #获取某个用户的详细信息
- ceph auth get client.admin
-
- #获取用户的key
- ceph auth print-key client.admin
-
- #删除指定用户
- ceph auth del client.breeze
- #例子
- ceph auth get clinet.username
- #添加指定用户的权限
- ceph auth caps clinet.username mon "allow r" osd "allow rw pool=PoolName"
- #清空指定用户的权限
- ceph auth caps clinet.username mon "" osd ""
- ceph-authtool -C /etc/ceph/ceph.keyring
- ceph-authtool ceph.keyring --import-keyring ceph.client.username.keyring
- ceph-authtool ceph.keyring --import-keyring ceph.client.username.keyring
- ceph --id user --keyring /etc/ceph/ceph.keyring health
- ceph --user user --keyring /etc/ceph/ceph.keyring health
- ceph --name client.user --keyring /etc/ceph/ceph.keyring health
- # 检查mypool是否存在,如果不存在,则需要创建
-
- ceph osd pool ls
-
- # ceph osd pool create mypool 64
- # ceph osd pool application enable mypool rbd
-
- # 创建用户并授权
- ceph auth get-or-create client.docedit mon 'allow r' osd 'allow rw pool=mypool namespace=docs' -o /etc/ceph/ceph.client.docedit.keyring
-
- ceph auth get-or-create cleint.docget mon 'allow r' osd 'allow r pool=mypool namespace=docs' -o /etc/ceph/ceph.client.docget.keyring
-
- # 验证
- ceph auth list
-
- # 将密钥发往servera
-
- scp /etc/ceph/ceph.client.docedit.keyring servera:/etc/ceph/
- scp /etc/ceph/ceph.client.docget.keyring servera:/etc/ceph/
-
- # servera上操作
-
- rados --id docedit -p mypool -N docs put testdoc /etc/services
- rados --id docget -p mypool -N docs get testdoc /tmp/test
- diff /etc/services /tmp/test
-
- # 下面操作会抛异常
- rados --id docget -p mypool -N docs put mywritetest /etc/services
-
-
- # serverc上操作
- ceph auth caps client.docget mon 'allow r' osd 'allow rw pool=mypool namespace=docs, allow rw pool=docarchive'
-
- rados --id docget -p mypool -N docs put mywritetest /etc/services
-
-
- # 清理相关用户
-
- # serverc上操作
- rm /etc/ceph/ceph.client.docedit.keyring
- ssh servera rm /etc/ceph/ceph.client.docedit.keyring
- ceph auth del cleint.docedit
- rm /etc/ceph/ceph.client.docget.keyring
- ssh servera rm /etc/ceph/ceph.client.docget.keyring
- ceph auth del cleint.docget