注意

本文档适用于 Ceph 的开发版本。

LDAP 身份验证

版本 Jewel 新增。

您可以将 Ceph 对象网关身份验证委托给 LDAP 服务器。

工作原理

Ceph 对象网关从令牌中提取用户的 LDAP 凭证。使用用户名构建搜索过滤器。Ceph 对象网关使用配置的服务帐户在目录中搜索匹配的条目。如果找到条目,Ceph 对象网关将尝试使用令牌中的密码绑定到找到的可分辨名称。如果凭证有效,绑定将成功,Ceph 对象网关将授予访问权限,并使用提供的用户名创建 radosgw-user。

您可以通过将搜索基设置为特定的组织单位或指定自定义搜索过滤器来限制允许的用户,例如要求特定的组成员身份、自定义对象类或属性。

LDAP 凭证必须在服务器上可用才能执行 LDAP 身份验证。确保将 rgw 日志级别设置得足够低,以隐藏 base-64 编码的凭证/访问令牌。

要求

  • LDAP 或 Active Directory: Ceph 对象网关可访问的正在运行的 LDAP 实例

  • 服务帐户: Ceph 对象网关使用的具有搜索权限的 LDAP 凭证

  • 用户帐户: LDAP 目录中至少一个用户帐户

  • 不要重叠 LDAP 和本地用户: 您不应为本地用户和使用 LDAP 身份验证的用户使用相同的用户名。Ceph 对象网关无法区分它们,并将它们视为同一用户。

健全性检查

使用 ldapsearch 实用程序验证服务帐户或 LDAP 连接

# ldapsearch -x -D "uid=ceph,ou=system,dc=example,dc=com" -W \
-H ldaps://example.com -b "ou=users,dc=example,dc=com" 'uid=*' dn

注意

确保使用与 Ceph 配置文件中相同的 LDAP 参数,以消除可能的问题。

配置 Ceph 对象网关以使用 LDAP 身份验证

Ceph 配置文件中的以下参数与 LDAP 身份验证相关

  • rgw_s3_auth_use_ldap:将其设置为 true 以启用 S3 LDAP 身份验证

  • rgw_ldap_uri:指定要使用的 LDAP 服务器。确保使用 ldaps://<fqdn>:<port> 参数,以避免通过网络传输明文凭证。

  • rgw_ldap_binddn:Ceph 对象网关使用的服务帐户的可分辨名称 (DN)

  • rgw_ldap_secret:包含 rgw_ldap_binddn 凭证的文件的路径

  • rgw_ldap_searchdn:指定目录信息树中搜索用户的基。这可能是您的用户组织单位或一些更具体的组织单位 (OU)。

  • rgw_ldap_dnattr:用于构造搜索过滤器以匹配用户名的属性。根据您的目录信息树 (DIT),这可能是 uidcn。生成的过滤器字符串将是,例如,cn=some_username

  • rgw_ldap_searchfilter:如果未指定,Ceph 对象网关将自动使用 rgw_ldap_dnattr 设置构造搜索过滤器。使用此参数可以以非常灵活的方式缩小允许的用户列表。有关详细信息,请参阅“使用自定义搜索过滤器限制用户访问”部分

使用自定义搜索过滤器限制用户访问

有两种方法使用 rgw_search_filter 参数

指定部分过滤器以进一步限制构建的搜索过滤器

部分过滤器的示例

"objectclass=inetorgperson"

Ceph 对象网关将照常使用令牌中的用户名和 rgw_ldap_dnattr 的值生成搜索过滤器。然后将构造的过滤器与 rgw_search_filter 属性中的部分过滤器结合起来。根据用户名和设置,最终的搜索过滤器可能变为

"(&(uid=hari)(objectclass=inetorgperson))"

因此,只有当用户 hari 在 LDAP 目录中找到,具有 inetorgperson 对象类,并且指定了有效的密码时,才会授予访问权限。

指定完整过滤器

完整过滤器必须包含一个 @USERNAME@ 令牌,该令牌将在身份验证尝试期间替换为用户名。在这种情况下,rgw_ldap_dnattr 参数不再使用。例如,要将有效用户限制为特定组,请使用以下过滤器

"(&(uid=@USERNAME@)(memberOf=cn=ceph-users,ou=groups,dc=mycompany,dc=com))"

注意

在 LDAP 搜索中使用 memberOf 属性需要您特定的 LDAP 服务器实现的服务器端支持。

为 LDAP 身份验证生成访问令牌

radosgw-token 实用程序根据 LDAP 用户名和密码生成访问令牌。它将输出一个 base-64 编码的字符串,即访问令牌。

# export RGW_ACCESS_KEY_ID="<username>"
# export RGW_SECRET_ACCESS_KEY="<password>"
# radosgw-token --encode

重要

访问令牌是一个 base-64 编码的 JSON 结构,包含明文 LDAP 凭证。

或者,如果用户没有安装 radosgw-token 工具,他们也可以通过 base-64 编码此 JSON 片段来手动生成令牌。

{
  "RGW_TOKEN": {
    "version": 1,
    "type": "ldap",
    "id": "your_username",
    "key": "your_clear_text_password_here"
  }
}

使用访问令牌

使用您喜欢的 S3 客户端,并在客户端或环境变量中将令牌指定为访问密钥。

# export AWS_ACCESS_KEY_ID=<base64-encoded token generated by radosgw-token>
# export AWS_SECRET_ACCESS_KEY="" # define this with an empty string, otherwise tools might complain about missing env variables.

重要

访问令牌是一个 base-64 编码的 JSON 结构,包含明文 LDAP 凭证。除非您想共享您的明文密码,否则请勿共享它!

由 Ceph 基金会为您呈现

Ceph 文档是由非营利性 Ceph 基金会 资助和托管的社区资源。如果您希望支持这项工作和我们的其他努力,请考虑 立即加入