注意
本文档适用于 Ceph 的开发版本。
CephX 配置参考
CephX 协议默认启用。CephX 提供的加密身份验证会产生一些计算成本,尽管通常会很低。如果连接客户端和服务器主机的网络环境非常安全,并且您不需要身份验证,则可以将其禁用。通常不建议禁用身份验证。
注意
如果您禁用身份验证,则将面临中间人攻击的风险,该攻击会修改您的客户端/服务器消息,这可能会产生灾难性的安全后果。
有关创建用户的信息,请参阅用户管理。有关 CephX 架构的详细信息,请参阅高可用性身份验证。
部署场景
您最初配置 CephX 的方式取决于您的场景。有两种常见的部署 Ceph 集群的策略。如果您是 Ceph 的初次用户,您应该采用最简单的方法:使用cephadm部署集群。但是,如果您的集群使用其他部署工具(例如 Ansible、Chef、Juju 或 Puppet),您将需要使用手动部署过程或配置您的部署工具以使其能够引导您的监视器。
手动部署
当您手动部署集群时,需要手动引导监视器并创建client.admin用户和密钥环。要引导监视器,请按照监视器引导中的步骤进行操作。在使用第三方部署工具(例如 Chef、Puppet 和 Juju)时,请按照这些步骤进行操作。
启用/禁用 CephX
只有在已部署监视器、OSD 和元数据服务器的密钥后,才能启用 CephX。如果您只是切换 CephX 的开启或关闭,则无需重复引导过程。
启用 CephX
启用 CephX 后,Ceph 将在默认搜索路径中查找密钥环:此路径包括/etc/ceph/$cluster.$name.keyring。可以通过在 Ceph 配置文件的[global]部分添加keyring选项来覆盖此搜索路径位置,但不建议这样做。
要在已禁用身份验证的集群上启用 CephX,请执行以下过程。如果您(或您的部署工具)已生成密钥,则可以跳过与生成密钥相关的步骤。
创建一个
client.admin密钥,并为客户端主机保存一份密钥副本ceph auth get-or-create client.admin mon 'allow *' mds 'allow *' mgr 'allow *' osd 'allow *' -o /etc/ceph/ceph.client.admin.keyring警告:此步骤将覆盖任何现有的
/etc/ceph/client.admin.keyring文件。如果部署工具已为您生成密钥环文件,请勿执行此步骤。请小心!创建监视器密钥环并生成监视器密钥
ceph-authtool --create-keyring /tmp/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'对于每个监视器,将监视器密钥环复制到监视器
mon data目录中的ceph.mon.keyring文件。例如,要将监视器密钥环复制到名为ceph的集群中的mon.a,请运行以下命令cp /tmp/ceph.mon.keyring /var/lib/ceph/mon/ceph-a/keyring为每个 MGR 生成一个密钥,其中
{$id}是 MGR 字母ceph auth get-or-create mgr.{$id} mon 'allow profile mgr' mds 'allow *' osd 'allow *' -o /var/lib/ceph/mgr/ceph-{$id}/keyring为每个 OSD 生成一个密钥,其中
{$id}是 OSD 编号ceph auth get-or-create osd.{$id} mon 'allow rwx' osd 'allow *' -o /var/lib/ceph/osd/ceph-{$id}/keyring为每个 MDS 生成一个密钥,其中
{$id}是 MDS 字母ceph auth get-or-create mds.{$id} mon 'allow rwx' osd 'allow *' mds 'allow *' mgr 'allow profile mds' -o /var/lib/ceph/mds/ceph-{$id}/keyring通过在 Ceph 配置文件的
[global]部分设置以下选项来启用 CephX 身份验证auth_cluster_required = cephx auth_service_required = cephx auth_client_required = cephx
启动或重新启动 Ceph 集群。有关详细信息,请参阅操作集群。
有关手动引导监视器的详细信息,请参阅手动部署。
禁用 CephX
以下过程描述了如何禁用 CephX。如果您的集群环境安全,您可能希望禁用 CephX 以抵消运行身份验证的计算开销。我们不建议这样做。但是,如果暂时禁用身份验证,然后重新启用,设置和故障排除可能会更容易。
配置设置
启用
auth_cluster_required
- 描述:
如果启用此配置设置,则要求 Ceph 存储集群守护程序(即
ceph-mon、ceph-osd、ceph-mds和ceph-mgr)相互进行身份验证。有效设置为cephx或none。- 类型:
String
- 必需:
否
- 默认值:
cephx.
auth_service_required
- 描述:
如果启用此配置设置,则 Ceph 客户端只能在向 Ceph 存储集群进行身份验证后才能访问 Ceph 服务。有效设置为
cephx或none。- 类型:
String
- 必需:
否
- 默认值:
cephx.
auth_client_required
- 描述:
如果启用此配置设置,则只有当 Ceph 存储集群对 Ceph 客户端进行身份验证时,Ceph 客户端和 Ceph 存储集群之间的通信才能建立。有效设置为
cephx或none。- 类型:
String
- 必需:
否
- 默认值:
cephx.
密钥
当启用身份验证运行 Ceph 时,ceph管理命令和 Ceph 客户端只能使用身份验证密钥访问 Ceph 存储集群。
使这些密钥可用于ceph管理命令和 Ceph 客户端的最常见方法是在/etc/ceph目录中包含 Ceph 密钥环。对于使用cephadm的 Octopus 及更高版本,文件名通常为ceph.client.admin.keyring。如果密钥环包含在/etc/ceph目录中,则无需在 Ceph 配置文件中指定keyring条目。
由于 Ceph 存储集群的密钥环文件包含client.admin密钥,因此我们建议将密钥环文件复制到您运行管理命令的节点。
要手动执行此步骤,请运行以下命令
sudo scp {user}@{ceph-cluster-host}:/etc/ceph/ceph.client.admin.keyring /etc/ceph/ceph.client.admin.keyring
提示
确保在客户端计算机上设置了ceph.keyring文件具有适当的权限(例如chmod 644)。
您可以使用 Ceph 配置文件中的key设置指定密钥本身(不推荐此方法),或者使用 Ceph 配置文件中的keyfile设置指定密钥文件的路径。
keyring
- 描述:
密钥环文件的路径。
- 类型:
String
- 必需:
否
- 默认值:
/etc/ceph/$cluster.$name.keyring,/etc/ceph/$cluster.keyring,/etc/ceph/keyring,/etc/ceph/keyring.bin
keyfile
- 描述:
密钥文件的路径(即仅包含密钥的文件)。
- 类型:
String
- 必需:
否
- 默认值:
None
key
- 描述:
密钥(即密钥本身的文本字符串)。除非您知道自己在做什么,否则不建议使用此设置。
- 类型:
String
- 必需:
否
- 默认值:
None
守护程序密钥环
管理用户或部署工具(例如cephadm)生成守护程序密钥环的方式与生成用户密钥环的方式相同。默认情况下,Ceph 将守护程序的密钥环存储在该守护程序的数据目录中。默认密钥环位置和守护程序功能所需的权限如下所示。
ceph-mon
- 位置:
$mon_data/keyring- 功能:
mon 'allow *'
ceph-osd
- 位置:
$osd_data/keyring- 功能:
mgr 'allow profile osd' mon 'allow profile osd' osd 'allow *'
ceph-mds
- 位置:
$mds_data/keyring- 功能:
mds 'allow' mgr 'allow profile mds' mon 'allow profile mds' osd 'allow rwx'
ceph-mgr
- 位置:
$mgr_data/keyring- 功能:
mon 'allow profile mgr' mds 'allow *' osd 'allow *'
radosgw
- 位置:
$rgw_data/keyring- 功能:
mon 'allow rwx' osd 'allow rwx'
注意
监视器密钥环(即mon.)包含一个密钥但没有功能,并且此密钥环不是集群auth数据库的一部分。
守护程序的数据目录位置默认为以下形式的目录
/var/lib/ceph/$type/$cluster-$id
例如,osd.12将具有以下数据目录
/var/lib/ceph/osd/ceph-12
可以覆盖这些位置,但不建议这样做。
签名
Ceph 执行签名检查,为防止消息在传输过程中被篡改(例如,通过“中间人”攻击)提供了一些有限的保护。
与 Ceph 身份验证的其他部分一样,签名允许细粒度控制。您可以启用或禁用客户端与 Ceph 之间以及 Ceph 守护程序之间的服务消息签名。
请注意,即使启用了签名,数据在传输过程中也不会加密。
cephx_require_signatures
- 描述:
如果此配置设置设置为
true,则 Ceph 要求 Ceph 客户端和 Ceph 存储集群之间以及 Ceph 存储集群内的守护程序之间的所有消息流量都包含签名。
注意
过时说明
Ceph Argonaut 和早于 3.19 的 Linux 内核版本都不支持签名;如果正在使用这些客户端之一,则可以禁用cephx_require_signatures以允许客户端连接。
- 类型:
Boolean
- 必需:
否
- 默认值:
false
cephx_cluster_require_signatures
- 描述:
如果此配置设置设置为
true,则 Ceph 要求 Ceph 存储集群内的 Ceph 守护程序之间的所有消息流量都包含签名。- 类型:
Boolean
- 必需:
否
- 默认值:
false
cephx_service_require_signatures
- 描述:
如果此配置设置设置为
true,则 Ceph 要求 Ceph 客户端和 Ceph 存储集群之间的所有消息流量都包含签名。- 类型:
Boolean
- 必需:
否
- 默认值:
false
cephx_sign_messages
- 描述:
如果此配置设置设置为
true,并且 Ceph 版本支持消息签名,则 Ceph 将对所有消息进行签名,以使其更难被欺骗。- 类型:
Boolean
- 默认值:
true
生存时间
auth_service_ticket_ttl
- 描述:
当 Ceph 存储集群向 Ceph 客户端发送用于身份验证的票证时,Ceph 存储集群会为该票证分配一个生存时间 (TTL)。
- 类型:
Double
- 默认值:
60*60