Cephx认证机制
ceph使用cephx协议对客户端进行身份认证
cephx用于对ceph保存的数据进行认证访问和授权,用于对访问ceph的请求进行认证和授权检测,于mon通信的请求都要经过ceph认证通过,但是也可以在mon节点关闭cephx认证,但是关闭认证之后任何访问都将被允许,因此无法保证数据的安全性。
1、授权流程
每个 mon 节点都可以对客户端进行身份认证并分发秘钥,因此多个 mon 节点就不存在单点
故障和认证性能瓶颈。
mon 节点会返回用于身份认证的数据结构,其中包含获取 ceph 服务时用到的 session key,
session key 通 过 客 户 端 秘 钥 进 行 加 密 , 秘 钥 是 在 客 户 端 提 前 配 置 好 的 ,
/etc/ceph/ceph.client.admin.keyring。
客户端使用 session key 向 mon 请求所需要的服务,mon 向客户端提供一个 tiket,用于
向实际处理数据的 OSD 等服务验证客户端身份,MON 和 OSD 共享同一个 secret,因此
OSD 会信任所有 MON 发放的 tiket。(tiket存在有效期)
注意:
cephx身份验证功能仅限制在ceph的各组件之间,不能扩展到其他非ceph组件,ceph只负责认证授权,不能解决数据传输加密的问题
2、访问流程
无论ceph客户端是那种类型,例如块设备、对象存储、文件系统,ceph都会在存储中奖所有数据存储为对象:
ceph用户需要拥有存储池访问权限,才能读取和写入数据
ceph用户必须拥有执行权限才能使用ceph的管理命令
3、ceph用户
用户是指个人(ceph管理者)或系统参与者(MON/OSD/MDS)
通过创建用户,可以控制用户或哪个参与者能够访问ceph存储集群、以及可访问的存储池及存储中的数据。
ceph支持多种类型的用户,但可管理的用户都属于client类型
区分用户类型的原因在于,MON、OSD、MDS等系统组件特使用cephx协议,但是他们为非客户端。
通过点号来分割用户类型和用户名,格式为user.type 例如:client.admin
cephadmin@ceph-mon1:/etc/ceph$ cat ceph.client.admin.keyring
[client.admin]
key = AQBqc6ZkIP0/BBAArwh+Kk3ynP/KDtHU6KL5dg==
caps mds = "allow *"
caps mgr = "allow *"
caps mon = "allow *"
caps osd = "allow *"
4、管理ceph用户
用户管理功能可让 Ceph 集群管理员能够直接在 Ceph 集群中创建、更新和删除用户。
在 Ceph 集群中创建或删除用户时,可能需要将密钥分发到客户端,以便将密钥添加到密
钥环文件中/etc/ceph/ceph.client.admin.keyring,此文件中可以包含一个或者多个用户认
证信息,凡是拥有此文件的节点,将具备访问 ceph 的权限,而且可以使用其中任何一个账
户的权限,此文件类似于 linux 系统的中的/etc/passwd 文件。
4.1 查看集群的用户列表
cephadmin@ceph-mon1:/etc/ceph$ ceph auth list
4.2 列出指定用户的详细信息
cephadmin@ceph-mon1:/etc/ceph$ ceph auth get osd.1
[osd.1]
key = AQCfeKZk1lB5FRAAc80u9CRs/lx3Bnoq54pJrQ==
caps mgr = "allow profile osd"
caps mon = "allow profile osd"
caps osd = "allow *"
exported keyring for osd.1
4.3 添加用户并赋权
cephadmin@ceph-mon1:~$ ceph auth add client.qiang mon "allow r" osd "allow rwx pool=mypool"
#验证用户
cephadmin@ceph-mon1:/etc/ceph$ ceph auth get client.qiang
[client.qiang]
key = AQCOGalksy8EDRAA3B+EFlRa//sUou4pSSkCcg==
caps mon = "allow r"
caps osd = "allow rwx pool=mypool"
exported keyring for client.qiang
#创建新用户并返回包含用户名和密钥的密钥文
cephadmin@ceph-mon1:~$ ceph auth get-or-create client.weng mon "allow r" osd "allow rwx pool=mypool"
#把返回的用户名和密钥的密钥文输出保存到一个文件中
cephadmin@ceph-mon1:~$ ceph auth get-or-create client.weng mon "allow r" osd "allow rwx pool=mypool" -o passwd.txt
或者
cephadmin@ceph-mon1:~$ ceph auth get-or-create client.weng mon "allow r" osd "allow rwx pool=mypool" > passwd.txt
12、修改用户的权限
cephadmin@ceph-mon1:~$ ceph auth caps client.weng mon "allow rw" osd "allow r pool=mypool"
13、删除用户
cephadmin@ceph-mon1:~$ ceph auth del client.weng
5、ceph授权和使能
ceph基于使能/能力(简称:caps)来描述用户可针对MON/OSD或MDS使用的授权范围级别。
能力一览表:
- r:向用户授予读取权限。访问监视器(mon)以检索 CRUSH 运行图时需具有此能力。
- w:向用户授予针对对象的写入权限。
- x:授予用户调用类方法(包括读取和写入)的能力,以及在监视器中执行 auth 操作的能
力。 - *:授予用户对特定守护进程/存储池的读取、写入和执行权限,以及执行管理命令的能力
- profile osd:授予用户以某个 OSD 身份连接到其他 OSD 或监视器的权限。授予 OSD 权
限,使 OSD 能够处理复制检测信号流量和状态报告(获取 OSD 的状态信息)。 - profile mds:授予用户以某个 MDS 身份连接到其他 MDS 或监视器的权限。
- profile bootstrap-osd:授予用户引导 OSD 的权限(初始化OSD并将OSD加入ceph集群),
授权给部署工具,使其在引导 OSD 时有权添加密钥。 - profile bootstrap-mds:授予用户引导元数据服务器的权限,授权部署工具权限,使其在引
导元数据服务器时有权添加密钥
MON 能力:
包括r/w/x和allow profile cap(ceph的运行图)
例如:
mon 'allow rwx'
mon 'allow profile osd'
OSD 能力:
包括 r、w、x、class-read、class-write(类读取))和 profile osd(类写入),另外 OSD 能力
还允许进行存储池和名称空间设置。
osd 'allow capability' [pool=poolname] [namespace=namespace-name]
MDS 能力:
只需要 allow 或空都表示允许。
mds 'allow'
还允许进行存储池和名称空间设置。
osd ‘allow capability’ [pool=poolname] [namespace=namespace-name]
**MDS 能力:**
```bash
只需要 allow 或空都表示允许。
mds 'allow'