6.2. 配置 Active Directory 和 Ceph 对象网关
执行以下步骤,将 Active Directory 服务器配置为对 Ceph 对象网关用户进行身份验证。
6.2.1. 使用 Microsoft Active Directory
Ceph 对象网关 LDAP 身份验证与任何兼容 LDAP 的目录服务兼容,可针对简单绑定(包括 Microsoft Active Directory)进行配置。使用 Active Directory 与使用 RH Directory 服务器类似,Ceph 对象网关绑定为 rgw_ldap_binddn
设置中配置的用户,并使用 LDAP 来确保安全性。
配置 Active Directory 的过程基本上与配置 LDAP 和 Ceph 对象网关相同,但可能有一些特定于 Windows 的用法。
6.2.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
。
6.2.3. 检查网关用户是否存在
在创建网关用户之前,请确保 Ceph 对象网关还没有用户。
示例
[ceph: root@host01 /]# radosgw-admin metadata list user
用户名不应在此用户列表中。
6.2.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 对象网关实例节点上可用。
6.2.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
6.2.6. 将 S3 用户添加到 LDAP 服务器
在 LDAP 服务器上的管理控制台中,至少创建一个 S3 用户,以便 S3 客户端可以使用 LDAP 用户凭据。在将凭据传递给 S3 客户端时,记下要使用的用户名和机密。
6.2.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"
6.2.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": [] }