ceph用户管理

导读:
1.从零部署一个ceph集群
2.ceph block device与cephfs快速入门
3.ceph 对象存储快速入门
4.Ceph存储集群&配置
5.centos7 通过cephadm部署ceph octopus版本
6.ceph集群状态检查常用命令
7.ceph osd pg 状态介绍

用户管理

ceph用户管理_第1张图片

当Ceph在启用身份验证和授权的情况下运行(默认情况下启用)时,必须指定用户名和包含指定用户的私钥的keyring。 如果您未指定用户名,则Ceph将使用client.admin作为默认用户名。 如果您未指定keyring,则Ceph将通过Ceph配置中的keyring设置来寻找keyring。 例如,如果执行ceph health命令而不指定用户或密钥环:

ceph health
实际上执行了
ceph -n client.admin --keyring=/etc/ceph/ceph.client.admin.keyring health

cephx介绍

为了识别用户并防止中间人攻击,Ceph提供了其cephx身份验证系统来对用户和守护程序进行身份验证。

Cephx使用共享密钥进行身份验证,客户端和mon群集都具有客户端密钥的副本。身份验证协议使得双方都可以彼此证明自己拥有密钥的副本,而无需实际透露它。这提供了相互认证,群集确保用户拥有密钥,用户确定群集具有密钥的副本。

Ceph客户端必须能够直接与OSD进行交互。为了保护数据,Ceph提供了其cephx身份验证系统,该系统对操作Ceph客户端的用户进行身份验证。 cephx协议以类似于Kerberos的方式运行。

user/actor调用Ceph客户端来与mon通信。每个mon都可以对用户进行身份验证并分发密钥,因此多个mon的情况下,在使用cephx时不会出现单点故障。mon返回身份验证数据,其中包含用于获取Ceph服务的会话密钥。会话密钥本身已使用用户的永久秘密密钥加密,因此只有用户可以从Ceph监视器请求服务。

然后,客户端使用会话密钥从mon请求其所需的服务,并且mon向客户端提供ticket,该ticket际处理数据的OSD认证客户端。

Ceph监视器和OSD共享一个secret 。因此客户端可以将mon提供的ticket与群集中的任何OSD或元数据服务器一起使用。

要使用cephx,管理员必须首先设置用户。下图中,client.admin用户从命令行调用ceph auth get-or-create-key来生成用户名和密钥。 Ceph的auth子系统生成用户名和密钥,将其副本与mon一起存储,并将用户的secret发送回client.admin用户。这意味着客户端和mon共享一个密钥。

ceph用户管理_第2张图片

为了向mon进行身份验证,客户端将用户名传递给mon,mon生成一个会话密钥,并使用与该用户名关联的secret密钥对其进行加密。 然后,mon将加密的ticket发送回客户端。 然后,客户端使用共享密钥解密有效负载以检索会话密钥,会话密钥标识当前会话的用户。 然后,客户端代表会话密钥签名的用户请求ticket。 mon生成ticket,使用用户的密钥对其进行加密,然后将其发送回客户端。 客户端解密ticket,并使用它对整个集群中的OSD和元数据服务器签署请求。如下图所示

ceph用户管理_第3张图片

cephx协议对客户端和Ceph服务器之间正在进行的通信进行身份验证。 初始身份验证之后,在客户端和服务器之间发送的每个消息都使用ticket进行签名,Mon,OSD和MDS可以使用其共享密码进行验证。

ceph用户管理_第4张图片

此身份验证提供的保护在Ceph客户端和Ceph服务器主机之间。 身份验证不会扩展到Ceph客户端之外。 如果用户从远程主机访问Ceph客户端,则Ceph身份验证不会应用于用户主机和客户端主机之间的连接。

User

Ceph具有用户类型的概念。为了用户管理的目的,类型将始终是客户端。 Ceph以(.)分隔的形式标识用户,包括用户类型和用户ID:例如TYPE.ID,client.admin或client.user1。使用用户类型的原因是Ceph监视器,OSD和元数据服务器也使用Cephx协议,但它们不是客户端。区分用户类型有助于区分客户端用户和其他用户-简化访问控制,用户监控和可追溯性。

Ceph命令行允许根据类型使用命令行来指定带或不带类型的用户。如果指定–user或–id,则可以省略类型。因此,client.user1可以简单地作为user1输入。如果指定–name或-n,则必须指定类型和名称,例如client.user1。建议尽可能使用类型和名称。

授权

Ceph使用术语“capabilities”(caps)来描述授权经过身份验证的用户行来使用Mon、OSD和MDS的功能。 功能还可以根据其应用程序标记来限制对池中的数据,池中的名称空间或一组池的访问。 Ceph管理用户在创建或更新用户时设置用户的功能。

其语法如下:

{daemon-type} '{cap-spec}[, {cap-spec} ...]'

用户管理

列出当前用户ceph auth list
[root@ceph-admin ~]# ceph auth list
INFO:cephadm:Inferring fsid 23db6d22-b1ce-11ea-b263-1e00940000dc
INFO:cephadm:Using recent ceph image ceph/ceph:v15
osd.0
        key: AQASHuxejuL2AxAAia3rarH7BlazQ7Lm/Ls87A==
        caps: [mgr] allow profile osd
        caps: [mon] allow profile osd
        caps: [osd] allow *
osd.1
        key: AQCzJOxeZsK6BRAAUP6cUCjg/Av9uECTZK6EtA==
        caps: [mgr] allow profile osd
        caps: [mon] allow profile osd
        caps: [osd] allow *
osd.2
        key: AQDDK+xeAwtuEBAAkhHPVylykboipcJRccdALA==
        caps: [mgr] allow profile osd
        caps: [mon] allow profile osd
        caps: [osd] allow *
client.admin
        key: AQAgGOxe372xKhAA/3J0jIAhpKghe1Zeur0l1g==
        caps: [mds] allow *
        caps: [mgr] allow *
        caps: [mon] allow *
        caps: [osd] allow *
client.bootstrap-mds
        key: AQAkGOxeAw/xEhAAuK7PkPjMYRkXuapwGniyWQ==
        caps: [mon] allow profile bootstrap-mds
client.bootstrap-mgr
        key: AQAkGOxevDTxEhAAWZ7SpjnzEr0xsD4GGnMjbg==
        caps: [mon] allow profile bootstrap-mgr
client.bootstrap-osd
        key: AQAkGOxem1jxEhAAYfe0Z6ZzZX3rdezjsirLtA==
        caps: [mon] allow profile bootstrap-osd
client.bootstrap-rbd
        key: AQAkGOxexn3xEhAAv1WK4qsbwvcp+71QtZXhZA==
        caps: [mon] allow profile bootstrap-rbd
client.bootstrap-rbd-mirror
        key: AQAkGOxejaHxEhAA0/rITp5FSrp6f7Xj8TLYuw==
        caps: [mon] allow profile bootstrap-rbd-mirror
client.bootstrap-rgw
        key: AQAkGOxexMXxEhAA3gQfl/wdGH16kubav3YXyg==
        caps: [mon] allow profile bootstrap-rgw
client.crash.ceph-admin
        key: AQCCGOxefkekFRAALyQlo7pJetYzjromvaGZvw==
        caps: [mgr] profile crash
        caps: [mon] profile crash
client.crash.ceph-node1
        key: AQDXGOxe5UuRFBAAS811cV1rSkknXThkE1O0lA==
        caps: [mgr] profile crash
        caps: [mon] profile crash
client.crash.ceph-node2
        key: AQDZGOxefpzZGBAACyhHlADfkkvK2xJoFynwmw==
        caps: [mgr] profile crash
        caps: [mon] profile crash
client.rgw.mytest.myzone.ceph-node1.xykzap
        key: AQBpOexeqXEzHRAAzuiVkPLpflgLBJ4rw9a7VA==
        caps: [mgr] allow rw
        caps: [mon] allow *
        caps: [osd] allow rwx
mgr.ceph-admin.zlwsks
        key: AQAhGOxe584gFBAAU69Vpgxxik5V/E+Mo58Ltw==
        caps: [mds] allow *
        caps: [mon] profile mgr
        caps: [osd] allow *
mgr.ceph-node1.xefgqs
        key: AQDbGOxeVWHoKRAATBlQ3PApIHeo49qEVOnbLw==
        caps: [mds] allow *
        caps: [mon] profile mgr
        caps: [osd] allow *
mgr.ceph-node2.lylyez
        key: AQCoK+xePItTEhAAP8ucrwXGFWMZxTdKq/vG1g==
        caps: [mds] allow *
        caps: [mon] profile mgr
        caps: [osd] allow *
installed auth entries:
查看指定的用户ceph auth get {TYPE.ID}
[root@ceph-admin ~]# ceph auth get client.admin
INFO:cephadm:Inferring fsid 23db6d22-b1ce-11ea-b263-1e00940000dc
INFO:cephadm:Using recent ceph image ceph/ceph:v15
[client.admin]
        key = AQAgGOxe372xKhAA/3J0jIAhpKghe1Zeur0l1g==
        caps mds = "allow *"
        caps mgr = "allow *"
        caps mon = "allow *"
        caps osd = "allow *"
exported keyring for client.admin
添加用户
  • ceph auth add:此命令是添加用户的规范方法。它将创建用户,生成key并添加指定的功能。
  • ceph auth get-or-create:此命令通常是创建用户的最便捷方法,因为它返回带有用户名(放在方括号中)和key的密钥文件格式。如果用户已经存在,则此命令仅以密钥文件格式返回用户名和密钥。可以使用-o {filename}选项将输出保存到文件中。
  • ceph auth get-or-create-key:命令是创建用户并只返回用户密钥的便捷方法。这对于仅需要密钥的客户端(例如libvirt)很有用。如果用户已经存在,则此命令仅返回密钥。同样可以使用-o {filename}选项将输出保存到文件中。

创建用户时若是没有指定相应的功能,可以后续通过ceph auth caps再添加。

用户至少在Ceph MON上具有读取功能,并且在Ceph OSD上具有读写功能。此外,用户的OSD权限通常仅限于访问特定池。下面是几个配置案例:

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
修改用户所具备功能

通过ceph auth caps命令,可以指定用户并更改用户的功能。

ceph auth caps USERTYPE.USERID {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 *'
  • Mon caps :mon功能包括 r,w,x,也可以通过profile {name}设置

    mon 'allow {access-spec} [network {network/prefix}]'
    
    mon 'profile {name}'
    

    {access-spec}语法允许:

    * | all | [r][w][x]
    

    可选的{network / prefix}是CIDR表示法中的标准网络名称和前缀长度(例如10.3.0.0/16)。 如果存在,则此功能的使用仅限于从该网络连接的客户端。

  • OSD caps:OSD功能包括r,w,x, class-readclass-write访问设置或通过 profile {name}。 另外,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}
    
  • mgr caps:功能包括 r,w,x,也可以通过profile {name}设置

    mgr 'allow {access-spec} [network {network/prefix}]'
    
    mgr 'profile {name} [{key1} {match-type} {value1} ...] [network {network/prefix}]'
    

    也可以指定特定的命令

    mgr 'allow command "{command-prefix}" [with {key1} {match-type} {value1} ...] [network {network/prefix}]'
    
    mgr 'allow service {service-name} {access-spec} [network {network/prefix}]'
    
    mgr 'allow module {module-name} [with {key1} {match-type} {value1} ...] {access-spec} [network {network/prefix}]'
    

    {access-spec}语法允许:

    * | all | [r][w][x]
    

    {service-name}允许:

    mgr | osd | pg | py
    

    ``{match-type} 允许:`

    = | prefix | regex
    

更详细的指令描述可以参考:https://ceph.readthedocs.io/en/latest/rados/operations/user-management/#authorization-capabilities

删除用户
ceph auth del {TYPE}.{ID}
打印用户的key
[root@ceph-admin ~]# ceph auth print-key client.admin
INFO:cephadm:Inferring fsid 23db6d22-b1ce-11ea-b263-1e00940000dc
INFO:cephadm:Using recent ceph image ceph/ceph:v15
AQAgGOxe372xKhAA/3J0jIAhpKghe1Zeur0l1g==

当需要用密钥来填到客户端软件时,这个命令很有用

导入用户

通过keyring导入用户ceph auth import -i /path/to/keyring

例如:ceph auth import -i /etc/ceph/ceph.keyring

keyring管理

当通过Ceph客户端访问Ceph时,Ceph客户端将查找本地keyring。 Ceph默认情况下使用以下四个keyring名称来预设密钥环设置:

  • /etc/ceph/$cluster.$name.keyring
  • /etc/ceph/$cluster.keyring
  • /etc/ceph/keyring
  • /etc/ceph/keyring.bin
创建keyring

可以通过ceph-authtool工具

创建一个空的keyring:
ceph-authtool --create-keyring /path/to/keyring

-C参数可以写入一个已经存在的keyring文件。
 ceph-authtool -C /etc/ceph/ceph.keyring
添加用户到keyring

为client.admin创建keyring

ceph auth get client.admin -o /etc/ceph/ceph.client.admin.keyring

将用户导入keyring

ceph-authtool /etc/ceph/ceph.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring
创建用户

直接在ceph集群创建用户:

ceph-authtool -n client.ringo --cap osd 'allow rwx' --cap mon 'allow rwx' /etc/ceph/ceph.keyring

创建keyring同时将新的用户添加到keyring

ceph-authtool -C /etc/ceph/ceph.keyring -n client.ringo --cap osd 'allow rwx' --cap mon 'allow rwx' --gen-key
这样新用户只存在keyring中,下面将用户加入到集群
ceph auth add client.ringo -i /etc/ceph/ceph.keyring
修改用户权限

如果要修改keyring文件中记录的用户功能,需要指定keyring文件,然后指定用户

ceph-authtool /etc/ceph/ceph.keyring -n client.ringo --cap osd 'allow rwx' --cap mon 'allow rwx'

然后应用到ceph集群

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

你可能感兴趣的:(ceph)