Ceph的认证授权

目录

1. Ceph的授权

1.1 Ceph的认证流程

1.2 Ceph认证机制

1.3 Ceph常用权限说明

1.4 Ceph的授权操作

1.4.1 授权的基本语法规则

1.4.2 常用的授权语法

1.4.3 ceph用户命令规范

1.4.4 添加用户

1.4.5 用户密钥的导入导出

1.4.6 用户的查询与删除

1.4.7 修改用户权限

1.5 推送用户至客户端

1.6 通过命令行使用用户

1.7 认证练习(管理ceph认证)


1. Ceph的授权

  • Ceph把数据以对象的方式存在与各个存储池中,ceph用户必须具有访问存储池的权限才能读写数据

  • ceph用caps来描述给予用户的的权限来使用mon和osd/mds,caps用来限制对某一个存储池的数据或者某个命名空间的访问

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

用户

  • 用户是指个人或系统参与者(例如应用)
  • 通过创建用户,可以控制谁(或哪个参与者)能够访问Ceph存储集群、以及可访问的存储池及存储池中的数据
  • Ceph支持多种类型的用户,但可管理的用户都属于Client类型
    • 区分用户类型的原因在于,MON、OSD和MDS等系统组件也使用cephx协议,但它们非为客户端
    • 通过点号来分隔用户类型和用户名,格式为TYPE.ID,例如client.admin等

示例

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

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

1.1 Ceph的认证流程

  • Ceph使用cephx协议对客户端进行身份认证
    • 每个MON都可以对客户端进行身份验正并分发密钥,不存在单点故障和性能瓶颈
    • MON会返回用于身份验正的数据结构,其包含获取Ceph服务时用到的session key
      • session key通过客户端密钥进行加密
      • 客户端使用session key向MON请求所需的服务
      • MON向客户端提供一个ticket,用于向实际处理数据的OSD等验正客户端身份
      • MON和OSD共享同一个secret,因此OSD会信任由MON发放的ticket
      • ticket存在有效期限
  • 注意:
    • Cephx身份验正功能仅限制Ceph的各组件之间,它不能扩展到其它非Ceph组件;
    • 它并不解决数据传输加密的问题;

1.2 Ceph认证机制

  • None:这种模式下,任何用户可以在不经过身份验证时就访问Ceph集群
auth_cluster_required = none
auth_service_required = none
auth_client_required = none
  • Cephx:Cephx协议类似于Kerberos协议,它允许经过验证的客户端访问ceph集群
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx

1.3 Ceph常用权限说明

  • 当需要给某个用户X权限时候必须授予RW权限
  • 在ceph中认证和授权是一体的

具体参数项参数解析
r赋予用户读数据的权限,如果我们需要访问集群的任何信息,都需要先具有monitor的读权限
w赋予用户写数据的权限,如果需要在osd上存储或修改数据就需要为0SD授予写权限x|赋予用户调用对象方法的权限,包括读和写,以及在monitor上执行用户身份验证的权限
class-readx的子集,允许用户调用类的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添加密钥和启动加载程序

1.4 Ceph的授权操作

1.4.1 授权的基本语法规则

  • profile osd
    • 授予用户以某个OSD身份连接到其他OSD或监视器的权限
    • 授予OSD权限,使OSD能够处理复制检测信号流量和状态报告
  • profile mds
    • 授予用户以某个MDS身份连接到其他MDS或监视器的权限
  • profile bootstrap-osd
    • 授予用户引导OSD的权限
    • 授权给部署工具,使其在引导OSD时有权添加密钥
  • profile bootstrap-mds
    • 授予用户引导元数据服务器的权限
    • 授权给部署工具,使其在引导元数据服务器时有权添加密钥
#授权语法:
    {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'

1.4.2 常用的授权语法

#普通授权
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"'

1.4.3 ceph用户命令规范

常规概念

#Ceph集群管理员能够直接在Ceph集群中创建、更新和删除用户
    创建用户时,可能需要将密钥分发到客户端,以便将密钥添加到密钥环
#列出用户
    命令:ceph auth list
    用户标识:TYPE.ID,因此,osd.0表示OSD类型的用户,用户ID为0
#检索特定用户
    命令:ceph auth get TYPE.ID或者ceph auth export TYPE.ID
#添加用户
    ceph auth add:规范方法,它能够创建用户、生成密钥并添加指定的caps
    ceph auth get-or-create:简便方法,创建用户并返回密钥文件格式的密钥信息,或者在用户存在时返回用户名及密钥文件格式的密钥信息
    ceph auth get-or-create-key:简便方法,创建用户并返回密钥信息,或者在用户存在时返回密钥信息
注意:典型的用户至少对Ceph monitor 具有读取功能,并对Ceph OSD具有读取和写入功能;另外,用户的OSD权限通常应该限制为只能访问特定的存储池,否则,他将具有访问集群中所有存储池的权限
  • 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

1.4.4 添加用户

  • 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

1.4.5 用户密钥的导入导出

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

1.4.6 用户的查询与删除

#显示所有的用户信息
ceph auth list

#获取某个用户的详细信息
ceph auth get client.admin

#获取用户的key
ceph auth print-key client.admin

#删除指定用户
ceph auth del client.breeze

1.4.7 修改用户权限

  • 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 ""

1.5 推送用户至客户端

  • 创建的用户主要用于客户端授权,所以需要将创建的用户推送至客户端。如果需要向同一个客户端推送多个用户,可以将多个用户的信息写入同一个文件,然后直接推送该文件
ceph-authtool -C /etc/ceph/ceph.keyring
ceph-authtool ceph.keyring --import-keyring ceph.client.username.keyring
ceph-authtool ceph.keyring --import-keyring ceph.client.username.keyring

1.6 通过命令行使用用户

  • 默认情况下,我们直接在用户端执行ceph指令,使用的是client.admin用户。如果在客户端使用指定用户访问ceph集群,就需要在命令行中传递认证信息
ceph --id user --keyring /etc/ceph/ceph.keyring health
ceph --user user --keyring /etc/ceph/ceph.keyring health
ceph --name client.user --keyring /etc/ceph/ceph.keyring health

1.7 认证练习(管理ceph认证)

  • one. 创建一个mypool的池
  • two. 创建一个client.docedit的用户,为其赋于mypool的docs命名空间的存储及检索文档的权限
  • three. 创建一个client.docget的用户,为其仅赋于mypool的docs命名空间的检索文档的权限
  • four. 修改client.docget的权限,为其赋于一个不存在的池docarchive读写的权限,同时修改其mypool的权限为可读写
# 检查mypool是否存在,如果不存在,则需要创建

ceph osd pool ls 

# ceph osd pool create mypool 64
# ceph osd pool application enable mypool rbd

# 创建用户并授权
ceph auth get-or-create client.docedit mon 'allow r' osd 'allow rw pool=mypool namespace=docs' -o /etc/ceph/ceph.client.docedit.keyring

ceph auth get-or-create cleint.docget mon 'allow r' osd 'allow r pool=mypool namespace=docs' -o /etc/ceph/ceph.client.docget.keyring

# 验证
ceph auth list 

# 将密钥发往servera

scp /etc/ceph/ceph.client.docedit.keyring servera:/etc/ceph/
scp /etc/ceph/ceph.client.docget.keyring servera:/etc/ceph/

# servera上操作

rados --id docedit -p mypool -N docs put testdoc /etc/services
rados --id docget -p mypool -N docs get testdoc /tmp/test
diff /etc/services /tmp/test

# 下面操作会抛异常
rados --id docget -p mypool -N docs put mywritetest /etc/services


# serverc上操作
ceph auth caps client.docget mon 'allow r' osd 'allow rw pool=mypool namespace=docs, allow rw pool=docarchive'

rados --id docget -p mypool -N docs put mywritetest /etc/services


# 清理相关用户

# serverc上操作
rm /etc/ceph/ceph.client.docedit.keyring
ssh servera rm /etc/ceph/ceph.client.docedit.keyring
ceph auth del cleint.docedit
rm /etc/ceph/ceph.client.docget.keyring
ssh servera rm /etc/ceph/ceph.client.docget.keyring
ceph auth del cleint.docget
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CN-FuWei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值