5.4. 配置 Active Directory 和 Ceph 对象网关
执行以下步骤,将 Active Directory 服务器配置为对 Ceph 对象网关用户进行身份验证。
5.4.1. 使用 Microsoft Active Directory
Ceph 对象网关 LDAP 身份验证与任何兼容 LDAP 的目录服务兼容,可针对简单绑定(包括 Microsoft Active Directory)进行配置。使用 Active Directory 与在 中使用 RH Directory 服务器相似,Ceph 对象网关绑定到 rgw_ldap_binddn
设置中配置的用户,并使用 LDAP 来确保安全性。
配置 Active Directory 的过程与 配置 LDAP 和 Ceph 对象网关基本相同,但可能有一些特定于 Windows 的用法。
5.4.2. 为 LDAPS 配置 Active Directory
Active Directory LDAP 服务器默认配置为使用 LDAP。Windows Server 2012 及更高版本可以使用 Active Directory 证书服务。以下 MS TechNet 文章中提供了生成和安装与 Active Directory LDAP 一起使用的 SSL 证书的说明:LDAP over SSL (LDAPS) Certificate。
确保 Active Directory 主机上打开了 port 636
。
5.4.3. 检查网关用户是否存在
在创建网关用户之前,请确保 Ceph 对象网关还没有该用户。
示例
[ceph: root@host01 /]# radosgw-admin metadata list user
用户名不应在此用户列表中。
5.4.4. 添加网关用户
创建 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 对象网关实例节点上可用。
5.4.5. 将网关配置为使用 Active Directory
设置
rgw_ldap_secret
设置后添加以下选项:语法
ceph config set client.rgw OPTION VALUE
示例
[ceph: root@host01 /]# ceph config set client.rgw rgw_ldap_uri ldaps://_FQDN_:636 [ceph: root@host01 /]# ceph config set client.rgw rgw_ldap_binddn "_BINDDN_" [ceph: root@host01 /]# ceph config set client.rgw rgw_ldap_searchdn "_SEARCHDN_" [ceph: root@host01 /]# ceph config set client.rgw rgw_ldap_dnattr "cn" [ceph: root@host01 /]# ceph config set client.rgw rgw_s3_auth_use_ldap true
对于
rgw_ldap_uri
设置,使用 LDAP 服务器的完全限定域名替换 FQDN。如果有多个 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
域以及users
和accounts
下的用户,它应如下所示:rgw_ldap_searchdn "cn=users,cn=accounts,dc=example,dc=com"
重启 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
5.4.6. 在 LDAP 服务器中添加 S3 用户
在 LDAP 服务器上的管理控制台中,至少创建一个 S3 用户,以便 S3 客户端可以使用 LDAP 用户凭证。在将凭据传递给 S3 客户端时,记下要使用的用户名和机密。
5.4.7. 导出 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"
5.4.8. 使用 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": [] }