使用 LDAP 和 AD 指南的对象网关
将 Ceph 对象网关配置为使用 LDAP 和 AD 对对象网关用户进行身份验证。
摘要
第 1 章 前言
红帽 Ceph 存储支持轻量级目录访问协议(LDAP)服务器对 Ceph 对象网关用户进行身份验证。为 LDAP 配置集群需要以下内容:
- Ceph 对象网关服务器和 Ceph 存储集群。
- LDAP 服务器。
- LDAPS 的 SSL 证书.
- 用于对 Ceph 对象网关进行身份验证的 LDAP 用户.
- 至少一个 LDAP 用户用于验证 S3 客户端。
第 2 章 配置 LDAP 和 Ceph 对象网关
执行以下步骤配置红帽目录服务器,以对 Ceph 对象网关用户进行身份验证。
2.1. 安装红帽目录服务器
使用命令行
上的主机名,检索 LDAP 主机的完全限定域名(FQDN)。然后,确保在安装之前,可以通过 DNS 或 /etc/hosts
和 resolv.conf 解析
主机 FQDN。
红帽目录服务器应安装在具有图形用户界面(GUI)的红帽企业 Linux 7 服务器上,以便使用 Java Swing GUI 目录和管理控制台。但是,红帽目录服务器仍可以单独从命令行提供服务。要安装红帽目录服务器,请参阅红帽目录服务器 10 的 _Installation Guide_。
2.2. 配置目录服务器防火墙
在 LDAP 主机上,确保防火墙允许访问目录服务器的安全(636
)端口,以便 LDAP 客户端可以访问 Directory 服务器。使默认非安全端口(389
)保持关闭。
# firewall-cmd --zone=public --add-port=636/tcp # firewall-cmd --zone=public --add-port=636/tcp --permanent
2.3. SELinux 的标签端口
为确保 SELinux 不阻止请求,请标记 SELinux 的端口。详情请查看《 红帽目录服务器 10 管理指南》 中的更改目录服务器端口号 一节。
2.4. 配置 LDAPS
Ceph 对象网关使用简单的 ID 和密码与 LDAP 服务器进行身份验证,因此连接需要 LDAP 的 SSL 证书。要为 LDAP 配置目录服务器,请参阅《红帽目录服务器 10 管理指南》 中的配置安全连接 章节。
LDAP 运行后,配置 Ceph 对象网关服务器,以信任目录服务器的证书。
- 为签署 LDAP 服务器的 SSL 证书的证书颁发机构(CA)提取/下载 PEM 格式的证书。
-
确认
/etc/openldap/ldap.conf
没有设置TLS_REQCERT
。 -
确认
/etc/openldap/ldap.conf
包含TLS_CACERTDIR /etc/openldap/certs
设置。 使用
certutil
命令将 AD CA 添加到位于/etc/openldap/certs 的存储中。
例如,如果 CA 是 "msad-frog-MSAD-FROG-CA",且 PEM 格式的 CA 文件为ldap.pem
,请使用以下命令:# certutil -d /etc/openldap/certs -A -t "TC,," -n "msad-frog-MSAD-FROG-CA" -i /path/to/ldap.pem
在所有远程 LDAP 站点更新 SELinux:
# setsebool -P httpd_can_network_connect on
注意即使 SELinux 处于 permissive 模式,这仍需要设置。
使
certs 数据库
变为全局可读。# chmod 644 /etc/openldap/certs/*
以非 root 用户身份使用"ldapwhoami"连接到服务器。例如:
$ ldapwhoami -H ldaps://rh-directory-server.example.com -d 9
d 9
选项将提供调试信息,以防 SSL 协商出现问题。
2.5. 检查网关用户是否存在
在创建网关用户之前,请确保 Ceph 对象网关还没有 用户。例如:
# radosgw-admin metadata list user
用户名不应在此用户列表中。
2.6. 添加网关用户
为 Ceph 对象网关创建 LDAP 用户,并记下 binddn
。由于 Ceph 对象网关使用 ceph
用户,因此请考虑使用 ceph
作为用户名。用户需要具有搜索目录的权限。
测试以确保用户创建有效。其中 ceph 是 People.com 下的用户 ID,而 example.com 是域,您可以对用户执行搜索。
Ceph 对象网关将绑定到 rgw_ldap_binddn
中指定的用户。
测试以确保用户创建有效。其中 ceph
是 People
.com 下的用户 ID,而 example.com
是域,您可以对用户执行搜索。
# ldapsearch -x -D "uid=ceph,ou=People,dc=example,dc=com" -W -H ldaps://example.com -b "ou=People,dc=example,dc=com" -s sub 'uid=ceph'
在每个网关节点上,为用户的机密创建一个文件。例如,机密可能存储在具有 /etc/bindpass
的文件中。为安全起见,请将此文件的所有者更改为 ceph
用户和组,以确保它不能全局可读。
在 Ceph 集群的管理节点上,在 Ceph 配置文件的 [global]
部分中添加 rgw_ldap_secret
设置。例如:
[global] ... rgw_ldap_secret = /etc/bindpass
最后,将更新的配置文件复制到每个 Ceph 节点。
# scp /etc/ceph/ceph.conf <node>:/etc/ceph
2.7. 将网关配置为使用 LDAP
在 Ceph 集群的管理节点上,将下列设置添加到 Ceph 配置文件的 [global]
部分中:例如:
[global] rgw_ldap_uri = ldaps://<fqdn>:636 rgw_ldap_binddn = "<binddn>" rgw_ldap_secret = "/etc/bindpass" rgw_ldap_searchdn = "<seachdn>" rgw_ldap_dnattr = "uid" rgw_s3_auth_use_ldap = true
对于 rgw_ldap_uri
设置,将 <fqdn>
替换为 LDAP 服务器的完全限定域名。如果有多个 LDAP 服务器,请指定每个域。
对于 rgw_ldap_binddn
设置,将 <binddn>
替换为 bind 域。对于 example.com
域以及 用户和
帐户
下的 ceph
用户,它应如下所示:
rgw_ldap_binddn = "uid=ceph,cn=users,cn=accounts,dc=example,dc=com"
对于 rgw_ldap_searchdn
设置,将 <searchdn>
替换为搜索域。对于 example.com
域以及 用户和
,它应如下所示:
帐户
下的用户
rgw_ldap_searchdn = "cn=users,cn=accounts,dc=example,dc=com"
将更新的配置文件复制到每个 Ceph 节点。
scp /etc/ceph/ceph.conf <hostname>:/etc/ceph
最后,重新启动 Ceph 对象网关。它应该是:
# systemctl restart ceph-radosgw # systemctl restart ceph-radosgw@rgw.`hostname -s`
2.8. 使用自定义搜索过滤器
您可以使用 rgw_ldap_searchfilter
设置创建自定义搜索过滤器来限制用户访问。在 Ceph 配置文件的 [global]
部分下指定此设置(/etc/ceph/ceph.conf
)。使用 rgw_ldap_searchfilter
设置的方法有两种:
指定部分过滤器
示例
"objectclass=inetorgperson"
Ceph 对象网关将使用来自令牌的用户名和
rgw_ldap_dnattr
值来生成搜索过滤器。构建的过滤器随后与rgw_ldap_searchfilter
值中的部分过滤器组合。例如,用户名和设置会生成最终搜索过滤器:示例
"(&(uid=joe)(objectclass=inetorgperson))"
只有 LDAP 目录中找到用户
joe
时,他才会被授予访问权限,他的对象类为inetorgperson
,并且指定了有效的密码。指定 Complete Filter
完整的过滤器必须包含
USERNAME
令牌,在身份验证尝试期间,该令牌将被替换为用户名。本例中不使用rgw_ldap_dnattr
设置。例如,要将有效用户限制为特定组,请使用以下过滤器:示例
"(&(uid=@USERNAME@)(memberOf=cn=ceph-users,ou=groups,dc=mycompany,dc=com))"
第 3 章 配置 AD 和 Ceph 对象网关
执行以下步骤,将 Active Directory 服务器配置为对 Ceph 对象网关用户进行身份验证。
3.1. Using Microsoft Active Directory
Ceph 对象网关 LDAP 身份验证与任何兼容 LDAP 的目录服务兼容,可针对简单绑定(包括 Microsoft Active Directory)进行配置。使用 Active Directory 与在 rgw_ldap_binddn
设置中配置的用户身份绑定了 RH Directory 服务器,并使用 LDAP 来确保安全性。
配置 Active Directory 的过程基本上与 配置 LDAP 和 Ceph 对象网关 完全相同,但可能有一些特定于 Windows 的用法。
3.2. 为 LDAPS 配置 Active Directory
Active Directory LDAP 服务器默认配置为使用 LDAP。Windows Server 2012 及更高版本可以使用 Active Directory 证书服务。以下 MS TechNet 文章中提供了生成和安装与 Active Directory LDAP 一起使用的 SSL 证书的说明:LDAP over SSL(LDAPS)证书。
确保 Active Directory 主机上打开了 port 636
。
3.3. 检查网关用户是否存在
在创建网关用户之前,请确保 Ceph 对象网关还没有 用户。例如:
# radosgw-admin metadata list user
用户名不应在此用户列表中。
3.4. 添加网关用户
为 Ceph 对象网关创建 LDAP 用户,并记下 binddn
。由于 Ceph 对象网关使用 ceph
用户,因此请考虑使用 ceph
作为用户名。用户需要具有搜索目录的权限。
测试以确保用户创建有效。其中 ceph 是 People.com 下的用户 ID,而 example.com 是域,您可以对用户执行搜索。
Ceph 对象网关将绑定到 rgw_ldap_binddn
中指定的用户。
测试以确保用户创建有效。其中 ceph
是 People
.com 下的用户 ID,而 example.com
是域,您可以对用户执行搜索。
# ldapsearch -x -D "uid=ceph,ou=People,dc=example,dc=com" -W -H ldaps://example.com -b "ou=People,dc=example,dc=com" -s sub 'uid=ceph'
在每个网关节点上,为用户的机密创建一个文件。例如,机密可能存储在具有 /etc/bindpass
的文件中。为安全起见,请将此文件的所有者更改为 ceph
用户和组,以确保它不能全局可读。
在 Ceph 集群的管理节点上,在 Ceph 配置文件的 [global]
部分中添加 rgw_ldap_secret
设置。例如:
[global] ... rgw_ldap_secret = /etc/bindpass
最后,将更新的配置文件复制到每个 Ceph 节点。
# scp /etc/ceph/ceph.conf <node>:/etc/ceph
3.5. 将网关配置为使用 Active Directory
在 Ceph 集群的管理节点上,在 rgw_ldap_secret
设置后,将下列设置添加到 Ceph 配置文件的 [global]
部分中:例如:
[global] rgw_ldap_secret = "/etc/bindpass" ... rgw_ldap_uri = ldaps://<fqdn>:636 rgw_ldap_binddn = "<binddn>" rgw_ldap_searchdn = "<seachdn>" rgw_ldap_dnattr = "cn" rgw_s3_auth_use_ldap = true
对于 rgw_ldap_uri
设置,将 <fqdn>
替换为 LDAP 服务器的完全限定域名。如果有多个 LDAP 服务器,请指定每个域。
对于 rgw_ldap_binddn
设置,将 <binddn>
替换为 bind 域。对于 example.com
域以及 用户和
帐户
下的 ceph
用户,它应如下所示:
rgw_ldap_binddn = "uid=ceph,cn=users,cn=accounts,dc=example,dc=com"
对于 rgw_ldap_searchdn
设置,将 <searchdn>
替换为搜索域。对于 example.com
域以及 用户和
,它应如下所示:
帐户
下的用户
rgw_ldap_searchdn = "cn=users,cn=accounts,dc=example,dc=com"
将更新的配置文件复制到每个 Ceph 节点。
scp /etc/ceph/ceph.conf <hostname>:/etc/ceph
最后,重新启动 Ceph 对象网关。它应该是:
# systemctl restart ceph-radosgw # systemctl restart ceph-radosgw@rgw.`hostname -s`
第 4 章 测试配置
将 Ceph 对象网关配置为使用 LDAP 验证用户身份后,测试配置。
4.1. 将 S3 用户添加到 LDAP 服务器
在 LDAP 服务器上的管理控制台中,至少创建一个 S3 用户,以便 S3 客户端可以使用 LDAP 用户凭据。在将凭据传递给 S3 客户端时,记下要使用的用户名和机密。
4.2. 导出 LDAP 令牌
使用 LDAP 运行 Ceph 对象网关时,需要访问令牌。但是,访问令牌是从 access key 和 secret 创建的。将 access key 和 secret key 导出为 LDAP 令牌。
导出 access key。
# export RGW_ACCESS_KEY_ID="<username>"
导出该机密。
# export RGW_SECRET_ACCESS_KEY="<password>"
导出令牌。对于 LDAP,使用
ldap
作为令牌类型(ttype
)。# radosgw-token --encode --ttype=ldap
对于 Active Directory,使用
ad
作为令牌类型。# radosgw-token --encode --ttype=ad
结果是一个 base-64 编码字符串,即访问令牌。将此访问令牌提供给 S3 客户端,以代替 access key。不再需要该 secret。
(可选)为方便起见,如果 S3 客户端使用 环境变量,请将 base-64 编码字符串导出到
RGW_ACCESS_KEY_ID
环境变量。# export RGW_ACCESS_KEY_ID="ewogICAgIlJHV19UT0tFTiI6IHsKICAgICAgICAidmVyc2lvbiI6IDEsCiAgICAgICAgInR5cGUiOiAibGRhcCIsCiAgICAgICAgImlkIjogImNlcGgiLAogICAgICAgICJrZXkiOiAiODAwI0dvcmlsbGEiCiAgICB9Cn0K"
4.3. 使用 S3 客户端测试配置
挑选 Ceph 对象网关客户端,如 Python Boto。将它配置为使用 RGW_ACCESS_KEY_ID
环境变量。或者,您可以复制 base-64 编码字符串,并将其指定为 access key。然后,运行 Ceph 客户端。
不再需要该 secret。