ceph的认证授权

Ceph的授权

  • Ceph把数据以对象的方式存在与各个存储池中,ceph用户必须具有访问存储池的权限才能读写数据
  • ceph用caps来描述给予用户的的权限来使用mon和osd/mds,caps用来限制对某一个存储池的数据或者某个命名空间的访问

  • ceph管理员用户可以创建或者更新普通用户来赋予caps权限

示例

#查看所有的ceph用户权限
ceph auth list

#管理员用户(对所有组件拥有完全的管理员权限)
client.admin 
    key:AQA5+FZd7J90NBAAy3upDi1HsMCC55tUJWZzPW==
    caps:[mds] allow *  
    caps:[mgr] allow *   
    caps:[mon] allow *
    caps:[osd] allow *

ceph常用权限说明

  • 当需要给某个用户X权限时候必须授予RW权限

  • 在ceph中认证和授权是一体的

具体参数项 参数解析
r 赋予用户读数据的权限,如果我们需要访问集群的任何信息,都需要先具有monitor的读权限
w 赋予用户写数据的权限,如果需要在osd上存储或修改数据就需要为0SD授予写权限x|赋予用户调用对象方法的权限,包括读和写,以及在monitor上执行用户身份验证的权限
class-read x的子集,允许用户调用类的read方法,通常用于rbd类型的池
class-write: 的子集,允许用户调用类的write方法,通常用于rbd类型的池
* 将一个指定存储池的完整权限(r、w和x)以及执行管理命令的权限授予用户
profile rbd 授权管理rbd权限
profile osd 授权一个用户以0SD身份连接其它OSD或者Monitor,用于0SD心跳和状态报告
profile mds 授权一个用户以MDS身份连接其他MDS或者
Monitor profile bootstrap-osd 允许用户引导0SD。比如ceph-deploy和ceph-disk工具都使用client.bootstrap-osd用户,该用户有权给0SD添加密钥和启动加载程序
profile bootstrap-mds 允许用户引导MDS。比如ceph-deploy工具使用了client.bootstrap-mds用户,该用户有权给MDS添加密钥和启动加载程序

ceph的授权操作

授权的基本语法规则

#授权语法:
    {daemon-type} allow {capability}' [{daemon-type} 'allow {capability}']
#授权对象:
monitor caps,包括r、w、x参数以及allow profiles {cap}
    mon 'allow rwx'
    mon 'allow profile osd'
osd caps,包括r、w、x、class-read、class-write以及profile osd
    osd 'allow rw'
    osd 'allow rw pool=rbd'
mds
    mds 'allow'

常用的授权语法

#普通授权
mon 'allow r' osd 'allow rw'

#基于存储池的授权
mon 'allow r' osd 'allow rw pool=Poolname'

#基于对象前缀授权
mon 'allow r' osd 'allow rw object_prefix pref'

#基于命名空间授权
mon 'allow r' osd 'allow rw pool=Poolname namespace=youNS'

#基于路径授权(只适用于CephFS,CephFS通过这种方式来限制对特定目录的访问)
mon 'allow r' osd 'allow rw pool=cephfs_data' mds 'allow rw path=/webcontent'

#限制用户只能使用特定的管理员指令(指定具体能使用的命令)
mon 'allow r, allow command "auth get-or-create", allow command "auth list"'

ceph用户命令规范

  • Ceph守护进程使用的帐户名与相关守护进程名称匹配:osd.1 或 mon.ceph-node1,这些用户默认会在安装时被创建

  • librados的客户端应用,帐户名以client.开头。例如,将OpenStack与Ceph集成时,常常会创建专用的client.openstack用户。另外,当部署 Ceph Object Gateway时,会创建client.rgw.帐户。如果要在librados基础上部署自定义软件,也应当创建特定帐户

  • Ceph客户端所使用的帐户名以client.开头,运行ceph和rados等命令时使用。安装程序会创建超级管理员client.admin,它具有访问所有内容及修改集群配置的功能。如果运行命令时不通过 –name 或 –id 明确指定用户名,Ceph默认使用client.admin

#两种访问方式
ceph -s --id admin
ceph -s --name client.admin

添加用户

  • ceph auth add
    • 当用户不存在,则创建用户并授权
    • 当用户存在,当权限不变,则不进行任何输出
    • 当用户存在,不支持修改权限
#示例
ceph auth add client.breeze mon "allow r" osd "allow rw pool=PoolName"
  • ceph auth get-or-create
    • 当用户不存在,则创建用户并授权并返回用户和key
    • 当用户存在,权限不变,返回用户和key当用户存在,权限修改,则返回报错
#示例
ceph auth get-or-create client.tina mon "allow r" osd "allow rw pool=PoolName"
  • ceph auth get-or-create-key
    • 当用户不存在,则创建用户并授权只返回key
    • 当用户存在,权限不变,只返回key
    • 当用户存在,权限修改,则返回报错
    • allow rw pool=mysecondpool?
#示例
ceph auth get-or-create client,bernie mon "allow r" osd

用户密钥的导入导出

  • 将系统中的用户密钥环导入到ceph
ceph auth  import -i /etc/ceph/ceph.client.username.keyring
  • 将ceph中的用户导出到指定文件
ceph auth get clinet.username -o path(指定路径,规范为[ceph.client.username.keyring])

用户的查询与删除

  • 显示所有的用户信息
    • ceph auth list
  • 获取某个用户的详细信息
    • ceph auth get client.admin
  • 获取用户的key
    • ceph auth print-key client.admin
  • 删除指定用户
    • ceph auth del client.breeze

修改用户权限

  • ceph auth caps 用户修改用户授权。如果给定的用户不存在,直接返回报错。如果用户存在,则使用新指定的权限覆盖现有权限。所以,如果只是给用户新增权限,则原来的权限需要原封不动的带上。如果需要删除原来的权限,只需要将该权限设定为空即可
#例子
ceph auth get clinet.username
#添加指定用户的权限
ceph auth caps clinet.username mon "allow r" osd "allow rw pool=PoolName"
#清空指定用户的权限
ceph auth caps clinet.username mon "" osd ""
我来评几句
登录后评论

已发表评论数()

相关站点

+订阅
热门文章