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 验证流程)

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

(CephX 验证过程)

用户

用户通常指定个人或某个应用,个人就是指现实中的人,比如管理员,而应用就是指客户端或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 listinstalled auth entries:mds.ceph-node01  key: AQAONJBf5MqMHRAA25uTtY1wEKJfLifU1iAxTg==  caps: [mds] allow  caps: [mon] allow profile mds  caps: [osd] allow rwxmds.ceph-node02  key: AQAaNJBfB1iSFhAAmJTccxnngl403EA+WUfTJA==  caps: [mds] allow  caps: [mon] allow profile mds  caps: [osd] allow rwxmds.ceph-node03  key: AQAbNJBfU2NKHRAAnFMAnIwX4WbvekrYYpB1Tg==  caps: [mds] allow  caps: [mon] allow profile mds...[root@ceph-node01 ~]#

用户标识:Type.ID,因此,mds.ceph-node01表示mds类型的用户,用户ID为ceph-node01,检索特定用户:ceph auth get mds.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.testuserexported 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.kubeexported 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]#

修改用户使能

[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.testuserexported keyring for client.testuser[client.testuser]  key = AQCgjbJfBQ3MDRAAHLxRUNjMIcLGWut58xt+1g==  caps mon = "allow rwx"  caps osd = "allow rw pool=rbdpool"[root@ceph-node01 ~]#

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

删除用户:ceph auth del TYPE.ID

[root@ceph-node01 ~]# ceph auth del client.testuserupdated[root@ceph-node01 ~]# ceph auth get client.testuserError 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.keyringexported 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.keyringcreating cluster.keyring[root@ceph-node01 ceph-deploy]# cat cluster.keyring[root@ceph-node01 ceph-deploy]# ceph-authtool cluster.keyring --import-keyring ./ceph.client.kube.keyringimporting 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.keyringimporting 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 所有组件,并且非常重要,主要包括用户创建的用户定格规则、使能、密钥环等。

您的关注是我写作的动力

基础小知识

hping 命令使用小结

Linux 网卡 bonding 小知识

专辑分享

kubeadm使用外部etcd部署kubernetes v1.17.3 高可用集群

第一篇  使用 Prometheus 监控 Kubernetes 集群理论篇

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

ceph客户端使用_Ceph 基础篇 认证相关推荐

  1. 极光小课堂 | 极光推送之 Android 客户端使用指南——基础篇

    " 本文中涉及到的所有代码现已在 Github 上开源,地址:https://github.com/xuexiangjys/JPushSample" 01 前言 - 极光推送是国内 ...

  2. ceph客户端使用_ceph存储之ceph客户端

    CEPH客户端: 大多数Ceph用户不会直接往Ceph存储集群里存储对象,他们通常会选择Ceph块设备.Ceph文件系统.Ceph对象存储之中的一个或多个: 块设备: 要实践本手册,你必须先完成存储集 ...

  3. ceph客户端使用_CEPH应用

    CEPH应用 1.块存储:使用最多的一种方式 2.cephFS:了解,不建议在生产环境中使用,因为还不成熟 3.对象存储:了解,使用亚马逊的s3 使用RBD(Rados块设备) 1.查看存储池 [ro ...

  4. Puppet基础篇5-如何建立master和agent之间的认证关系

    Puppet基础篇5-如何建立master和agent之间的认证关系 零基础学习Puppet自动化配置管理系列文档 Puppet注册方式基本上有三种:自动注册.手动注册和预签名注册,在<Pupp ...

  5. 【WLAN从入门到精通-基础篇】第11期——WLAN接入认证-Portal

    [转自]http://support.huawei.com/huaweiconnect/enterprise/thread-149867.html 1.1 无处不在的Portal认证 场景一:北京国际 ...

  6. 【基础篇】详解Zookeeper客户端Curator

    一.前言 Zookeeper被广泛应用于分布式环境下各种应用程序的协调,而Curator无疑是Zookeeper客户端中的瑞士军刀,解决了很多Zookeeper客户端非常底层的细节开发工作,包括连接重 ...

  7. 鸟哥的Linux私房菜(基础篇)- 第十八章、认识系统服务 (daemons)

    第十八章.认识系统服务 (daemons) 最近升级日期:2009/09/14 在 Unix-Like 的系统中,你会常常听到 daemon 这个字眼!那么什么是传说中的 daemon呢?这些 dae ...

  8. Nginx实战基础篇六 通过源码包编译安装部署LNMP搭建Discuz论坛

    Nginx实战基础篇六 通过源码包编译安装部署LNMP搭建Discuz论坛 版权声明: 本文遵循"署名非商业性使用相同方式共享 2.5 中国大陆"协议 您可以自由复制.发行.展览. ...

  9. 谷粒商城分布式基础篇1-个人版

    基础篇 1 项目简介 1.1 项目背景 1.2 电商模式 市面上有5种常见的电商模式 B2B.B2C.C2B.C2C.O2O 1.2.1 B2B 模式 B2B(Business to Business ...

  10. Ansible自动部署(基础篇)

    Ansible自动部署(基础篇) 一.ansible简介 1.ansible介 Ansible这个名字来源于科幻小说,是一种超光速通讯设备.在Linux中,ansible是新出现的自动化运维工具,基于 ...

最新文章

  1. LabVIEW轮廓分析与比较(基础篇—8)
  2. Nginx 外的另一选择,轻量级开源 Web 服务器 Tengine 发布新版本
  3. Spring官网改版后下载方式
  4. 180217_JAVA学习_TreeSet中存放含多个String的类并设置排序规则
  5. [转]TensorFlow如何进行时序预测
  6. 11.python并发入门(part4 死锁与递归锁)
  7. 前后端交互中,返回前端的自定义响应数据结构
  8. css 计算属性的应用_如何使用一点CSS Grid魔术设计计算器应用
  9. 如何击败腾讯_击败股市
  10. libuv tcp client
  11. 图像算法六:【彩色图像处理】彩色模型、彩图处理
  12. (源码)智能优化算法—藤壶交配优化算法(Barnacles Mating Optimizer,BMO)
  13. 二分法和牛顿迭代实现开根号函数:OC的实现
  14. 安装PSPNet 遇到的问题
  15. AH3050_12V升18V2A 同步升压芯片
  16. Ubuntu16.04.2中安装minidwep
  17. 一个小巧好用的Url编解码工具
  18. R语言中,如何设置当前工作文件路径?
  19. Exp4 恶意代码分析 20154301仉鑫烨
  20. 从《长安十二时辰》看企业中台战略

热门文章

  1. Js+fromdata
  2. fence_ilo can't connect by ssl, since CentOS 5.8 lack pyOpenSSL
  3. 体验vSphere 6之2-vCenter 6
  4. Android操作联系人
  5. 巧用clear:both
  6. Java中this、super的用法(2)
  7. [转载]Windows Vista user profile service服务未能登录
  8. Linux执行composer出现killed问题解决
  9. 7x android 8,内测开启 华为荣耀畅玩7X升级Android 8.0
  10. 查看docker镜像内部端口号_DOCKER 常用命令