Ceph 使用 cephx 协议对客户端进行身份认证。
cephx 用于对 ceph 保存的数据进行认证访问和授权,用于对访问 ceph 的请求进行认证和授 权检测,与 mon 通信的请求都要经过 ceph 认证通过,但是也可以在 mon 节点关闭 cephx 认证,但是关闭认证之后任何访问都将被允许,因此无法保证数据的安全性。

一、授权流程

每个 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 只负责认证授权,不能解决数据传输的加密问题

①客户端携带 /etc/ceph/ceph.client.admin.keyring 的 key 信息向 MON 节点请求认证,申请session key
②MON 节点生成 session key,并通过客户端提供的 key 加密 session key 发送给客户端
③客户端用 key 来解密获取 session key,利用session key向MON节点申请tiket
④MON 节点验证 session key 是否准确性,并且发放tiket
⑤使用tiket访问OSD
⑥OSD验证tiket有效性,并发送数据

二、访问流程

无论 ceph 客户端是哪种类型,例如块设备、对象存储、文件系统,ceph 都会在存储池中将所有数据存储为对象:
ceph 用户需要拥有存储池访问权限,才能读取和写入数据
ceph 用户必须拥有执行权限才能使用 ceph 的管理命令

三、Ceph 用户

用户是指个人(ceph 管理者)或系统参与者(MON/OSD/MDS)。
通过创建用户,可以控制用户或哪个参与者能够访问 ceph 存储集群、以及可访问的存储池及存储池中的数据。
ceph 支持多种类型的用户,但可管理的用户都属于 client 类型。
区分用户类型的原因在于,MON/OSD/MDS 等系统组件特使用 cephx 协议,但是它们为非客户端。
通过点号来分割用户类型和用户名,格式为 TYPE.ID,例如 client.admin。

[root@ceph-node2 ~]# cat /etc/ceph/ceph.client.admin.keyring
[client.admin] key = AQAGDKJfQk/dAxAA3Y+9xoE/p8in6QjoHeXmeg== caps mds = "allow *" caps mgr = "allow *" caps mon = "allow *" caps osd = "allow *"

四、Ceph 授权和使能

ceph 基于使能/能力(Capabilities,简称 caps )来描述用户可针对 MON/OSD 或 MDS 使用的授 权范围或级别。
通用的语法格式:daemon-type ‘allow caps’ […]

能力一览表:

r:向用户授予读取权限。访问监视器以检索 CRUSH 运行图时需具有此能力。
w:向用户授予针对对象的写入权限。
x:授予用户调用类方法(包括读取和写入)的能力,以及在监视器中执行 auth 操作的能力。
class-read:授予用户调用类读取方法的能力,属于是 x 能力的子集。
class-write:授予用户调用类写入方法的能力,属于是 x 能力的子集。
*:授予用户对特定守护进程/存储池的读取、写入和执行权限,以及执行管理命令的能力。
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'

五、Ceph 用户管理

用户管理功能可让 Ceph 集群管理员能够直接在 Ceph 集群中创建、更新和删除用户。
在 Ceph 集群中创建或删除用户时,可能需要将密钥分发到客户端,以便将密钥添加到密 钥环文件中/etc/ceph/ceph.client.admin.keyring,此文件中可以包含一个或者多个用户认证信 息,凡是拥有此文件的节点,将具备访问 ceph 的权限,而且可以使用其中任何一个账户的 权限,此文件类似于 linux 系统的中的 /etc/passwd 文件。

5.1 列出所有用户

[ceph@ceph-deploy ceph-cluster]$ ceph auth list
installed auth entries:
mds.ceph-mgr1 key: AQCOKqJfXRvWFhAAVCdkr5uQr+5tNjrIRcZhSQ== caps: [mds] allow caps: [mon] allow profile mds caps: [osd] allow rwxosd.0 key: AQAhE6Jf74HbEBAA/6PS57YKAyj9Uy8rNRb1BA== caps: [mgr] allow profile osd caps: [mon] allow profile osd caps: [osd] allow * osd.1 key: AQBOE6Jfb1C5FhAAI8h6P4Nmvp4aUsrbbhxO3A== caps: [mgr] allow profile osd caps: [mon] allow profile osd caps: [osd] allow * client.adminkey: AQAGDKJfQk/dAxAA3Y+9xoE/p8in6QjoHeXmeg== caps: [mds] allow * caps: [mgr] allow * caps: [mon] allow * caps: [osd] allow *

注意:TYPE.ID 表示法
针对用户采用 TYPE.ID 表示法,例如 osd.0 指定是 osd 类型切 ID 为 0 的用户(节点),client.admin 是 client 类型的用户,其 ID 为 admin,

另请注意,每个项包含一个 key: 值项,以及一个或多个 caps 项。
可以结合使用-o 文件名选项和 ceph auth list 将输出保存到某个文件。

[ceph@ceph-deploy ceph-cluster]$ ceph auth list -o 123.key

5.2 列出指定用户信息

[ceph@ceph-deploy ceph-cluster]$ ceph auth get osd.10
exported keyring for osd.10
[osd.10] key = AQCKF6JfLaEpBRAAbY/P+cHPFPUtnkzIjruyXw== caps mgr = "allow profile osd" caps mon = "allow profile osd" caps osd = "allow *" [ceph@ceph-deploy ceph-cluster]$ ceph auth get client.admin
exported keyring for client.admin
[client.admin] key = AQAGDKJfQk/dAxAA3Y+9xoE/p8in6QjoHeXmeg== caps mds = "allow *" caps mgr = "allow *" caps mon = "allow *" caps osd = "allow *"[ceph@ceph-deploy ceph-cluster]$ ceph auth get client.admin -o /tmp/ceph.client.admin.keyring    #将admin权限文件输出到/tmp/ceph.client.admin.keyring文件

只打印key,不打印caps能力

[ceph@ceph-deploy ceph-cluster]$ ceph auth print-key client.admin
AQAq4Q9hSYOwDBAAldD+GE0L9KtrVJ2SOW07qQ==

5.3 用户管理

添加一个用户会创建用户名 (TYPE.ID)、机密密钥,以及包含在命令中用于创建该用户的所有能力,用户可使用其密钥向 Ceph 存储集群进行身份验证。用户的能力授予该用户在 Ceph monitor (mon)、Ceph OSD (osd) 或 Ceph 元数据服务器 (mds) 上进行读取、写入或执行的能力,可以使用以下几个命令来添加用户

5.3.1 ceph auth add

添加用户的规范方法。它会创建用户、生成密钥,并添加所有指定的能力。

# 格式
auth add <entity> {<caps> [<caps>...]}#创建用户、生成密钥,并添加所有指定的能力
[ceph@ceph-deploy ceph-cluster]$ ceph auth add client.tom mon 'allow r' osd 'allow rwx pool=mypool' #验证 key
[ceph@ceph-deploy ceph-cluster]$ ceph auth get client.tom

5.3.2 ceph auth get-or-create

ceph auth get-or-create 此命令是创建用户较为常见的方式之一,因为它会返回包含用户名 (在方括号中)和密钥的密钥文件格式。
**如果该用户已存在,此命令只以密钥文件格式返回用户名和密钥。**您可以使用 -o 文件名选项将输出保存到某个文件。

# 创建用户
[ceph@ceph-deploy ceph-cluster]$ ceph auth get-or-create client.tom mon 'allow r' osd 'allow rwx pool=mypool'
[client.tom]key = AQCeBhlhAUswCxAA3KxQ/JiI1Z4z321tjmsd+w==# 验证用户
[ceph@ceph-deploy ceph-cluster]$ ceph auth get client.tom
exported keyring for client.tom
[client.tom]key = AQCeBhlhAUswCxAA3KxQ/JiI1Z4z321tjmsd+w==caps mon = "allow r"caps osd = "allow rwx pool=mypool"# 再次创建用户
[ceph@ceph-deploy ceph-cluster]$ ceph auth get-or-create client.tom mon 'allow r' osd 'allow rwx pool=mypool'
[client.tom]key = AQCeBhlhAUswCxAA3KxQ/JiI1Z4z321tjmsd+w==

5.3.3 ceph auth get-or-create-key

此命令是创建用户并仅返回用户密钥,对于只需要密钥的客户端(例如 libvirt),此命令非常有用。如果该用户已存在,此命令只返回密钥。您可以使用 -o 文件名选项将输出保存到某个文件。
创建客户端用户时,可以创建不具有能力的用户。不具有能力的用户可以进行身份验证,但不能执行其他操作,此类客户端无法从监视器检索集群地图,但是,如果希望稍后再添加能力,可以使用 ceph auth caps 命令创建一个不具有能力的用户。
典型的用户至少对 Ceph monitor 具有读取功能,并对 Ceph OSD 具有读取和写入功能。此外,用户的 OSD 权限通常限制为只能访问特定的存储池。

# 用户有 key 就显示没有就创建
[ceph@ceph-deploy ceph-cluster]$ ceph auth get-or-create-key client.tom mon 'allow r' osd 'allow rwx pool=mypool

5.3.4 ceph auth print-key

只获取单个指定用户的 key 信息

[ceph@ceph-deploy ceph-cluster]$ ceph auth print-key client.tom
AQCeBhlhAUswCxAA3KxQ/JiI1Z4z321tjmsd+w==

5.3.5 修改用户能力

使用 ceph auth caps 命令可以指定用户以及更改该用户的能力,设置新能力会完全覆盖当前的能力,因此要加上之前的用户已经拥有的能和新的能力,如果看当前能力,可以运行 ceph auth get USERTYPE.USERID,如果要添加能力,使用以下格式时还需要指定现有能力

# 查看用户当前权限
[ceph@ceph-deploy ceph-cluster]$ ceph auth get client.tom
exported keyring for client.tom
[client.tom]key = AQCeBhlhAUswCxAA3KxQ/JiI1Z4z321tjmsd+w==caps mon = "allow r"caps osd = "allow rwx pool=mypool" # 修改用户权限
[ceph@ceph-deploy ceph-cluster]$ ceph auth caps client.tom mon 'allow r' osd 'allow rw pool=mypool'
updated caps for client.tom# 再次验证权限
[ceph@ceph-deploy ceph-cluster]$ ceph auth get client.tom
exported keyring for client.tom
[client.tom]key = AQCeBhlhAUswCxAA3KxQ/JiI1Z4z321tjmsd+w==caps mon = "allow r"caps osd = "allow rw pool=mypool"

5.6.6 删除用户

要删除用户使用 ceph auth del TYPE.ID,其中 TYPE 是 client、osd、mon 或 mds 之一,ID 是用 户名或守护进程的 ID。

[ceph@ceph-deploy ceph-cluster]$ ceph auth del client.tom
updated

5.6.7 导入用户

要导入一个或多个用户,请使用 ceph auth import 并指定密钥环

[ceph@ceph-deploy ceph-cluster]$ ceph auth import -i /etc/ceph/ceph.keyring

六、秘钥环管理

6.1 什么是秘钥环?

ceph 的秘钥环是一个保存了 secrets、password、keys、certificates 并且能够让客户端通认证访问 ceph 的 keyring file(集合文件),一个 keyring file 可以保存一个或者多个认证文件及认证信息,每一个 key 都有一个实体名称加权限,类型为

{client、mon、mds、osd}.name

当客户端访问 ceph 集群时,ceph 会使用以下四个密钥环文件预设置密钥环设置

/etc/ceph/<$cluster name>.<user $type>.<user $id>.keyring  #保存单个用户的 keyring
/etc/ceph/cluster.keyring                                  #保存多个用户的 keyring
/etc/ceph/keyring                                          #未定义集群名称的多个用户的 keyring
/etc/ceph/keyring.bin                                      #编译后的二进制文件

6.2 创建秘钥环文件

使用 ceph auth add 等命令添加的用户还需要额外使用 ceph-authtool 命令为期创建用户秘钥环。
ceph 客户端使用 keyring 文件查找用户并检索秘钥。

# 创建秒命令格式
ceph-authtool --create-keyring FILE

6.3 导出用户 keyring 过程

# 创建用户
[ceph@ceph-deploy ceph-cluster]$ ceph auth get-or-create client.tom mon 'allow r' osd 'allow * pool=mypool'
[client.tom]key = AQAXEBlhFYL9KRAAU5IjAMmqSKEje8ivBNK1AQ==# 验证用户
[ceph@ceph-deploy ceph-cluster]$ ceph auth get client.tom
exported keyring for client.tom
[client.tom]key = AQAXEBlhFYL9KRAAU5IjAMmqSKEje8ivBNK1AQ==caps mon = "allow r"caps osd = "allow * pool=mypool"# 创建 keyring 文件
[ceph@ceph-deploy ceph-cluster]$ ceph-authtool --create-keyring ceph.client.tom.keyring
creating ceph.client.tom.keyring# 验证 keyring 文件
[ceph@ceph-deploy ceph-cluster]$ file ceph.client.tom.keyring    #是个空文件
ceph.client.tom.keyring: empty# 导出 keyring 至指定文件
[ceph@ceph-deploy ceph-cluster]$ ceph auth get client.tom -o ceph.client.tom.keyring
exported keyring for client.tom# 验证指定用户的 keyring 文件
[ceph@ceph-deploy ceph-cluster]$ cat ceph.client.tom.keyring
[client.tom]key = AQAXEBlhFYL9KRAAU5IjAMmqSKEje8ivBNK1AQ==caps mon = "allow r"caps osd = "allow * pool=mypool"

创建包含单个用户的密钥环时,建议使用集群名称、用户类型和用户名,并将其保存在 /etc/ceph 目录中。例如为 client.tom 用户创建 ceph.client.tom.keyring。

6.4 将用户导入至秘钥环

# 创建 keyring 文件
ceph-authtool --create-keyring ceph.client.user.keyring# 把指定用户的 keyring 文件内容导入到 user 用户的 keyring 文件
ceph-authtool ./ceph.client.user.keyring --import-keyring ./ceph.client.admin.keyring# 验证 keyring 文件
[ceph@ceph-deploy ceph-cluster]$ ceph-authtool -l ./ceph.client.user.keyring# 导入其他用户的 keyring
[ceph@ceph-deploy ceph-cluster]$ ceph-authtool ./ceph.client.user.keyring --import-keyring ./ceph.client.user1.keyring# 再次验证 keyring 文件:
[ceph@ceph-deploy ceph-cluster]$ ceph-authtool -l ./ceph.client.user.keyring

备份key,以防丢失。

总结:这样一个权限已经适合一个用户对应一个业务

[client.user1] key = AQAUUchfjpMqGRAARV6h0ofdDEneuaRnxuHjoQ== caps mon = "allow r" caps osd = "allow * pool=mypool"

CephX 认证机制相关推荐

  1. Cephx认证及rbd的使用

    CephX 认证机制: Ceph 使用 cephx 协议对客户端进行身份认证 cephx 用于对 ceph 保存的数据进行认证访问和授权,用于对访问 ceph 的请求进行认证和授 权检测,与 mon ...

  2. jwt认证机制优势和原理_最详细的Spring Boot 使用JWT实现单点登录

    Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(S ...

  3. SSO 认证机制对比

    2019独角兽企业重金招聘Python工程师标准>>> SSO 认证机制对比 博客分类: 架构 几种常用的认证机制 HTTP Basic Auth HTTP Basic Auth简单 ...

  4. 常用的认证机制之session认证和token认证

    一.session认证 1.session认证的过程: 前端输入用户名和密码进行登录操作,后端拿到用户名和密码后,会把md5进行加密,加密之后,拿上加密后的密文到用户表中查找密文是否一致,判断用户是否 ...

  5. 基于JWT的Token认证机制实现

    一.基于JWT的Token认证机制实现 1.什么是JWT JSON Web Token(JWT)是一个非常轻巧的规范.这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息. 2.JWT组成 ...

  6. 深入详解windows安全认证机制ntlmKerberos

    0x01 为什么要理解windows 安全认证机制: 加深对后续各种漏洞利用的理解深度,还是那句话,要知其然,更要知其所以然,不废话,咱们直接开始 0x02 windows认证协议主要有以下两种: 基 ...

  7. (golang)HTTP基本认证机制及使用gocolly登录爬取

    内网有个网页用了HTTP基本认证机制,想用gocolly爬取,不知道怎么登录,只好研究HTTP基本认证机制 参考这里:https://www.jb51.net/article/89070.htm 下面 ...

  8. elasticsearch httpclient认证机制

    转载自http://www.cnblogs.com/youran-he/p/7562870.html 最近公司单位搬迁,所有的服务都停止了,我负责的elasticsearch不知道怎么回事,一直不能运 ...

  9. web安全认证机制知多少

    如今web服务随处可见,成千上万的web程序被部署到公网上供用户访问,有些系统只针对指定用户开放,属于安全级别较高的web应用,他们需要有一种认证机制以保护系统资源的安全,本文将探讨五种常用的认证机制 ...

最新文章

  1. 前端开发神器之ngrok
  2. 第十四周项目二-两个成员的类模版(1)
  3. 一个通用的计数限制解决方案
  4. linux在shell中获取时间
  5. vs 构建linux 项目,使用Linux上的Mono构建VS 2017 MSBuild csproj项目
  6. Unable to update index for central http://repo1.maven.org/maven2/
  7. 码农心目中的高富帅甲骨文公司在走下坡路
  8. android 创建文件夹,文件需要注意的格式
  9. .sql文件_优化体系--sql_trace+10046事件(上篇)
  10. Ubuntu16.04安装python3.6
  11. Excel 2016中的新增函数之SWITCH
  12. IEEE1588 ( PTP ) 协议简介
  13. ubuntu出现qt.qpa.plugin报错
  14. 【xctf之easyphp】
  15. php orm中关联查询,【整理】Laravel中Eloquent ORM 关联关系的操作
  16. 一文多发神器--ArtiPubOpenWrite
  17. Excel实现分时统计折线图
  18. Hexo系列(2) - NexT主题美化与博客功能增强
  19. SVA(立即断言、并发断言、触发判断)-概述
  20. Android Studio 扫描识别二维码(包含闪光灯和本地二维码)、生成二维码、生成带logo的二维码

热门文章

  1. 艾永亮:中国传统企业的“产品革命”
  2. 网络会议蓬勃发展:COVID-19对视频通话市场的影响
  3. java如何打开word文档_如何在Java中打开和操作Word文档/模板?
  4. css3发光字js特效代码
  5. 毕业设计 - 题目:基于深度学习卷积神经网络的花卉识别 - 深度学习 机器视觉
  6. 第6课 Altium Designer20(AD20)+VESC6.4实战教程:绘制原理图3(北冥有鱼)
  7. 基于软件定义无线电的实时频谱分析仪设备连接方法(一)简单2端口TCP/IP连接
  8. webstorm常用插件集合(2020)
  9. 半导体物理 2022.9.29
  10. Spark (一):Executor内存