2.3. Ceph 身份验证
为了识别用户和防止中间人攻击,Ceph 提供其 cephx
身份验证系统,用于验证用户和守护进程。
cephx
协议不会处理通过存储在 OSD 中的网络或数据传输的数据加密。
cephx 使用共享密钥来进行身份验证,这意味着客户端和服务器均有客户端的机密密钥的副本。身份验证协议使双方能够证明其各自具有密钥副本,而无需实际发现它。这提供了 mutual 身份验证,这意味着集群是确保用户具有 secret 密钥,用户则确保集群具有 secret 密钥的副本。
Cephx
cephx
身份验证协议以类似于 Kerberos 的方式运行。
一个用户/actor 可以调用 Ceph 客户端以联系 monitor。与 Kerberos 不同,每个监控器可以验证用户和分发密钥,因此使用 cephx
时没有单点故障或瓶颈。monitor 返回与 Kerberos ticket 类似的身份验证数据结构,其中包含用于获取 Ceph 服务的会话密钥。此会话密钥本身通过用户的永久 secret 密钥加密,以便只有用户可以从 Ceph 监视器请求服务。然后,客户端使用 session 键从 monitor 请求其所需的服务,监控器为客户端提供一个 ticket,将客户端验证实际处理数据的 OSD。Ceph 监视器和 OSD 共享机密,因此客户端可以使用监控器提供的票据以及集群中的任何 OSD 或元数据服务器。与 Kerberos 一样,cephx
票据到期,因此攻击者无法使用过期的票据或会话密钥被大量获得。这种验证形式可防止攻击者访问通信介质的攻击者,可以在另一个用户的身份下创建虚假消息,或者更改其他用户的合法消息,只要用户的机密密钥在过期之前不会被篡改。
要使用 cephx
,管理员必须首先设置用户。在以下示意图中,client.admin
用户从命令行调用 ceph auth get-or-create-key
来生成用户名和密钥。Ceph 的 auth
子系统生成用户名和密钥,使用 monitor(s)存储副本,并将用户的机密信息传输回 client.admin
用户。这意味着客户端和 monitor 共享一个 secret 密钥。
client.admin
用户必须以安全的方式向用户提供用户 ID 和密钥。