Ceph用户管理

介绍

  • 用户是指个人(ceph管理者)或系统参与者(MON/OSD/MDS)
  • 通过创建用户,可以控制用户或哪个参与者能够访问ceph存储集群、以及可访问的存储池及存储池中的数据
  • ceph支持多种类型的用户,但可管理的用户都属于client类型

区分用户类型的原因在于,MON/OSD/MDS等系统组件都使用cephx协议,但是他们为非客户端,通过点好分割用户类型和用户名,格式为TYPE.ID,例如client.admin

sh 复制代码
root@onda:~# cat /etc/ceph/ceph.client.admin.keyring 
[client.admin]
        key = AQBakzplc7fHGxAA3jNeWcQXV2QyXiXh9Bzurw==
        caps mds = "allow *"
        caps mgr = "allow *"
        caps mon = "allow *"
        caps osd = "allow *"

列出系统所有认证信息

sh 复制代码
root@onda:~# ceph auth list
mds.node1
        key: AQBMz0FlK4TQHhAAaZuBsMWchLSBePLgYjAQVA==
        caps: [mds] allow
        caps: [mon] allow profile mds
        caps: [osd] allow rwx
mds.node2
        key: AQBWz0Fl1c4OJBAA2JpbyWw/8ccULEXuKk3OYw==
        caps: [mds] allow
        caps: [mon] allow profile mds
        caps: [osd] allow rwx
mds.node3
        key: AQBcz0FlpM4wABAAZfQMFbag0ixffvJCmghLsw==
        caps: [mds] allow
        caps: [mon] allow profile mds
        caps: [osd] allow rwx
osd.0
        key: AQD/lDpl5BA3GhAAwLO+/J7bBnC+M55nhDQcbw==
        caps: [mgr] allow profile osd
        caps: [mon] allow profile osd
        caps: [osd] allow *
osd.1
        key: AQANlTpldiURABAAb9aWg8JrMnTiWxBET5gy1A==
        caps: [mgr] allow profile osd
        caps: [mon] allow profile osd
        caps: [osd] allow *
osd.2
        key: AQAalTpl9QKiMhAA8W79G3IcRE9K/Q0DHBJZfA==
        caps: [mgr] allow profile osd
        caps: [mon] allow profile osd
        caps: [osd] allow *
client.admin
        key: AQBakzplc7fHGxAA3jNeWcQXV2QyXiXh9Bzurw==
        caps: [mds] allow *
        caps: [mgr] allow *
        caps: [mon] allow *
        caps: [osd] allow *
client.bootstrap-mds
        key: AQBakzpl8szHGxAAyiAHic/pZcy92qobVDTGlA==
        caps: [mon] allow profile bootstrap-mds
client.bootstrap-mgr
        key: AQBakzplcdnHGxAALe8K4wMYq/eRxlVsiboNTw==
        caps: [mon] allow profile bootstrap-mgr
client.bootstrap-osd
        key: AQBakzply+nHGxAAKKvNjIhKkfIkgehRo4OzBw==
        caps: [mon] allow profile bootstrap-osd
client.bootstrap-rbd
        key: AQBakzplqvXHGxAAzhoxvaMMfpXpvHVCh2XmDg==
        caps: [mon] allow profile bootstrap-rbd
client.bootstrap-rbd-mirror
        key: AQBakzplHwHIGxAA+jLwvIUztxraXWMIp2JOAg==
        caps: [mon] allow profile bootstrap-rbd-mirror
client.bootstrap-rgw
        key: AQBakzplqhDIGxAASjaJOjY4dnnaMMgo2fNhKg==
        caps: [mon] allow profile bootstrap-rgw
client.rgw.192.168.0.127
        key: AQAgi0FlooG+FxAABxnzUnRyY7LsTwFOUAqJqw==
        caps: [mon] allow rw
        caps: [osd] allow rwx
mgr.node1
        key: AQCokzplt6fBHRAAaUfGMIjngFI2Dyr+lfs2Xw==
        caps: [mds] allow *
        caps: [mon] allow profile mgr
        caps: [osd] allow *
mgr.node2
        key: AQCV+jplZZW8BhAAXySl6vZCXMy8Z/a5+B66xg==
        caps: [mds] allow *
        caps: [mon] allow profile mgr
        caps: [osd] allow *
mgr.node3
        key: AQCqkzpl1XZVFxAAucUg4pXy+X4a9ckOr7iHgg==
        caps: [mds] allow *
        caps: [mon] allow profile mgr
        caps: [osd] allow *
mgr.node4
        key: AQCskzplKau5CxAADf/7Q6/EuKGfPUHpEEq/BA==
        caps: [mds] allow *
        caps: [mon] allow profile mgr
        caps: [osd] allow *
mgr.node5
        key: AQCb+jplmg2JBBAAWbEKzFy+8+7i4X92NVBr4w==
        caps: [mds] allow *
        caps: [mon] allow profile mgr
        caps: [osd] allow *

用户管理

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

添加用户

sh 复制代码
#说明
# client.tom 添加一个客户端账号client.tom
# mon 'allow r' 对mon允许读
# osd 'allow rwx pool=mypool' 对mypool存储池中的osd允许rwx

root@onda:~# ceph auth add client.tom mon 'allow r' osd 'allow rwx pool=mypool'
added key for client.tom

查看创建的用户

sh 复制代码
root@onda:~# ceph auth get client.tom
[client.tom]
        key = AQD340Jl9HvAMRAAswIr9KlRRxNhBy7DwEsjbA==
        caps mon = "allow r"
        caps osd = "allow rwx pool=mypoo

使用ceph auth get-or-create

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

sh 复制代码
# 一个pool可以创建多个用户,这里创建client.jerry
root@onda:~# ceph auth get-or-create client.jerry mon 'allow r' osd 'allow rwx pool=mypool'
[client.jerry]
        key = AQA45kJlUCRgBhAAac7kyl+qXKBm1yNU3fpHag==

使用ceph auth get-or-create-key

该命令是创建用户并返回密钥,对于只需要密钥的客户端(如libvirt)很有用。

sh 复制代码
root@onda:~# ceph auth get-or-create-key client.jerry mon 'allow r' osd 'allow rwx pool=mypool'
AQAJ50Jl5mq7GxAALeqr/wxNMGOrYGrq8ts1Ig==

修改用户的能力

使用ceph auth caps命令可以指定用户以及更改该用户的能力,设置新能力会完全覆盖当前的能力,因此要加上之前的用户已经拥有的能力

sh 复制代码
root@onda:~# ceph auth caps client.jerry mon 'allow rwx' osd 'allow rwx pool=mypool'
updated caps for client.jerry

root@onda:~# ceph auth get client.jerry
[client.jerry]
        key = AQAJ50Jl5mq7GxAALeqr/wxNMGOrYGrq8ts1Ig==
        caps mon = "allow rwx"
        caps osd = "allow rwx pool=mypool"

删除用户

sh 复制代码
root@onda:~# ceph auth del client.jack

# 再次查询发现没有该用户了
root@onda:~# ceph auth get client.jack
Error ENOENT: failed to find client.jack in keyring

ceph密钥环管理

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

使用预设的密钥环

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

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

创建keyring文件

sh 复制代码
# 创建的文件为一个空文件,需要导出用户进该文件
root@onda:~# ceph-authtool --create-keyring ceph.client.jerry.keyring 

导出用户认证信息至keyring文件

sh 复制代码
[root@node1 ~]# ceph auth get client.jerry -o ceph.client.jerry.keyring
[root@node1 ~]# cat ceph.client.jerry.keyring 
[client.jerry]
        key = AQAJ50Jl5mq7GxAALeqr/wxNMGOrYGrq8ts1Ig==
        caps mon = "allow rwx"
        caps osd = "allow rwx pool=mypool"

从keyring文件恢复用户信息

可以使用ceph auth import -i 指定keyring文件并导入到ceph,其实就是起到用户备份和恢复的目的

先删除用户

sh 复制代码
[root@node1 ~]# ceph auth del client.jerry
[root@node1 ~]# ceph auth get client.jerry
Error ENOENT: failed to find client.jerry in keyri

导入用户

sh 复制代码
[root@node1 ~]# ceph auth import -i ceph.client.jerry.keyring 
[root@node1 ~]# ceph auth get client.jerry
[client.jerry]
        key = AQAJ50Jl5mq7GxAALeqr/wxNMGOrYGrq8ts1Ig==
        caps mon = "allow rwx"
        caps osd = "allow rwx pool=mypool"
相关推荐
NiNg_1_2341 小时前
SpringBoot整合SpringSecurity实现密码加密解密、登录认证退出功能
java·spring boot·后端
_.Switch1 小时前
高级Python自动化运维:容器安全与网络策略的深度解析
运维·网络·python·安全·自动化·devops
2401_850410831 小时前
文件系统和日志管理
linux·运维·服务器
JokerSZ.1 小时前
【基于LSM的ELF文件安全模块设计】参考
运维·网络·安全
芯盾时代2 小时前
数字身份发展趋势前瞻:身份韧性与安全
运维·安全·网络安全·密码学·信息与通信
Chrikk2 小时前
Go-性能调优实战案例
开发语言·后端·golang
幼儿园老大*2 小时前
Go的环境搭建以及GoLand安装教程
开发语言·经验分享·后端·golang·go
canyuemanyue2 小时前
go语言连续监控事件并回调处理
开发语言·后端·golang
杜杜的man2 小时前
【go从零单排】go语言中的指针
开发语言·后端·golang
心灵彼岸-诗和远方3 小时前
DevOps业务价值流:架构设计最佳实践
运维·产品经理·devops