注意

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

LDAP 身份验证

Jewel 版本中的新增功能。

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

工作原理

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

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

LDAP凭据必须在服务器上可用以执行LDAP身份验证。确保将日志级别设置为足够低以隐藏base-64编码的凭据/访问令牌。rgw log level low enough to hide the base-64-encoded credentials / access tokens.

要求

  • LDAP或活动目录:一个可被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

Note

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

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

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

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

  • rgw_ldap_uri: 指定要使用的LDAP服务器。确保使用ldaps://<fqdn>:<port>参数以防止通过线路传输明文凭据。

  • rgw_ldap_binddn: Ceph对象网关使用的服务账户的区分名(DN)

  • rgw_ldap_secret: 包含Ceph对象网关凭据的文件路径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))"

Note

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

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

The 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 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.