文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247485272&idx=1&sn=4b27c357411be40cf901c431010aeac2&chksm=e9fdd2acde8a5bbaf8950bd5eacc1b6444c8ed7269b3932fcbaf244ee1718f022f552303cdf3&scene=178&cur_album_id=1600845417376776197#rd

Ceph 认证概念及原理

官方地址:http://docs.ceph.org.cn/man/8/ceph-authtool/

Mon 进程还需要负责另外的一个功能:认证;

包括Ceph 客户端到Ceph 集群数据,是非常重要的,我们不允许非授权访问,任何客户端,接入Rados Cluster 存储池之前 ,都需要提供用户名和密码进行认证;Mon 还负责维护整个集群的用户名和密码等;

各个组件如OSD 连接到 ceph mon ,其实也需要认证,认证使用的协议叫CephX,Ceph mon 负责维护认证信息并进行认证;任何组件间进行访问,都需要进行认证,所以如果客户端量很大的话,mon有可能成为瓶径,这也是mon多个的原因,由于mon 本身是无状态的,所以在认证的时候 ,每个节点都可以进行认证;

CephX 认证机制

Ceph 使用CephX协议对客户端进行身份认证,集群中每一个 Monitor 节点都可以接受客户端请求,并对客户端进行身份验证,所以不存在单点故障和性能瓶颈;CephX 仅用于 Ceph 集群中的各组件,而不能用于非 Ceph 组件,它并不解决数据传输加密问题,但也可以提高访问控制安全性问题。

CephX认证授权流程

Ceph 客户端与 Mon 之间在创建时,存在一对域共享密钥;

  1. 客户端向 Monitor 发出请求时,Monitor 会返回用于验证用户身份的数据结构,其中包含获取 Ceph 服务时用到的临时 Session key,这个是加密的;

  2. 客户端拿到这个临时加密的 Session key后,客户端通过密钥进行解密 Seesion key;(其实这里双方提前有一个域共享密钥,只有有了它之后,才可以对临时 Session key 进行解密)

  3. 然后客户端使用解密的 Session key 向 mon 请求所需要的服务,比如OSD,然后 mon 给出一个令牌 ticket ,并且 mon 还需要检查这个 Session key 的合法性;并且 mon 提供一个 ticket需要使用Session key 对ticket进行对称加密,然后发送给客户端,客户端也具有这个Session key,所以他可以解密出ticket;

  4. 客户端然后通过tocket 去访问对应的服务,这里以OSD为例,去访问OSD服务;

注意session key与 ticket 都会有过期时间的,就算用户拿到了 session key与ticket,过一段时间后就失效了,这里大家可以看到,客户端与ceph 组件服务并没有一直使用域共享密钥进行通信;域共享密钥,只有在客户端与 Monitor 在共享 Session key的时候使用到;我们还可以发现域共享密钥并没有在互联网上面进行传输;

CephX 身份验证功能仅限制Ceph的各组件之间,它不能扩展到其它非Ceph组件,它并不解决数据传输加密的问题;

用户

用户通常指定个人或某个应用,个人就是指现实中的人,比如管理员,而应用就是指客户端或Ceph集群中的某个组件,通过用户可以控制谁可以如何访问Ceph集群中的哪块数据。Ceph支持多种类型的用户,但可管理的用户都属于Client类型;

区分用户类型的原因在于,Mon、OSD和MDS等系统组件也使用cephX协议,但它们非为客户端,通过点号来分隔用户类型和用户名,格式为TYPE.ID, 如:Client.admin。

授权和使能

Ceph 基于“使能(caps)”来描述用户可针对Mon、OSD或MDS使用的权限范围或级别;

通用格式:daemon-type 'allow caps' [....]

Mon 使能,包括r,w,x和allow profile cap,例如:mon 'allow rwx',或者 mon 'allow profile osd' 等;

OSD 使能,包括r、w、 x、class-read、class-write或profile osd ,此外,OSD使能还允许进行存储池和名称空间设备;

MDS使能,只需要allow,或留空;

allow:对mds表示rw的意思,其它的表示“允许”;

r:读取;

w:写入;

x:同时拥有读取和写入,相当于可以调用类方法,并且可以在monitor上面执行auth操作;

class-read:可以读取类方法,x的子集;

class-wirte:可以调用类方法,x的子集;

*:这个比较特殊,代表指定对象的所有权限;

profile osd表示授予用户以某个osd身份连接到其它OSD或者Monitor的权限,授予OSD权限,使OSD能够处理复制检测信号流量和状态报告;

profile mds 授予用户以某个MDS身份连接到其他MDS或监视器的权限;

profile bootstrap-osd 表示授予用户引导OSD的权限,授权给部署工具,使其在引导OSD时有权添加密钥;

profile bootstrap-mds 授予用户引导元数据服务器的权限,授权给部署工具,使其在引导元数据服务器时有权添加密钥;

Ceph 权限实践

用户管理

Ceph 集群管理员能够直接在 Ceph 集群中创建、更新和删除用户、创建用户时,可能需要将密钥分发到客户端,以便将密钥添加到密钥环;

列出用户:ceph auth list 列出所有密钥环中的用户信息

[root@ceph-node01 ~]# ceph auth list

mds.ceph-node01
key: AQAONJBf5MqMHRAA25uTtY1wEKJfLifU1iAxTg==
caps: [mds] allow
caps: [mon] allow profile mds
caps: [osd] allow rwx
mds.ceph-node02
key: AQAaNJBfB1iSFhAAmJTccxnngl403EA+WUfTJA==
caps: [mds] allow
caps: [mon] allow profile mds
caps: [osd] allow rwx
mds.ceph-node03
key: AQAbNJBfU2NKHRAAnFMAnIwX4WbvekrYYpB1Tg==
caps: [mds] allow
caps: [mon] allow profile mds
... installed auth entries: [root@ceph-node01 ~]#

用户标识:Type.ID,因此,mds.ceph-node01表示mds类型的用户,用户ID为ceph-node01

检索特定用户:ceph auth get mds.ceph-node01。

[root@ceph-node01 ~]# ceph auth get mgr.ceph-node01
[mgr.ceph-node01]
key = AQBs8TJiq5rkAxAAGBfKoIO9VSFBeFxa9D0KbQ==
caps mds = "allow *"
caps mon = "allow profile mgr"
caps osd = "allow *"
exported keyring for mgr.ceph-node01

添加用户:ceph auth add

[root@ceph-node01 ~]# ceph auth add client.testuser mon 'allow r' osd 'allow rw pool=rbdpool'
added key for client.testuser
[root@ceph-node01 ~]# ceph auth get client.testuser
exported keyring for client.testuser
[client.testuser]
key = AQCgjbJfBQ3MDRAAHLxRUNjMIcLGWut58xt+1g==
caps mon = "allow r"
caps osd = "allow rw pool=rbdpool"
[root@ceph-node01 ~]#

ceph auth add:,它能够创建用户、生成密钥并添加指定的 caps 使能;

ceph auth get-or-create:简便方法,创建用户并返回密钥文件格式的密钥信息,或者在用户存 在时返回用户名及密钥文件格式的密钥信息;

ceph auth get-or-create-key:简便方法,创建用户并返回密钥信息,或者在用户存在时返回密钥信息;

[root@ceph-node01 ceph-deploy]# ceph auth get-or-create client.kube mon 'allow r' osd 'allow * pool=kube'
[client.kube]
key = AQAIkbJfsZ+pBBAA2a19ZBFQ7cYEKGWZGl+C/w==
[root@ceph-node01 ceph-deploy]# ceph auth get client.kube
exported keyring for client.kube
[client.kube]
key = AQAIkbJfsZ+pBBAA2a19ZBFQ7cYEKGWZGl+C/w==
caps mon = "allow r"
caps osd = "allow * pool=kube"
[root@ceph-node01 ceph-deploy]#

修改用户使能

注意它会覆盖用户现有的caps,可以先查看下用户caps,然后再进行设置;

[root@ceph-node01 ~]# ceph auth caps client.testuser mon 'allow rwx' osd "allow rw pool=rbdpool"
updated caps for client.testuser
[root@ceph-node01 ~]# ceph auth get client.testuser
exported keyring for client.testuser
[client.testuser]
key = AQCgjbJfBQ3MDRAAHLxRUNjMIcLGWut58xt+1g==
caps mon = "allow rwx"
caps osd = "allow rw pool=rbdpool"
[root@ceph-node01 ~]#

删除用户:ceph auth del TYPE.ID

[root@ceph-node01 ~]# ceph auth del client.testuser
updated
[root@ceph-node01 ~]# ceph auth get client.testuser
Error ENOENT: failed to find client.testuser in keyring
[root@ceph-node01 ~]#

导入用户:ceph auth import 密钥环文件

密钥环

密钥环是一个集合,它包括存储密钥,密码,key,证书等,并将把其提供给应用程序的组件集合,密钥环文件存储一个或多个Ceph身份验证密钥以及用户使能,每个键都与一个实体名称相关联,形式为{client,mon,mds,osd}.ID,并且 Ceph 也提供了一个非常底层的命令工具集:ceph-authtool,它可以创建、查看和修改密钥环文件;

访问Ceph 集群时,客户端会于本地查找密钥环,默认情况下,Ceph 会使用以下四个密钥环名称预设密钥环;

/etc/ceph/cluster-name.user-name.keyring:保存单个用户的keyring
/etc/ceph/cluster.keyring:保存多个用户的keyring
/etc/ceph/keyring
/etc/ceph/keyring.bin

将用户添加至密钥环

[root@ceph-node01 ceph-deploy]# ceph auth get client.kube -o ./ceph.client.kube.keyring
exported keyring for client.kube
[root@ceph-node01 ceph-deploy]# ls -l ceph.client.kube.keyring
-rw-r--r-- 1 root root 116 11月 16 09:49 ceph.client.kube.keyring
[root@ceph-node01 ceph-deploy]# cat ceph.client.kube.keyring
[client.kube]
key = AQAIkbJfsZ+pBBAA2a19ZBFQ7cYEKGWZGl+C/w==
caps mon = "allow r"
caps osd = "allow * pool=kube"
[root@ceph-node01 ceph-deploy]#

创建keyring密钥环

[root@ceph-node01 ceph-deploy]# ceph-authtool --create-keyring cluster.keyring
creating cluster.keyring
[root@ceph-node01 ceph-deploy]# cat cluster.keyring
[root@ceph-node01 ceph-deploy]# ceph-authtool cluster.keyring --import-keyring ./ceph.client.kube.keyring
importing contents of ./ceph.client.kube.keyring into cluster.keyring
[root@ceph-node01 ceph-deploy]# cat cluster.keyring
[client.kube]
key = AQAIkbJfsZ+pBBAA2a19ZBFQ7cYEKGWZGl+C/w==
caps mon = "allow r"
caps osd = "allow * pool=kube"
[root@ceph-node01 ceph-deploy]#

把已有密钥文件合并到一个统一密钥环

[root@ceph-node01 ceph-deploy]# ceph-authtool cluster.keyring --import-keyring ./ceph.client.admin.keyring
importing contents of ./ceph.client.admin.keyring into cluster.keyring
[root@ceph-node01 ceph-deploy]# cat cluster.keyring
[client.admin]
key = AQA2M3NfHRWaLhAAcyHxQ5NSG01/+Zlz4yH9pQ==
caps mds = "allow *"
caps mgr = "allow *"
caps mon = "allow *"
caps osd = "allow *"
[client.kube]
key = AQAIkbJfsZ+pBBAA2a19ZBFQ7cYEKGWZGl+C/w==
caps mon = "allow r"
caps osd = "allow * pool=kube"
[root@ceph-node01 ceph-deploy]#

官方查看密钥环文件

[root@ceph-node01 ceph-deploy]# ceph-authtool -l cluster.keyring
[client.admin]
key = AQA2M3NfHRWaLhAAcyHxQ5NSG01/+Zlz4yH9pQ==
caps mds = "allow *"
caps mgr = "allow *"
caps mon = "allow *"
caps osd = "allow *"
[client.kube]
key = AQAIkbJfsZ+pBBAA2a19ZBFQ7cYEKGWZGl+C/w==
caps mon = "allow r"
caps osd = "allow * pool=kube"
[root@ceph-node01 ceph-deploy]#

Ceph 认证贯穿 Ceph 所有组件,并且非常重要,主要包括用户创建的用户定格规则、使能、密钥环等。

5.Ceph 基础篇 - 认证的更多相关文章

  1. 6.Ceph 基础篇 - CephFS 文件系统

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247485294&idx=1&sn=e9039504 ...

  2. 3.Ceph 基础篇 - RBD 块存储使用

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247485253&idx=1&sn=24d9b06a ...

  3. 8. Ceph 基础篇 - 运维常用操作

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247485300&idx=1&sn=aacff9f7 ...

  4. 4.Ceph 基础篇 - 对象存储使用

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247485256&idx=1&sn=39e07215 ...

  5. 2.Ceph 基础篇 - 集群部署及故障排查

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247485243&idx=1&sn=e425c31a ...

  6. 1.Ceph 基础篇 - 存储基础及架构介绍

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247485232&idx=1&sn=ff0e93b9 ...

  7. 10.Ceph 基础篇 - RGW 高可用

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247485316&idx=1&sn=d3a6be41 ...

  8. 9. Ceph 基础篇 - Crush Maps

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247485302&idx=1&sn=00a3a204 ...

  9. Jenkins: 基础篇(环境配置)

    自动化领域比较有影响力的开源框架jenkins,确实比较强大,易用.很多公司将其用来做持续即成CI(continuous integration).为了拓展和强化自己的软件设计生态系统,也将很久前使用 ...

随机推荐

  1. 本机通过IP地址连接Ubuntu18.04+ on Vmware

    一.Vmware-顶部菜单栏-编辑-虚拟网络编辑器: 点一下 添加一个NAT模式的网络:要记住名称,比如这里我的是VMnet8 子网ip可以自己写,建议全程就都按我这个写,后续方便校对. 点一下 NA ...

  2. NFS介绍与搭建

    一.NFS的介绍 1.1.什么是NFS NFS 是Network File System的缩写,即网络文件系统.一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布. NFS在文件传 ...

  3. MySQL--用通配符进行过滤(LIKE操作符)

    1.LIKE操作符 怎样搜索产品名中包含文本anvil的所有产品?用简单的比较操作符肯定不行,必须使用通配符.利用通配符可创建比较特定数据的搜索模式.在这个例子中,如果你想找出名称包含anvil的所有 ...

  4. SpringBoot配置文件读取过程分析

    整体流程分析 SpringBoot的配置文件有两种 ,一种是 properties文件,一种是yml文件.在SpringBoot启动过程中会对这些文件进行解析加载.在SpringBoot启动的过程中, ...

  5. 音响音箱/恒温壶/电量显示/电子数字时钟等LED数码管显示驱动IC-VK1640B 8段12位/12段8位显示

    市面上最常用的数码管为七段/八段显示,八段数码管比七段数码管多一个发光二极管单元(比七段数码管多一个点),又按能显示多少个"8"可分为1位.2位.4位等等.数码管又分为共阳极驱动/ ...

  6. StringBuilder的原理

    StringBuilder类 字符串拼接问题 由于String类的对象内容不可改变,所以每当进行字符串拼接的时候,总是会在内存中创建一个新的对象.例如: class Test{ public stat ...

  7. SQL审核工具自荐Owls

    关键词: sql审批.sql检测.sql执行.备份 概要 这里主要是向大家推荐一款sql检测.审批工具Owls,用于自动检测.审批sql的执行,还有其他的审批.备份.查询等功能.以提高sql的规范化, ...

  8. SpringBoot集成文件 - 如何使用POI导出Word文档?

    前文我们介绍了通过Apache POI导出excel,而Apache POI包含是操作Office Open XML(OOXML)标准和微软的OLE 2复合文档格式(OLE2)的Java API.所以 ...

  9. HTML基础标签学习

    HTML基础学习 前言 HTML基础学习会由HTML基础标签学习.HTML表单学习和一张思维导图总结HTML基础三篇文章构成,文章中博主会提取出重点常用的知识和经常出现的bug,提高学习的效率,后续会 ...

  10. MyBatis 03 缓存

    简介 什么是缓存 存在内存中的临时数据. 将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库数据文件)查询,转从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题 ...