第 6 章 高级配置
作为存储管理员,您可以配置 Ceph 对象网关的一些更高级功能。您可以配置多站点 Ceph 对象网关,并将其与目录服务(如 Microsoft Active Directory 和 OpenStack Keystone 服务)集成。
先决条件
- 一个正常运行的 Red Hat Ceph Storage 集群。
6.1. 配置 LDAP 和 Ceph 对象网关
执行以下步骤配置红帽目录服务器,以对 Ceph 对象网关用户进行身份验证。
6.1.1. 安装红帽目录服务器
Red Hat Directory Server 应该安装在带有图形用户界面(GUI)的 Red Hat Enterprise Linux 9 中,以便使用 Java Swing GUI Directory 和管理控制台。但是,红帽目录服务器仍可以从命令行界面(CLI)单独提供服务。
先决条件
- Red Hat Enterprise Linux(RHEL)安装在服务器上。
-
Directory 服务器节点的 FQDN 可使用 DNS 或
/etc/hosts
文件解析。 - 将 Directory Server 节点注册到红帽订阅管理服务。
- 您的红帽帐户中提供了有效的红帽目录服务器订阅。
其它资源
- 如需了解更多详细信息,请参阅 Red Hat Director 服务器安装指南 。
6.1.2. 配置目录服务器防火墙
在 LDAP 主机上,确保防火墙允许访问目录服务器的安全(636
)端口,以便 LDAP 客户端可以访问 Directory 服务器。使默认非安全端口(389
)保持关闭。
# firewall-cmd --zone=public --add-port=636/tcp # firewall-cmd --zone=public --add-port=636/tcp --permanent
6.1.3. SELinux 的标签端口
为确保 SELinux 不阻止请求,请标记 SELinux 的端口。详情请查看红帽目录服务器 10 管理指南中的更改目录服务器端口号一节。
6.1.4. 配置 LDAPS
Ceph 对象网关使用简单的 ID 和密码与 LDAP 服务器进行身份验证,因此连接需要 LDAP 的 SSL 证书。要为 LDAP 配置目录服务器,请参阅 Red Hat Directory Server 11 管理指南中的 配置安全连接 章节。
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 协商出现问题。
6.1.5. 检查网关用户是否存在
在创建网关用户之前,请确保 Ceph 对象网关还没有用户。
示例
[ceph: root@host01 /]# radosgw-admin metadata list user
用户名不应在此用户列表中。
6.1.6. 添加网关用户
创建 Ceph 对象网关用户到用户 LDAP。
流程
-
为 Ceph 对象网关创建 LDAP 用户,并记下
binddn
。由于 Ceph 对象网关使用ceph
用户,因此请考虑使用ceph
作为用户名。用户需要具有搜索目录的权限。Ceph 对象网关按照rgw_ldap_binddn
中指定的绑定到此用户。 测试以确保用户创建有效。其中
ceph
是People
下的用户 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
用户和组,以确保它不能全局可读。 添加
rgw_ldap_secret
选项:语法
ceph config set client.rgw OPTION VALUE
示例
[ceph: root@host01 /]# ceph config set client.rgw rgw_ldap_secret /etc/bindpass
将绑定密码文件修补到 Ceph 对象网关容器,并重新应用 Ceph 对象网关规格:
示例
service_type: rgw service_id: rgw.1 service_name: rgw.rgw.1 placement: label: rgw extra_container_args: - -v - /etc/bindpass:/etc/bindpass
注意Red Hat Ceph Storage 不会自动提供
/etc/bindpass
,您需要确保内容在所有可能的 Ceph 对象网关实例节点上可用。
6.1.7. 将网关配置为使用 LDAP
在所有 Ceph 节点上使用以下命令更改 Ceph 配置:
语法
ceph config set client.rgw OPTION VALUE
示例
[ceph: root@host01 /]# ceph config set client.rgw rgw_ldap_uri ldaps://:636 [ceph: root@host01 /]# ceph config set client.rgw rgw_ldap_binddn "ou=poc,dc=example,dc=local" [ceph: root@host01 /]# ceph config set client.rgw rgw_ldap_searchdn "ou=poc,dc=example,dc=local" [ceph: root@host01 /]# ceph config set client.rgw rgw_ldap_dnattr "uid" [ceph: root@host01 /]# ceph config set client.rgw rgw_s3_auth_use_ldap true
重新启动 Ceph 对象网关。
注意使用
ceph orch ps
命令的输出,在NAME
列下获取 SERVICE_TYPE。ID 信息。在存储集群中的单个节点上重启 Ceph 对象网关:
语法
systemctl restart ceph-CLUSTER_ID@SERVICE_TYPE.ID.service
示例
[root@host01 ~]# systemctl restart ceph-c4b34c6f-8365-11ba-dc31-529020a7702d@rgw.realm.zone.host01.gwasto.service
在存储集群的所有节点上重启 Ceph 对象网关:
语法
ceph orch restart SERVICE_TYPE
示例
[ceph: root@host01 /]# ceph orch restart rgw
6.1.8. 使用自定义搜索过滤器
您可以使用 rgw_ldap_searchfilter
设置创建自定义搜索过滤器来限制用户访问。使用 rgw_ldap_searchfilter
设置的方法有两种:
指定部分过滤器:
示例
"objectclass=inetorgperson"
Ceph 对象网关使用令牌的用户名和
rgw_ldap_dnattr
的值生成搜索过滤器。构建的过滤器随后与rgw_ldap_searchfilter
值中的部分过滤器组合。例如,用户名和设置会生成最终搜索过滤器:示例
"(&(uid=joe)(objectclass=inetorgperson))"
只有 LDAP 目录中找到了用户
joe
时,才会授予访问权限,具有inetorgperson
的对象类并指定有效的密码。指定完整的过滤器:
完整的过滤器必须包含
USERNAME
令牌,该令牌在身份验证尝试期间替换为用户名。本例中不使用rgw_ldap_dnattr
设置。例如,要将有效用户限制为特定组,请使用以下过滤器:示例
"(&(uid=@USERNAME@)(memberOf=cn=ceph-users,ou=groups,dc=mycompany,dc=com))"
6.1.9. 将 S3 用户添加到 LDAP 服务器
在 LDAP 服务器上的管理控制台中,至少创建一个 S3 用户,以便 S3 客户端可以使用 LDAP 用户凭据。在将凭据传递给 S3 客户端时,记下要使用的用户名和机密。
6.1.10. 导出 LDAP 令牌
使用 LDAP 运行 Ceph 对象网关时,需要访问令牌。但是,访问令牌是从 access key 和 secret key 创建的。将 access key 和 secret key 导出为 LDAP 令牌。
导出访问密钥:
语法
export RGW_ACCESS_KEY_ID="USERNAME"
导出 secret 密钥:
语法
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"
6.1.11. 使用 S3 客户端测试配置
使用 Python Boto 等脚本,使用 Ceph 对象网关客户端测试配置。
流程.
使用
RGW_ACCESS_KEY_ID
环境变量配置 Ceph 对象网关客户端。或者,您可以复制 base-64 编码字符串,并将其指定为 access key。以下是配置的 S3 客户端的示例:示例
cat .aws/credentials [default] aws_access_key_id = ewogICaGbnjlwe9UT0tFTiI6IHsKICAgICAgICAidmVyc2lvbiI6IDEsCiAgICAgICAgInR5cGUiOiAiYWQiLAogICAgICAgICJpZCI6ICJjZXBoIiwKICAgICAgICAia2V5IjogInBhc3M0Q2VwaCIKICAgIH0KfQo= aws_secret_access_key =
注意不再需要 secret 密钥。
运行
aws s3 ls
命令来验证用户:示例
[root@host01 ~]# aws s3 ls --endpoint http://host03 2023-12-11 17:08:50 mybucket 2023-12-24 14:55:44 mybucket2
可选: 您还可以运行
radosgw-admin user
命令来验证目录中的用户:示例
[root@host01 ~]# radosgw-admin user info --uid dir1 { "user_id": "dir1", "display_name": "dir1", "email": "", "suspended": 0, "max_buckets": 1000, "subusers": [], "keys": [], "swift_keys": [], "caps": [], "op_mask": "read, write, delete", "default_placement": "", "default_storage_class": "", "placement_tags": [], "bucket_quota": { "enabled": false, "check_on_raw": false, "max_size": -1, "max_size_kb": 0, "max_objects": -1 }, "user_quota": { "enabled": false, "check_on_raw": false, "max_size": -1, "max_size_kb": 0, "max_objects": -1 }, "temp_url_keys": [], "type": "ldap", "mfa_ids": [] }