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。

流程

  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.4.5. 将网关配置为使用 Active Directory

  1. 设置 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 域以及 usersaccounts 下的用户,它应如下所示:

    rgw_ldap_searchdn "cn=users,cn=accounts,dc=example,dc=com"
  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.4.6. 在 LDAP 服务器中添加 S3 用户

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

5.4.7. 导出 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.4.8. 使用 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.