5.3. 配置 LDAP 和 Ceph 对象网关


执行以下步骤配置 Red Hat Directory Server 以对 Ceph 对象网关用户进行身份验证。

5.3.1. 安装红帽目录服务器

红帽目录服务器应该安装在带有图形用户界面(GUI)的 Red Hat Enterprise Linux 8 中,以便使用 Java Swing GUI Directory 和管理控制台。但是,红帽目录服务器仍可以从命令行界面(CLI)单独提供服务。

先决条件

  • Red Hat Enterprise Linux(RHEL)安装在服务器上。
  • Directory 服务器节点的 FQDN 可使用 DNS 或 /etc/hosts 文件解析。
  • 将 Directory Server 节点注册到红帽订阅管理服务。
  • 您的红帽帐户中提供了有效的红帽目录服务器订阅。

流程

  • 按照红帽目录服务器安装指南第 1 章第 2 章中的内容进行操作。

其它资源

5.3.2. 配置 Directory 服务器防火墙

在 LDAP 主机上,确保防火墙允许访问目录服务器的安全(636)端口,以便 LDAP 客户端可以访问 Directory 服务器。使默认非安全端口(389)保持关闭。

# firewall-cmd --zone=public --add-port=636/tcp
# firewall-cmd --zone=public --add-port=636/tcp --permanent

5.3.3. SELinux 的标签端口

为确保 SELinux 不阻止请求,请标记 SELinux 的端口。详情请查看红帽目录服务器 10 管理指南中的更改目录服务器端口号一节。

5.3.4. 配置 LDAPS

Ceph 对象网关使用简单的 ID 和密码与 LDAP 服务器进行身份验证,因此连接需要 LDAP 的 SSL 证书。要为 LDAP 配置目录服务器,请参阅 Red Hat Directory Server 11 管理指南中的 配置 安全连接章节。

LDAP 运行后,配置 Ceph 对象网关服务器,以信任目录服务器的证书。

  1. 为签署 LDAP 服务器的 SSL 证书的证书颁发机构(CA)提取/下载 PEM 格式的证书。
  2. 确认 /etc/openldap/ldap.conf 没有设置 TLS_REQCERT
  3. 确认 /etc/openldap/ldap.conf 包含 TLS_CACERTDIR /etc/openldap/certs 设置。
  4. 使用 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

  5. 在所有远程 LDAP 站点更新 SELinux:

    示例

    # setsebool -P httpd_can_network_connect on

    注意

    即使 SELinux 处于 permissive 模式,这仍需要设置。

  6. 使 certs 数据库全局可读:

    示例

    # chmod 644 /etc/openldap/certs/*

  7. 以非 root 用户身份使用"ldapwhoami"命令连接到服务器。

    示例

    $ ldapwhoami -H ldaps://rh-directory-server.example.com -d 9

    -d 9 选项将提供调试信息,以防 SSL 协商出现问题。

5.3.5. 检查网关用户是否存在

在创建网关用户之前,请确保 Ceph 对象网关还没有该用户。

示例

[ceph: root@host01 /]# radosgw-admin metadata list user

用户名不应在此用户列表中。

5.3.6. 添加网关用户

创建 Ceph 对象网关用户到用户 LDAP。

流程

  1. 为 Ceph 对象网关创建 LDAP 用户,并记下 binddn。由于 Ceph 对象网关使用 ceph 用户,因此请考虑使用 ceph 作为用户名。用户需要具有搜索目录的权限。Ceph 对象网关按照 rgw_ldap_binddn 中指定的绑定到此用户。
  2. 测试以确保用户创建有效。其中 cephPeople 下的用户 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'
  3. 在每个网关节点上,为用户的机密创建一个文件。例如,机密可能存储在具有 /etc/bindpass 的文件中。为安全起见,请将此文件的所有者更改为 ceph 用户和组,以确保它不能全局可读。
  4. 添加 rgw_ldap_secret 选项:

    语法

    ceph config set client.rgw OPTION VALUE

    示例

    [ceph: root@host01 /]# ceph config set client.rgw rgw_ldap_secret /etc/bindpass

  5. 将绑定密码文件修补到 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.3.7. 配置网关以使用 LDAP

  1. 在所有 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

  2. 重新启动 Ceph 对象网关。

    注意

    使用 ceph orch ps 命令的输出(在 NAME 列下),获取 SERVICE_TYPE.ID 信息。

    1. 要在存储集群中的单个节点上重启 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

    2. 在存储集群的所有节点上重启 Ceph 对象网关:

      语法

      ceph orch restart SERVICE_TYPE

      示例

      [ceph: root@host01 /]# ceph orch restart rgw

5.3.8. 使用自定义搜索过滤器

您可以使用 rgw_ldap_searchfilter 设置创建自定义搜索过滤器来限制用户访问。使用 rgw_ldap_searchfilter 设置的方法有两种:

  1. 指定部分过滤器:

    示例

    "objectclass=inetorgperson"

    Ceph 对象网关从令牌生成带有用户名的搜索过滤器,以及 rgw_ldap_dnattr 的值。构建的过滤器随后与 rgw_ldap_searchfilter 值中的部分过滤器组合。例如,用户名和设置会生成最终搜索过滤器:

    示例

    "(&(uid=joe)(objectclass=inetorgperson))"

    用户 joe 仅在 LDAP 目录中找到,具有 inetorgperson 的对象类,并指定有效的密码。

  2. 指定完整的过滤器:

    完整的过滤器必须包含 USERNAME 令牌,在身份验证尝试期间使用用户名替换。本例中不使用 rgw_ldap_dnattr 设置。例如,要将有效用户限制为特定组,请使用以下过滤器:

    示例

    "(&(uid=@USERNAME@)(memberOf=cn=ceph-users,ou=groups,dc=mycompany,dc=com))"

5.3.9. 在 LDAP 服务器中添加 S3 用户

在 LDAP 服务器上的管理控制台中,至少创建一个 S3 用户,以便 S3 客户端可以使用 LDAP 用户凭证。在将凭据传递给 S3 客户端时,记下要使用的用户名和机密。

5.3.10. 导出 LDAP 令牌

使用 LDAP 运行 Ceph 对象网关时,需要访问令牌。但是,访问令牌是从 access key 和 secret key 创建的。将 access key 和 secret key 导出为 LDAP 令牌。

  1. 导出访问密钥:

    语法

    export RGW_ACCESS_KEY_ID="USERNAME"

  2. 导出 secret 密钥:

    语法

    export RGW_SECRET_ACCESS_KEY="PASSWORD"

  3. 导出令牌。对于 LDAP,使用 ldap 作为令牌类型(ttype)。

    示例

    radosgw-token --encode --ttype=ldap

    对于 Active Directory,使用 ad 作为令牌类型。

    示例

    radosgw-token --encode --ttype=ad

    结果是一个 base-64 编码字符串,即访问令牌。将此访问令牌提供给 S3 客户端,以代替 access key。不再需要 secret 密钥。

  4. 可选:为方便起见,如果 S3 客户端使用环境变量,请将 base-64 编码的字符串导出到 RGW_ACCESS_KEY_ID 环境变量。

    示例

    export RGW_ACCESS_KEY_ID="ewogICAgIlJHV19UT0tFTiI6IHsKICAgICAgICAidmVyc2lvbiI6IDEsCiAgICAgICAgInR5cGUiOiAibGRhcCIsCiAgICAgICAgImlkIjogImNlcGgiLAogICAgICAgICJrZXkiOiAiODAwI0dvcmlsbGEiCiAgICB9Cn0K"

5.3.11. 使用 S3 客户端测试配置

使用 Python Boto 等脚本,使用 Ceph 对象网关客户端测试配置。

流程

  1. 使用 RGW_ACCESS_KEY_ID 环境变量配置 Ceph 对象网关客户端。或者,您可以复制 base-64 编码字符串,并将其指定为 access key。以下是配置的 S3 客户端的示例:

    示例

    cat .aws/credentials
    
    [default]
    aws_access_key_id = ewogICaGbnjlwe9UT0tFTiI6IHsKICAgICAgICAidmVyc2lvbiI6IDEsCiAgICAgICAgInR5cGUiOiAiYWQiLAogICAgICAgICJpZCI6ICJjZXBoIiwKICAgICAgICAia2V5IjogInBhc3M0Q2VwaCIKICAgIH0KfQo=
    aws_secret_access_key =

    注意

    不再需要 secret 密钥。

  2. 运行 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

  3. 可选: 您还可以运行 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": []
    }

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.