ceph user

这个文档描述了ceph client user,以及user在ceph集群里的授权情况。

当ceph集群启用了权限验证(默认开启),你一定要指定一个user name和一个keyring(含有指定user的密钥)。如果你不指定一个user name,ceph会使用client.admin作为默认user name。如果你不指定一个keyring,ceph会在ceph配置文件夹(/etc/ceph/)里查找keyring。例如

ceph health

ceph把上面的命令解释为:

ceph -n client.admin --keyring=/etc/ceph/ceph.client.admin.keyring health

另外,你可以使用CEPH_ARGS环境变量去避免每次都输入user name和secret

背景

不管是哪种ceph client(例如:block device,object storage,filesystem,native api等),ceph都在pool里存储里所有都对象。ceph用户一定要拥有访问pool的能力才能读写数据。另外,ceph用户一定要拥有执行ceph命令行的权限。下面的一些概念会帮助你理解ceph user管理

user

创建一个user可以让你控制谁(或是什么)可以访问你的ceph集群,pools,以及pools里的数据

ceph拥有user的type的概念。为了进行用户管理,type总是被设为client。ceph通过被(.)隔开的type与user id来识别users,例如:TYPE.ID, client.admin, or client.user1。使用user type的理由是,Ceph Monitors, OSDs, and Metadata Servers 同样在使用cephx协议,但是他们不是客户。区分user type将会帮助区分客户用户与其他用户。

有时候ceph user看起来比较让人疑惑,因为ceph命令行允许你在使用user时不指定type,这取决与你的命令行用法。如果你指定–user或–id,你可以忽略type。所以client.user1可以简化为user1。如果你使用–name或-n,你就一定要指定type和name。建议无论何时都要使用type。

授权

ceph使用“capabilities” (caps)去描述一个被授权用户使用mon,osd,md的权限。capabilities同样可以收紧访问pool里数据,namespace的权限。ceph管理员在创建或更新user时设定user的capabilities。

capabilities的写法结构如下:

{daemon-type} '{cap-spec}[, {cap-spec} ...]'
  • Monitor Caps:Monitor capabilities含有r,w,x权限或profile {name},例如
mon 'allow {access-spec}'
mon 'allow rwx'
mon 'profile {name}'

{access-spec}可以是如下值:

* | all | [r][w][x]
  • OSD Caps: OSD capabilities含有r, w, x, class-read, class-write,权限或profile {name}。另外,osd capabilities允许pool和namespace的设定
osd 'allow {access-spec} [{match-spec}]'

osd 'profile {name} [pool={pool-name} [namespace={namespace-name}]]'

{access-spec}可以是下面2种中的任意一种

* | 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}

下面描述一下每种权限能力:
- allow:优先守护进程的访问设置。 仅包含针对MDS的rw。
- r:读权限,可以去mon里的crush map
- w:给用户写权限
- x:给用户调用class方法(也就是读写)的权限并拥有在mon里执行操作的权限
- class-read:给用户调用class读方法的权限,x的子集
- class-write:给用户调用class写方法的权限,x的子集
- *,all:给用户在某daemon/pool读,写和执行权限,并能执行admin命令。

管理user

列出user

ceph auth ls

获取一个用户

ceph auth get {TYPE.ID}

例如

ceph auth get client.admin

添加一个用户

添加一个用户,就要创建一个用户名(也就是type.id),一个secret key和任意权限。

user的key可以让user被ceph集群验证。user的capabilities授权了用户在mon,osd,mds读,写,执行的权限。

以下是几种添加用户的方法:
- ceph auth add: 这个命令会添加一个user。它会创建user,生成key并添加任意权限
- ceph auth get-or-create: 这个命令往往是最方便用来创建用户的,因为它返回了一个由user name与key格式化了的keyfile。如果user已经存在,这个命令会简单的返回用户名与key。
- ceph auth get-or-create-key:这个命令是一个很方便创建用户并只返回user key的方法。这个命令对只需要key的用户很有用。如果user早就存在,这个命令只会返回key。

当创建client user时,你可以创建一个无权限的用户。一个无权限的用户是无用的,因为用户无法从mon取到cluster map。然而,你如果想之后通过ceph auth caps命令去添加权限的话,就可以先创建一个无权限用户。

一个典型用户至少拥有读mon的权限和读写osd的权限,另外,一个用户的osd权限经常会限制特定pool的访问

ceph auth add client.john mon 'allow r' osd 'allow rw pool=liverpool'
ceph auth get-or-create client.paul mon 'allow r' osd 'allow rw pool=liverpool'
ceph auth get-or-create client.george mon 'allow r' osd 'allow rw pool=liverpool' -o george.keyring
ceph auth get-or-create-key client.ringo mon 'allow r' osd 'allow rw pool=liverpool' -o ringo.key

注意,我创建用户的时候,keyring文件并没有相应生成,所以我自己写了keyring文件

ceph auth get client.kube > /etc/ceph/ceph.client.kube.keyring

如果你创建的用户有osd的权限,但是没有限制只能访问特定pool,那么用户就可以访问所有pool

修改user权限

ceph auth cap命令会覆盖已有的capabilities,所以在添加或修改权限前,你要去查看已有的权限ceph auth get USERTYPE.USERID

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 *'

想要删除capability,你可以重置capability。例如:

ceph auth caps client.ringo mon ' ' osd ' '

删除用户

ceph auth print-key {TYPE}.{ID}

导入用户

ceph auth import -i /path/to/keyring

例如:

sudo ceph auth import -i /etc/ceph/ceph.keyring

keyring管理

当你通过ceph client访问ceph是,ceph client会查找本地keyring。ceph预设了以下四中kering名称,所以你不用在ceph配置文件里设置它,除非你要重写(不建议)
- /etc/ceph/ cluster. c l u s t e r . name.keyring
- /etc/ceph/$cluster.keyring
- /etc/ceph/keyring
- /etc/ceph/keyring.bin

$cluster是由ceph配置文件的名称决定的ceph cluster名称(也就是说, ceph.conf代表着cluster名称是ceph)。$name是user tyep和user id(例如:client.admin)

当你创建用户之后,你必须获取key并添加它到ceph client端,不然你用这个用户无法访问到ceph集群。

ceph auth get client.kube > /etc/ceph/ceph.client.kube.keyring
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值