CEPHX认证:
https://docs.ceph.com/docs/master/rados/configuration/auth-config-ref/
用户管理:
https://docs.ceph.com/docs/master/rados/operations/user-management/
一、认证
使用ceph-deploy安装的集群,配置文件里已经启用了cephx认证。
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
并且也生成了执行客户端命令的key /etc/ceph/client.admin.keyring
。
以及各个组件的key:
mon
: /var/lib/ceph/mon/ceph-{$id}/keyring
mgr
: /var/lib/ceph/mgr/ceph-{$id}/keyring
osd
: /var/lib/ceph/osd/ceph-{$id}/keyring
mds
: /var/lib/ceph/mds/ceph-{$id}/keyring
rgw
: /var/lib/ceph/radosgw/ceph-rgw.{$id}/keyring
如果是想禁用身份认证,修改配置文件并重启。
auth cluster required = none
auth service required = none
auth client required = none
这3个配置选项的值是cephx
或none
。
auth cluster required
: Ceph集群守护进程(ceph-mon, ceph-osd,ceph-mds和ceph-mgr)必须相互进行身份验证。
auth service required
: 客户端要访问 Ceph 集群的话,集群守护进程会要求它和集群认证。
auth client required
: 客户端会要求 Ceph 集群和它认证。
后面这两个有点蒙啊。
二、用户管理
无论Ceph客户端的类型是什么(例如,块设备,对象存储,文件系统,本机API等),Ceph都将所有数据存储pool
中。用户必须有权访问pool
才能读取和写入数据。
ceph有用户类型的概念。用于外部访问的客户端,类型是client
。 一个完整的用户组成是{type}.{id}
, 如: client.admin
。
管理用户
用户列表
ceph auth ls
查看用户信息
ceph auth get {TYPE.ID}
添加用户
授权信息下面介绍,这里只是基础的命令格式。
有三种方式。
三种方式实际的功能都一样,添加并授权用户,只是便捷性不一样。而秘钥信息也是可以单独查看的。
ceph auth add
:此命令是添加用户的规范方法。它将创建用户,生成密钥并添加任何指定功能。 如:
[root@client ceph]# ceph auth add client.john mon 'allow r' osd 'allow rw pool=liverpool'
added key for client.john
ceph auth get-or-create
: 返回用户名(在方括号中)和密钥的密钥文件格式。如果用户已经存在,则返回用户名和密钥。
[root@client ceph]# ceph auth get-or-create client.paul mon 'allow r' osd 'allow rw pool=liverpool'
[client.paul]
key = AQBbBXNe9TAQKRAAnCZrBJx6/xojqVTZpHZ1ng==
ceph auth get-or-create-key
: 创建用户并返回用户密钥。这对于仅需要密钥的客户端(例如libvirt)很有用。如果用户已经存在,则返回密钥。
[root@client ceph]# ceph auth get-or-create-key client.ringo mon 'allow r' osd 'allow rw pool=liverpool'
AQAoBnNe4sLjBxAAs/jy/gwFoQX05OsG9LBoCw==
如果为用户提供访问OSD权限,但不限制对特定pool的访问,则该用户将有权访问群集中所有的pool!
修改用户权限
ceph auth caps USERTYPE.USERID {daemon} 'allow [r|w|x|*|...] [pool={pool-name}] [namespace={namespace-name}]' [{daemon} 'allow [r|w|x|*|...] [pool={pool-name}] [namespace={namespace-name}]']
如:
ceph auth get client.john
ceph auth caps client.john mon 'allow r' osd 'allow rw pool=liverpool'
ceph auth caps client.paul mon 'allow rw' osd 'allow rwx pool=liverpool'
ceph auth caps client.brian-manager mon 'allow *' osd 'allow *'
删除用户
ceph auth del {TYPE}.{ID}
查看用户秘钥
ceph auth print-key {TYPE}.{ID}
[root@client ceph]# ceph auth print-key client.admin
AQB5vWBe9NvhDxAAo9uPGaqhuzDU4EVbuAai1g==[root@client ceph]#
完整信息:
[root@cephnode1 ~]# ceph auth get client.admin
exported keyring for client.admin
[client.admin]
key = AQB5vWBe9NvhDxAAo9uPGaqhuzDU4EVbuAai1g==
caps mds = "allow *"
caps mgr = "allow *"
caps mon = "allow *"
caps osd = "allow *"
用户授权
权限字符介绍
r
: 读取权限
w
: 写权限
x
: 能够调用类方法
class-read
: 能够调用类读取方法,是x
的子集。
class-write
: 能够调用类写入方法,是x
的子集。
*, all
: 读取,写入和执行权限
profile
这一部分好多都不懂,官网直接抄下来的。
profile osd
: 授予用户作为OSD连接到其他OSD或Monitor
的权限。授予OSD以使OSD能够处理复制心跳流量和状态报告。
profile mds
: 授予用户作为MDS连接到其他MDS或监视器的权限。
profile bootstrap-osd
: 授予用户引导OSD的权限。赋予如部署工具ceph-volume,ceph-deploy等等。使它们拥有添加key的权限。
profile bootstrap-mds
: 授予引导元数据服务器的权限。赋予如部署工具ceph-volume,ceph-deploy等等。使它们拥有添加key的权限。
profile bootstrap-rbd
:授予用户引导RBD用户的权限。赋予部署工具(如ceph-deploy等)的权限,使它们在引导RBD用户时有权添加密钥等。
profile bootstrap-rbd-mirror
: 授予用户引导rbd-mirror守护程序用户的权限。赋予部署工具(如ceph-deploy等),因此它们在引导rbd-mirror守护程序时有权添加密钥等。
profile rbd
: 授予用户操作RBD映像的权限。当用作Monitor Cap时,它提供了RBD客户端应用程序所需的最小特权;这包括将其他客户端用户列入黑名单的能力。当用作OSD cap时,它为RBD客户端应用程序提供对指定池的读写访问。
profile rbd-mirror
: 授予用户操作RBD映像和检索RBD映像配置密钥的权限。它提供了rbd-mirror守护程序所需的最小特权。
profile rbd-read-only
: 向用户授予RBD映像的只读权限。
授权信息格式
语法格式:
{daemon-type} '{cap-spec}[, {cap-spec} ...]'
daemon-type
就是守护进程的类型,如mon
,mgr
等。
cap-spec
: 具体的权限。
各个组件授权设置会有点不同
Monitor
mon 'allow {access-spec} [network {network/prefix}]'
mon 'profile {name}'
access-spec
: * | all | [r][w][x]
network/prefix
: 就是标准的ip地址与掩码,只有这个来源客户端才有设置的权限。
OSD
osd 'allow {access-spec} [{match-spec}] [network {network/prefix}]'
osd 'profile {name} [pool={pool-name} [namespace={namespace-name}]] [network {network/prefix}]'
access-spec
表示下面的任意一种:
* | all | [r][w][x] [class-read] [class-write]
class {class name} [{method name}]
match-spec
表示下面的任意一种:
pool={pool-name} [namespace={namespace-name}] [object_prefix {prefix}]
[namespace={namespace-name}] tag {application} {key}={value}
Manager
mgr 'allow {access-spec} [network {network/prefix}]'
mgr 'profile {name} [{key1} {match-type} {value1} ...] [network {network/prefix}]'
access-spec
: * | all | [r][w][x]
match-type
: = | prefix | regex
注意 Ceph对象网关守护程序(radosgw)是Ceph存储群集的客户端,因此它不表示为Ceph存储群集守护程序类型
三、一些例子
官方提供的访问块设备的授权
ceph auth get-or-create client.{ID} mon 'profile rbd' osd 'profile {profile name} [pool={pool-name}][, profile ...]' mgr 'profile rbd [pool={pool-name}]'
ceph auth get-or-create client.qemu mon 'profile rbd' osd 'profile rbd pool=vms, profile rbd-read-only pool=images' mgr 'profile rbd pool=images'
对CephFS客户端的授权
ceph auth get-or-create client.cephfs mon 'allow r' mds 'allow rw' osd 'allow rw pool=cephfs-data, allow rw pool=cephfs-metadata'