介绍
- 用户是指个人(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"