Ceph 认证CephX【八】

#列出指定用户信息
cephadmin@ceph-deploy:~$ ceph auth get osd.2
[osd.2]
        key = AQDBZ+5lEHEWLxAAhyLZf99PjlyIL7URmNBGQg==
        caps mgr = "allow profile osd"
        caps mon = "allow profile osd"
        caps osd = "allow *"
exported keyring for osd.2
cephadmin@ceph-deploy:~$ ceph auth get client.admin
[client.admin]
        key = AQB/0+plFI5DJhAA+TEChHmsGs62RHhTaO/YUg==
        caps mds = "allow *"
        caps mgr = "allow *"
        caps mon = "allow *"
        caps osd = "allow *"
exported keyring for client.admin


#r:向用户授予读取权限。访问监视器(mon)以检索 CRUSH 运行图时需具有此能力。
#w:向用户授予针对对象的写人权限。
#x:授予用户调用类方法(包括读取和写人)的能力,以及在监视器中执行 auth 操作的能力
#*:授予用户对特定守护进程/存储池的读取、写入和执行权限,以及执行管理命令的能力
#class-read:授予用户调用类读取方法的能力,属于是x能力的子集
#class-write:授予用户调用类写人方法的能力,属于是x能力的子集
#profile osd:授予用户以某个 OSD 身份连接到其他 OSD 或监视器的权限。授予 OSD 权限,使 OSD 能够处理复制检测信号流量和状态报告(获取 OSD 的状态信息)。
#profile mds:授予用户以某个 MDS 身份连接到其他 MDS 或监视器的权限。
#profile bootstrap-osd: 授予用户引导 OSD 的权限(初始化OSD并将OSD加入 ceph集群)授权给部署工具,使其在引导 OSD 时有权添加密钥。
#profile bootstrap-mds:授予用户引导元数据服务器的权限,授权部署工具权限,使其在弓导元数据服务器时有权添加密钥。

#MON 能力:
包括 r/w/x和 allow profile cap(ceph 的运行图)例如:
mon 'allow rwx'
mon 'allow profile osd'
#OSD 能力:
包括 r、w、x、class-read、class-write(类读取))和 profile osd(类写人),另外 OSD 能力还允许进行存储池和名称空间设置。
osd 'allow capability'[pool=poolname] [namespace=namespace-name
#MDS 能力:
只需要 allow 或空都表示
mds 'allow'

 Ceph用户管理

#列出用户
cephadmin@ceph-deploy:~$ ceph auth list
mds.ceph-mgr1
        key: AQBaw+5lEj6HMhAArNQoE/PI51LY0RaikeqNog==
        caps: [mds] allow
        caps: [mon] allow profile mds
        caps: [osd] allow rwx
osd.0
        key: AQCmZ+5l2esrLRAA4wKV1H8T8XJFO3/T1aEZ+A==
        caps: [mgr] allow profile osd
        caps: [mon] allow profile osd
        caps: [osd] allow *
osd.1
        key: AQC1Z+5lNN7YIRAASXp7TQdjOXzjyY5pz4hg5A==
        caps: [mgr] allow profile osd
        caps: [mon] allow profile osd
        caps: [osd] allow *
osd.2
        key: AQDBZ+5lEHEWLxAAhyLZf99PjlyIL7URmNBGQg==
        caps: [mgr] allow profile osd
        caps: [mon] allow profile osd
        caps: [osd] allow *
osd.3
        key: AQDUZ+5ls3hzGBAASDFltjtDZobP2iPGQnaRHQ==
        caps: [mgr] allow profile osd
        caps: [mon] allow profile osd
        caps: [osd] allow *
osd.4
        key: AQDgZ+5lG0RrIBAATVMdaCyLg4sKeRmtnqgsHg==
        caps: [mgr] allow profile osd
        caps: [mon] allow profile osd
        caps: [osd] allow *
osd.5
        key: AQD7Z+5l4uKhDRAAUVbF6tCynmyWufYXWDsp6A==
        caps: [mgr] allow profile osd
        caps: [mon] allow profile osd
        caps: [osd] allow *
osd.6
        key: AQAJaO5l+RYiMxAAjkWdtHkaYzgX2EJ8HxbbDg==
        caps: [mgr] allow profile osd
        caps: [mon] allow profile osd
        caps: [osd] allow *
osd.7
        key: AQAZaO5lmgzrJBAA/4u+it01a2/g6zwfeXpHYA==
        caps: [mgr] allow profile osd
        caps: [mon] allow profile osd
        caps: [osd] allow *
osd.8
        key: AQAlaO5loi0+HhAAbk7m4D1S6nJ5U2wQfTpuGA==
        caps: [mgr] allow profile osd
        caps: [mon] allow profile osd
        caps: [osd] allow *
client.admin
        key: AQB/0+plFI5DJhAA+TEChHmsGs62RHhTaO/YUg==
        caps: [mds] allow *
        caps: [mgr] allow *
        caps: [mon] allow *
        caps: [osd] allow *
client.bootstrap-mds
        key: AQB/0+pldZtDJhAAw6cLsPlmMXybm/r524giog==
        caps: [mon] allow profile bootstrap-mds
client.bootstrap-mgr
        key: AQB/0+ple6RDJhAAuFzDK8N9motbNiS3JHryxw==
        caps: [mon] allow profile bootstrap-mgr
client.bootstrap-osd
        key: AQB/0+pl2KtDJhAAAzWmUfnMtOttmHm8Y+s+lg==
        caps: [mon] allow profile bootstrap-osd
client.bootstrap-rbd
        key: AQB/0+plH7RDJhAAzJl88qZ+MamzahLiHws4PA==
        caps: [mon] allow profile bootstrap-rbd
client.bootstrap-rbd-mirror
        key: AQB/0+plcLtDJhAAo2WIXwosvbeVj3kj7HxtBA==
        caps: [mon] allow profile bootstrap-rbd-mirror
client.bootstrap-rgw
        key: AQB/0+plL8NDJhAAuNgdoP1kzWCKUEvaQdUsng==
        caps: [mon] allow profile bootstrap-rgw
mgr.ceph-mgr1
        key: AQBUXO5l8donDhAAKb/IVGX7S8md1RBFK+p4cw==
        caps: [mds] allow *
        caps: [mon] allow profile mgr
        caps: [osd] allow *
mgr.ceph-mgr2
        key: AQD3cu5lMbwYNhAAHmmvL8/xERl2yGCjRz2f2w==
        caps: [mds] allow *
        caps: [mon] allow profile mgr
        caps: [osd] allow *
installed auth entries:

#可以结合使用-0 文件名选项和 ceph auth list 将输出保存到某个文件
cephadmin@ceph-deploy:~$ ceph auth list -o authlist.key
installed auth entries:

 添加/删除用户管理

#添加一个用户会创建用户名 (TYPE.ID)、机密密钥,以及包含在命令中用于创建该用户的所有能力,用户可使用其密钥向 Ceph 存储集群进行身份验证。
#用户的能力授予该用户在Ceph monitor (mon)、Ceph OSD (osd) 或 Ceph 元数据服务器 (mds)上进行读取、写人或执行的能力,可以使用以下几个命令来添加用户:
#【1】添加
cephadmin@ceph-deploy:~$ ceph auth add client.birkhoff mon 'allow r' osd 'allow rwx pool=mypool' #添加认证key
added key for client.birkhoff
cephadmin@ceph-deploy:~$ ceph auth get client.birkhoff  #验证key
[client.birkhoff]
        key = AQBXEPFlubD5GBAA0Y83MqbYq4eYP2HpRWbAAw==
        caps mon = "allow r"
        caps osd = "allow rwx pool=mypool"
exported keyring for client.birkhoff
#【2】添加 get-or-create
cephadmin@ceph-deploy:~$ ceph auth get-or-create client.birkhoff mon 'allow r' osd 'allow rwx pool=mypool'
[client.birkhoff]
        key = AQBXEPFlubD5GBAA0Y83MqbYq4eYP2HpRWbAAw==
#【3】添加 get-or-create-key 用户有key显示没有就创建
#此命令是创建用户并仅返回用户密钥,对于只需要密钥的客户端(例如 libvirt),此命令非常有用。如果该用户已存在,此命令只返回密钥。您可以使用 -o 文件名选项将输出保存到某个文件。
#创建客户端用户时,可以创建不具有能力的用户,不具有能力的用户可以进行身份验证,但不能执行其他操作,此类客户端无法从监视器检索集群地图
#但是,如果希望稍后再添加能力,可以使用 ceph auth caps 命令创建一个不具有能力的用户。典型的用户至少对 Ceph monitor 具有读取功能
#并对 Ceph OSD 具有读取和写人功能此外,用户的 OSD 权限通常限制为只能访问特定的存储池。
cephadmin@ceph-deploy:~$ ceph auth get-or-create-key client.birkhoff mon 'allow r' osd 'allow rwx pool=mypool'
AQBXEPFlubD5GBAA0Y83MqbYq4eYP2HpRWbAAw==

#只获取单个指定用户的 key 信息
cephadmin@ceph-deploy:~$ ceph auth print-key client.birkhoff
AQBXEPFlubD5GBAA0Y83MqbYq4eYP2HpRWbAAw==

#修改用户能力
cephadmin@ceph-deploy:~$ ceph auth get client.birkhoff
[client.birkhoff]
        key = AQBXEPFlubD5GBAA0Y83MqbYq4eYP2HpRWbAAw==
        caps mon = "allow r"
        caps osd = "allow rwx pool=mypool"
exported keyring for client.birkhoff
cephadmin@ceph-deploy:~$ ceph auth caps client.birkhoff mon 'allow r' osd 'allow rw pool=mypool' #ceph auth caps
updated caps for client.birkhoff
cephadmin@ceph-deploy:~$ ceph auth get client.birkhoff
[client.birkhoff]
        key = AQBXEPFlubD5GBAA0Y83MqbYq4eYP2HpRWbAAw==
        caps mon = "allow r"
        caps osd = "allow rw pool=mypool"
exported keyring for client.birkhoff

#删除用户
#要删除用户使用 ceph auth del TYPE.ID,其中 TYPE是 client、osd、mon 或 mds 之-ID 是用户名或守护进程的 ID。
cephadmin@ceph-deploy:~$ ceph auth del client.xks
updated

密钥环管理

#ceph 的秘钥环是一个保存了 secrets、keys、certificates 并且能够让客户端通认证访问 ceph的 keyring file(集合文件),一个 keyring file 可以保存一个或者多个认证信息,每一个 key 都有一个实体名称加权限,类型为:
#{client、mon、mds、osd}.name

当客户端访问 ceph 集群时,ceph 会使用以下四个密钥环文件预设置密钥环设置:
/etc/ceph/<$cluster name>.<user $type>.<user $id>.keyring #保存单个用户的 keyring
/etc/ceph/cluster.keyring #保存多个用户的 keyring
/etc/ceph/keyring #未定义集群名称的多个用户的 keyring
/etc/ceph/keyring.bin #编译后的二进制文件

##通过密钥环文件备份与恢复用户
#将用户信息导出至keyring文件,对用户信息进行备份
#在创建包含单个用户的密钥环时,通常建议使用ceph 集群名称、用户类型和用户名及keyring 来命名,并将其保存在 /etc/ceph 目录中。例如为 client.user1 用户创建
#eg:ceph.client.user1.keyring
cephadmin@ceph-deploy:~$ ceph auth get-or-create client.winnie mon 'allow r' osd 'allow * pool=mypool' #创建一个winnie用户拥有权限
[client.winnie]
        key = AQBjE/FlQ3w5JhAAFkcKhVlCM94teMuhVpHzFw==
cephadmin@ceph-deploy:~$ ceph auth get client.winnie
[client.winnie]
        key = AQBjE/FlQ3w5JhAAFkcKhVlCM94teMuhVpHzFw==
        caps mon = "allow r"
        caps osd = "allow * pool=mypool"
exported keyring for client.winnie
cephadmin@ceph-deploy:~$ ceph-authtool --create-keyring ceph.client.winnie.keyring #创建keyring文件
creating ceph.client.winnie.keyring
cephadmin@ceph-deploy:~$ cat ceph.client.winnie.keyring #此时的文件是空的
cephadmin@ceph-deploy:~$ file ceph.client.winnie.keyring
ceph.client.winnie.keyring: empty
cephadmin@ceph-deploy:~$ ceph auth get client.winnie -o ceph.client.winnie.keyring #导出keyring至指定文件
exported keyring for client.winnie
cephadmin@ceph-deploy:~$ cat ceph.client.winnie.keyring
[client.winnie]
        key = AQBjE/FlQ3w5JhAAFkcKhVlCM94teMuhVpHzFw==
        caps mon = "allow r"
        caps osd = "allow * pool=mypool"

##从keyring中恢复用户认证信息
#可以使用ceph auth imoort -i 指定keyring文件并导入到ceph 其实就是起到用户备份和恢复的目的
cephadmin@ceph-deploy:~$ cat ceph.client.winnie.keyring
[client.winnie]
        key = AQCPFvFllR84FBAApoyoUHWRlkGpXMbmDr+ATg==
        caps mon = "allow r"
        caps osd = "allow * pool=mypool"
cephadmin@ceph-deploy:~$ ceph auth del client.winnie
updated
cephadmin@ceph-deploy:~$ ceph auth get client.winnie #查看报错没有用户了
Error ENOENT: failed to find client.winnie in keyring
cephadmin@ceph-deploy:~$ ceph auth import -i ceph.client.winnie.keyring #使用import -i keyring导入进去
imported keyring
cephadmin@ceph-deploy:~$ ceph auth get client.winnie #用户重新添加了
[client.winnie]
        key = AQCPFvFllR84FBAApoyoUHWRlkGpXMbmDr+ATg==
        caps mon = "allow r"
        caps osd = "allow * pool=mypool"
exported keyring for client.winnie

##密钥环文件多用户:
#一个 keyring 文件中可以包含多个不同用户的认证文件,
#将多用户导出至密钥环
cephadmin@ceph-deploy:~$ ceph-authtool --create-keyring ceph.client.xks.keyring #创建一个xks用户keyring
creating ceph.client.xks.keyring
cephadmin@ceph-deploy:~$ ceph-authtool ./ceph.client.xks.keyring --import-keyring ./ceph.client.admin.keyring #将amdin keyring 导入到xks文件中
importing contents of ./ceph.client.admin.keyring into ./ceph.client.xks.keyring
cephadmin@ceph-deploy:~$ ceph-authtool -l ./ceph.client.xks.keyring #查看xks keyring配置就是admin keyring的配置
[client.admin]
        key = AQB/0+plFI5DJhAA+TEChHmsGs62RHhTaO/YUg==
        caps mds = "allow *"
        caps mgr = "allow *"
        caps mon = "allow *"
        caps osd = "allow *"
cephadmin@ceph-deploy:~$ ceph-authtool ./ceph.client.xks.keyring --import-keyring ./ceph.client.winnie.keyring #再次将之前的winnie用户的keyring 导入到xks keyring中
importing contents of ./ceph.client.winnie.keyring into ./ceph.client.xks.keyring
cephadmin@ceph-deploy:~$ ceph-authtool -l ./ceph.client.xks.keyring #查看xks keyring配置 amind 和 winnie keyring配置
[client.admin]
        key = AQB/0+plFI5DJhAA+TEChHmsGs62RHhTaO/YUg==
        caps mds = "allow *"
        caps mgr = "allow *"
        caps mon = "allow *"
        caps osd = "allow *"
[client.winnie]
        key = AQCPFvFllR84FBAApoyoUHWRlkGpXMbmDr+ATg==
        caps mon = "allow r"
        caps osd = "allow * pool=mypool"

 

posted @ 2024-03-13 10:42  しみずよしだ  阅读(20)  评论(0)    收藏  举报