Ceph:关于 Ceph 用户认证授权管理的一些笔记

这篇具有很好参考价值的文章主要介绍了Ceph:关于 Ceph 用户认证授权管理的一些笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

写在前面


  • 准备考试,整理 Ceph 相关笔记
  • 博文内容涉及, Ceph 用户管理,认证管理,权限管理 以及相关 Demo
  • 理解不足小伙伴帮忙指正

对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对大众理想的懦弱回归,是随波逐流,是对内心的恐惧 ——赫尔曼·黑塞《德米安》


管理Ceph用户认证授权

简单介绍

用户身份验证

Ceph 使用 cephx 协议对集群中客户端、应用程序和守护进程之间的通信进行授权。cephx协议基于共享密钥

在 Ceph 的安装过程默认启用 cephx,因此集群需要对所有客户端应用程序进行用户身份验证授权,Ceph使用用户帐户有以下几个目的:

  1. 用于 Ceph 守护进程之间的内部通信,Ceph 守护进程使用的 帐户名称 与其关联的守护进程 osd.1mgr.serverc 相匹配,并且在安装过程中创建。下面是一些 Demo
[root@serverc ~]# ceph auth  ls
osd.0
        key: AQAG9ZpkY8o4MBAArdipzo8A9Yg3dy/fTcV7Yw==
        caps: [mgr] allow profile osd
        caps: [mon] allow profile osd
        caps: [osd] allow *
osd.1
        key: AQAG9ZpkX0/EOhAALauZTeHY/ojBuMGdspJh4A==
        caps: [mgr] allow profile osd
        caps: [mon] allow profile osd
        caps: [osd] allow *
......
mgr.serverd.nlmuvp
        key: AQAx9Zpk1DpCDRAAaGWCs3xKEXWkqemXGI7HAw==
        caps: [mds] allow *
        caps: [mon] profile mgr
        caps: [osd] allow *
mgr.servere.muoasq
        key: AQA89Zpki0tIABAAMUGi7GitoTqjYBtTUPmaWw==
        caps: [mds] allow *
        caps: [mon] profile mgr
        caps: [osd] allow *
..........    
  1. 对于通过 librados 库访问集群的客户机应用程序,比如 rbd,radosgw-admin 客户端等,使用 librados客户端应用程序所使用的帐户具有client.名称前缀。对于Ceph对象网关,安装会创建一个专用的client.rgw.hostname用户帐号,在 librados 之上创建定制软件的开发人员应该创建具有适当功能的专用帐户
client.rgw.realm.zone.serverc.bdiyfs
        key: AQBj9ZpkCDimLRAAnr2HTGH2wUFUsLfeag8lew==
        caps: [mgr] allow rw
        caps: [mon] allow *
        caps: [osd] allow rwx tag rgw *=*
client.rgw.realm.zone.serverd.gwezgs
        key: AQBn9Zpkajo3GxAAA8epFoWVLVlNAiuAaUqFgg==
        caps: [mgr] allow rw
        caps: [mon] allow *
        caps: [osd] allow rwx tag rgw *=*
  1. 为集群管理员 账号,管理员帐户名也具有client.前缀。在运行ceph、rados等命令时使用,安装程序创建超级用户帐户client.admin,具有允许帐户访问所有内容和修改集群配置的功能。Ceph 使用 client.admin 帐户用于运行管理命令,除非使用 --name--id 选项明确指定用户名
client.admin
        key: AQCv9Jpk9A0+GhAA5s66DQyZqVWHf3f3UioMMA==
        caps: [mds] allow *
        caps: [mgr] allow *
        caps: [mon] allow *
        caps: [osd] allow *

可以设置CEPH_ARGS环境变量来定义诸如集群名称用户ID等参数

[ceph: root@node /]# export CEPH_ARGS="--id cephuser" 

Ceph-aware 应用程序的最终用户没有Ceph集群上的帐户。相反,他们访问应用程序,然后应用程序代表他们访问Ceph。从Ceph的角度来看,应用程序就是客户端。应用程序可以通过其他机制提供自己的用户身份验证

应用程序如何提供自己的用户身份验证

Ceph:关于 Ceph 用户认证授权管理的一些笔记,Ceph,ceph

Ceph对象网关有自己的用户数据库来认证Amazon S3和Swift用户,但使用client.rgw.hostname 用于访问集群的帐号

配置用户授权

创建新用户帐户时,授予集群权限,以授权用户的集群任务,cephx 中的权限被称为 能力,可以通过守护进程类型(mon、osd、mgr或mds)授予它们。

使用能力来根据应用程序标记限制或提供对池、池的名称空间或一组池中的数据的访问。能力还允许集群中的守护进程相互交互

用户管理

需要查询现有用户,使用 ceph auth list命令,或者 ceph auth ls

[ceph: root@node /]# ceph auth list 
... output omitted ... 
osd.0 
key: AQBW6Tha5z6OIhAAMQ7nY/4MogYecxKqQxX1sA== 
caps : [mgr] allow profile osd
caps: [mon] allow profile osd 
caps: [osd] allow * 
client.admin 
key: AQCi6Dhajw7pIRAA/ECkwyipx2/raLWjgbklyA== 
caps: [mds] allow * 
caps: [mgr] allow * 
caps: [mon] allow * 
caps: [osd] allow * 
. . . output omitted ... 

要获取特定帐户的详细信息,使用ceph auth get命令:

[ceph: root@node /]# ceph auth get client.admin 
exported keyring for client.admin 
[client . ad min] 
key = AQCi6Dhajw7pIRAA/ECkwyipx2/raLWj gbklyA== 
caps mds = "allow *" 
caps mgr = "allow *" 
caps mon = "allow *" 
caps osd = "allow *" 

可以打印密钥:

[ceph: root@node /]# ceph auth print-key client.adrnin 
AQCi6Dhajw7pIRAA/ECkwyipx2/raLWjgbklyA== 

需要导出和导入用户帐号,使用ceph auth exportceph auth import命令

[ceph: root@node /]# ceph auth \
 export client.operator1 > ~/operatorl.export 
[ceph: root@node /]# ceph auth \
 import -i ~/operator1.export 

用户创建

ceph auth get-or-create 命令创建一个新用户帐户并生成它的密钥,该命令默认将该密钥打印到stdout,因此通常会添加-o选项来将标准输出保存到密钥环文件中。

创建了对所有池具有读写权限的 app1 用户帐户,并将密钥环文件存储在 /etc/ceph/ceph.client.app1.keyring

[ceph: root@node /]# ceph auth \
 get-or-create client.app1 \
 mon 'allow r' \
 osd 'allow rw' \
 -o /etc/ceph/ceph.client.app1.keyring

创建 Ceph 用户 liruilong , 可以读写 demo_pool 存储池中的 prod namespace 中的对象

[root@serverc ~]# ceph auth get-or-create client.liruilong1 \
   mon 'allow r '  \
   osd 'allow rw pool=demo_pool namespace=prod' \
   -o /etc/ceph/ceph.client.liruilong1.keyring
[root@serverc ~]# ceph auth  get client.liruilong1
[client.liruilong1]
        key = AQBs/5pkMyVkLRAAM/IWCQf+9ThFjHzjMpOBBg==
        caps mon = "allow r "
        caps osd = "allow rw pool=demo_pool namespace=prod"
exported keyring for client.liruilong1
[root@serverc ~]#

创建 Ceph 用户 liruilong, ceph-pool 存储池执行读、写和执行扩展的对象类

[root@serverc ~]# ceph auth get-or-create client.liruilong \
   mon 'allow profile osd'  \
   osd 'allow rwx pool=ceph-pool' \ 
   -o /etc/ceph/ceph.client.liruilong.keyring

身份验证需要密匙环文件,因此必须将该文件复制到使用此新用户帐户操作的所有客户端系统

用户认证

Keyring 文件

对于身份验证,客户端配置一个 Ceph 用户名和一个包含用户安全密钥的密钥环文件,Ceph在创建每个用户帐户时为其生成密匙环文件,但是,必须将此文件复制到需要它的每个客户机系统或应用程序服务器

在这些客户机系统上,librados 使用来自 /etc/ceph/ceph.conf 的密匙环参数。Conf 配置文件以定位密钥环文件。默认值为/etc/ceph/$cluster.$name.keyring 密匙环。

例如,对于client.openstack帐户,密钥环文件/etc/ceph/ceph.client.openstack.keyring 密匙环

密钥环文件以纯文本的形式存储密钥,对文件进行相应的 Linux 文件权限保护,仅允许 Linux 授权用户访问,只在需要 Ceph 用户的密匙环文件进行身份验证的系统上部署它

[root@serverc ceph]# ll
总用量 36
-rw-------. 1 root root  63 627 10:39 ceph.client.admin.keyring
-rw-r--r--. 1 root root  68 627 11:25 ceph.client.liruilong1.keyring
-rw-r--r--. 1 root root  67 627 11:22 ceph.client.liruilong.keyring
-rw-r--r--. 1 root root 177 627 10:39 ceph.conf
-rw-r--r--. 1 root root 595 627 10:40 ceph.pub
-rw-------. 1 root root 153 627 10:40 podman-auth.json
-rw-r--r--. 1 root root  92 818 2021 rbdmap
[root@serverc ceph]#

传输密钥

cephx 协议不以纯文本的形式传输共享密钥,相反,客户机从 Monitor 请求一个会话密钥Monitor 使用客户机的共享密钥加密会话密钥,并向客户机提供会话密钥,客户机解密会话密钥并从 Monitor 请求票据,以对集群守护进程进行身份验证。这类似于 Kerberos 协议,cephx 密钥环文件类似于 Kerberos keytab文件

在 Kerberos 中,有三个主要的组件:认证服务器(AS)、票证授予服务器(TGS)和客户端。当一个用户需要访问受保护的资源时,它首先向 AS 发送请求,AS 验证用户的身份,然后生成一个票证并将其发送给 TGS。TGS 再次验证用户的身份,并为用户生成一个可用于访问特定资源的票证。最后,TGS 将票证发送给客户端,客户端使用这个票证来访问所需的服务。

配置用户身份验证

使用命令行工具,如ceph、rados和rbd,管理员可以使用 --id--keyring 选项指定用户帐户密钥环文件。如果没有指定,命令作为 client.admin 进行身份验证

在本例中,ceph 命令作为 client.operator3进行身份验证列出可用的池

[root@serverc ceph]# ceph --id app1 osd lspools
1 device_health_metrics
2 .rgw.root
3 default.rgw.log
4 default.rgw.control
5 default.rgw.meta
6 ceph-pool
[root@serverc ceph]#

在使用--id 的时候不需用 client. 的前缀,--id 会自动使用 client. 前缀,而使用--name的时候就需要使用 client. 的前缀

如果将密钥环文件存储在默认位置,则不需要--keyring选项。cephadm shell 自动从/etc/ceph/目录挂载密钥环,如果不在默认位置,需要显示指定

修改用户权限

ceph auth caps 命令修改用户帐户的能力(权限),这个例子修改了 osd 上的 appuser account 功能,只允许对 myapp 池进行读写访问:

[ceph: root@node /]# ceph auth \
 caps client.app1 \
 mon 'allow r' \
 osd 'allow rw pool=myapp' 
updated caps for client.app1 

ceph auth caps 命令覆盖现有能力,使用该命令时,必须为所有守护进程指定完整的能力集,而不仅仅是要修改的那些。

可以定义一个空字符串来删除所有功能。

[ceph: root@node /]# ceph auth caps client.app1 osd '' 
updated caps for client.app1 

Cephx能力(权限)

在 cephx 中,对于每个守护进程类型,有几个可用的能力:这里的能力,也就是权限,也做功能

  • R,授予读访问权限,每个用户帐户至少应该对监视器(mon)具有读访问权限,以便能够 检索CRUSH map
  • W,授予写访问权限,客户端需要写访问来存储和修改 osd 上的对象。对于 manager (MGRs), w 授予启用或禁用模块的权限
  • X,授予执行扩展对象类的授权,这允许客户端对对象执行额外的操作,比如用rados lock get或list列出RBD图像.class-read和class-writex的子集,你通常在 RBD 池中使用它们
  • * 授予完全访问权

创建了 formyappl 用户帐户,并赋予了从任意池中存储和检索对象的能力:

[ceph: root@node /]# ceph auth \
 get-or-create client.formyappl \
 mon 'allow r' \
 osd 'allow rw'

使用配置文件设置能力

Cephx 提供 预定义的功能配置文件,在创建用户帐户时,利用配置文件简化用户访问权限的配置

本例通过 profile rbd 定义新的 forrbd 用户帐号的访问权限,客户端应用程序可以使用该帐户使用 RADOS块设备对 Ceph存储进行基于块的访问

[ceph: root@node /]# ceph auth \
 get-or-create client.forrbd \
 mon 'profile rbd' \
 osd 'profile rbd'

rbd-read-only 配置文件的工作方式相同,但授予只读访问权限,Ceph利用其他现有的配置文件在守护进程之间进行内部通信,不能创建自己的配置文件,Ceph在内部定义它们

profile rbd-read-only

下表列出了默认安装下Ceph的权限

能力 描述
allow 授予允许能力
r 赋予用户读访问权限,需要监视器来检索CRUSH map
w 赋予用户对对象的写访问权
x 使用户能够调用类方法(即读取和写入)并在监视器上执行身份验证操作
class-read 赋予用户调用类读取方法的能力,x的子集
class-write 赋予用户调用类写入方法的能力,x的子集
* 为用户提供特定守护进程或池的读、写和执行权限,以及执行管理命令的能力
profile osd 允许用户作为OSD连接到其他OSD或监视器,授予osd权限,使osd能够处理复制心跳流量和状态报告。
profile bootstrap-osd 允许用户引导一个OSD,这样用户在引导一个OSD时就有了添加key的权限
profile rbd 允许用户对Ceph块设备进行读写访问
profile rbd-read-only 为用户提供对Ceph块设备的只读访问权限

权限限制访问

限制用户 OSD 的权限,使用户只能访问自己需要的池,即可以通过不同的方式来对池等相关对象做限制访问,类似 白名单一样。

池限制

创建了 formyapp2 用户,并限制了他们对myapp池的读写权限:

[ceph: root@node /]# ceph auth \
 get-or-create client.formyapp2 \
 mon 'allow r' \
 osd 'allow rw pool=myapp'

如果在配置功能时没有指定池,那么Ceph将在所有现有的池上设置它们,cephx机制可以通过其他方式限制对对象的访问:

对象名称前缀 限制

通过对象名称前缀,下面的示例限制对任何池中名称以pref开头的对象的访问

[ceph: root@node /]# ceph auth \
 get-or-create client.formyapp3 \
 mon 'allow r' \
 osd 'allow rw object_prefix pref'

namespace 限制

通过namespace,实现namespace来对池中的对象进行逻辑分组,然后可以将用户帐户限制为属于特定namespace的对象:

[ceph: root@node /)# ceph auth \
 get-or-create client.designer \
 mon 'allow r' \
 osd 'allow rw namespace=photos'

路径限制

通过路径,Ceph文件系统(cepphfs)利用这种方法来限制对特定目录的访问,下面的例子创建了一个新的用户帐户webdesigner,它只能访问/webcontent目录及其内容:

[ceph: root@node /]# ceph \
 fs authorize WEBFS \
 client.webdesigner \
  /webcontent rw 
[ceph: root@node /]# ceph auth get client.webdesigner 
exported keyring for client .webdesigner 
[client.webdesigner] 
key = AQBrVE9aNwoEGRAApYR6m71ECRzUlLpp4wEJkw== 
caps mds = "allow rw path=/webcontent" 
caps mon = "allow r" 
caps osd = "allow rw pool=cephfs_data"

命令限制

通过 command 命令,这种方法将管理员限制在特定的命令列表中,创建 operator1用户帐户并限制其访问两个命令的示例如下:

[ceph: root@node /]# ceph auth \
 get-or-create client.operator1 \
 mon 'allow r, allow command "auth get-or-create", allow command "auth list" '

删除用户帐号

ceph auth del 命令用于删除用户帐号

[ceph: root@node /]# ceph auth del client.app1
updated

然后可以删除相关的密钥环文件

Demo

# 在 Ceph 集群中创建两个新的客户端,分别用于编辑和获取名为 replpool1 下的文档资源
cephadm shell -- ceph auth get-or-create client.docedit mon 'allow r' osd 'allow rw pool=replpool1 namespace=docs' | tee /etc/ceph/ceph.client.docedit.keyring

cephadm shell -- ceph auth get-or-create client.docget mon 'allow r' osd 'allow r pool=replpool1 namespace=docs' | tee /etc/ceph/ceph.client.docget.keyring

# 列出 Ceph 认证密钥,并查找与 client.docedit 和 client.docget 对应的密钥
cephadm shell -- ceph auth ls | egrep -A3 'docedit|docget'

# 将客户端密钥文件同步到另一个服务器上
rsync -v /etc/ceph/ceph.client.doc*.keyring serverd:/etc/ceph/

# 在另一个服务器上挂载客户端密钥文件并使用客户端进行操作
cephadm shell --mount /etc/ceph:/etc/ceph

# 使用 client.docedit 客户端在 replpool1.docs 命名空间中写入数据
rados --id docedit -p replpool1 -N docs put adoc /etc/hosts

# 使用 client.docget 客户端从 replpool1.docs 命名空间中读取数据
rados --id docget -p replpool1 -N docs get adoc /tmp/test

# 比较两份数据文件
diff /etc/hosts /tmp/test

# 使用未授权的 client.docget 客户端试图写入数据并触发错误
rados --id docget -p replpool1 -N docs put mywritetest /etc/hosts || echo ERROR

# 更新客户端授权,将 client.docget 授予对 replpool1.docs 和 docarchive 池进行读写操作的权限
ceph auth caps client.docget mon 'allow r' osd 'allow rw pool=replpool1 namespace=docs, allow rw pool=docarchive'

# 使用已授权的 client.docget 客户端在 replpool1.docs 命名空间中写入数据
rados --id docget -p replpool1 -N docs put mywritetest /etc/hosts

# 删除客户端密钥文件和认证记录
rm /etc/ceph/ceph.client.doc*.keyring
ssh serverd rm /etc/ceph/ceph.client.doc*.keyring
cephadm shell -- ceph auth del client.docedit
cephadm shell -- ceph auth del client.docget

博文部分内容参考

© 文中涉及参考链接内容版权归原作者所有,如有侵权请告知,这是一个开源项目,如果你认可它,不要吝啬星星哦 😃


https://docs.ceph.com/en/pacific/architecture/

https://github.com/ceph/ceph

https://docs.ceph.com

CL260 授课老师课堂笔记


© 2018-2023 liruilonger@gmail.com, All rights reserved. 保持署名-非商用-相同方式共享(CC BY-NC-SA 4.0)文章来源地址https://www.toymoban.com/news/detail-515840.html

到了这里,关于Ceph:关于 Ceph 用户认证授权管理的一些笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • ceph用户认证

    ceph用户认证

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

    2024年02月15日
    浏览(8)
  • 关于CEPH的简单畅谈

    关于CEPH的简单畅谈

    CEPH是一个先进的分布式存储系统,它具有高度可靠性、可扩展性和性能。CEPH旨在解决传统存储系统中存在的诸多挑战,如单点故障、难以扩展、数据丢失风险等。 CEPH的设计理念是将数据分布到一个由多个节点组成的集群中,并利用冗余备份策略确保数据的可用性和完整性。

    2024年02月15日
    浏览(6)
  • 关于ceph osd auth keyring

    关于osd auth 认证 如果在删除osd时,id指定错误,错误执行了ceph auth del osd.x,此时osd工作目录还在,osd重启会因为认证无法启动。只要重新添加该osd auth认证即可 上述原理和命令对于各位运维来说应该非常熟悉,不算新鲜命令,不做展开。 上述命令从另一个角度,也可以理解

    2024年04月15日
    浏览(9)
  • Ceph入门到精通-使用 Ceph 编排器管理 OSD

    作为存储管理员,您可以使用 Ceph 编排器来管理红帽 Ceph 存储集群的 OSD。 当红帽 Ceph 存储集群启动并运行时,您可以在运行时将 OSD 添加到存储集群。 Ceph OSD 通常由一个存储驱动器的一个守护进程及其节点中的关联日志组成。如果节点有多个存储驱动器,则为每个驱动器映

    2024年02月05日
    浏览(15)
  • 管理ceph集群

    管理ceph集群

    outputfile文件被映射到 osd.0 查看当前池rbd-bak应用的rule set,并修改其使用新的RuleSet。再次查看文件outputfile的映射过程。 建议在节点中一次添加一个 OSD,并等到集群恢复到 active+clean 状态。,之后再继续添加下一个OSD。 查看远程节点ceph-2的硬盘 擦净节点ceph-2的磁盘 prepare新的

    2024年02月14日
    浏览(26)
  • Ceph应用管理

    Ceph应用管理

    目录 资源池 Pool 管理 创建 CephFS 文件系统 MDS 接口 服务端操作 客户端操作  创建 Ceph 块存储系统 RBD 接口 创建 Ceph 对象存储系统 RGW 接口 OSD 故障模拟与恢复  我们如何向 Ceph 中存储数据呢?首先我们需要在 Ceph 中定义一个 Pool 资源池。Pool 是 Ceph 中存储 Object 对象抽象概念。

    2024年01月18日
    浏览(10)
  • ceph集群管理节点高可用

    ceph集群管理节点高可用

    一、前言     ceph集群想要高可用也必须要有多个管理节点,不然只有单管理节点,在一个管理节点挂了的情况下就没法进行集群的管理,可以分为web管理和客户端管理,web管理和mgr服务相关,客户端管理和mon服务相关 二、部署     mgr高可用    mgr服务只有一个节点是活动的

    2024年04月15日
    浏览(14)
  • (ceph)资源池poll管理

    (ceph)资源池poll管理

    前面的文章中我们已经完成了 Ceph 集群的部署(ceph部署: 传送门),但是我们如何向 Ceph 中存储数据呢?首先我们需要在 Ceph 中定义一个 Pool 资源池。Pool 是 Ceph 中存储 Object 对象抽象概念。我们可以将其理解为 Ceph 存储上划分的逻辑分区,Pool 由多个 PG 组成;而 PG 通过 CRU

    2024年02月16日
    浏览(26)
  • Ceph分布式存储笔记

    Ceph分布式存储笔记

    1、Ceph概念 分布式存储 是指一种独特的系统架构,它由一组网络进行通信、为了完成共同的任务而协调工作的计算机节点组成;分布式系统是为了用廉价的、普通的机器完成单个计算无法完成的计算、存储任务;其目的是利用更多的机器,处理更多的数据。 Ceph是一个统一【

    2023年04月08日
    浏览(17)
  • Ceph 分布式存储之资源池管理

    上面我们已经完成了 Ceph 集群的部署,但是我们如何向 Ceph 中存储数据呢?首先我们需要在 Ceph 中定义一个 Pool 资源池。Pool 是 Ceph 中存储 Object 对象抽象概念。我们可以将其理解为 Ceph 存储上划分的逻辑分区,Pool 由多个 PG 组成;而 PG 通过 CRUSH 算法映射到不同的 OSD 上;同

    2024年02月16日
    浏览(8)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包