ceph 认证管理

大番茄 2020年03月16日 823次浏览

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个配置选项的值是cephxnone


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'