将 OpenStack 身份与外部用户管理服务集成

Red Hat OpenStack Platform 16.1

使用 Active Directory 或 Red Hat Identity Management 作为外部身份验证后端

OpenStack Documentation Team

摘要

将 OpenStack Identity (keystone)服务与 Microsoft Active Directory 域服务(AD DS)、Red Hat Identity Management (IdM)和 LDAP 集成。

使开源包含更多

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。详情请查看 CTO Chris Wright 信息 . :leveloffset: +0

对红帽文档提供反馈

我们感谢您对文档提供反馈信息。与我们分享您的成功秘诀。

使用直接文档反馈(DDF)功能

使用 添加反馈 DDF 功能,用于特定句子、段落或代码块上的直接注释。

  1. Multi-page HTML 格式查看文档。
  2. 请确定您看到文档右上角的 反馈 按钮。
  3. 用鼠标指针高亮显示您想评论的文本部分。
  4. 添加反馈
  5. 添加反馈项中输入您的意见。
  6. 可选:添加您的电子邮件地址,以便文档团队可以联系您以讨论您的问题。
  7. Submit

第 1 章 将 OpenStack 身份(keystone)与 Active Directory 集成

您可以将 OpenStack Identity (keystone)与 Microsoft Active Directory 域服务(AD DS)集成。Identity Service 验证特定的活动目录域服务(AD DS)用户,但在 Identity Service 数据库中保留授权设置和关键服务帐户。因此,Identity Service 对 AD DS 具有对用户帐户身份验证的只读访问权限,并继续管理分配给经过身份验证的帐户的权限。

通过将 Identity 服务与 AD DS 集成,您可以允许 AD DS 用户向 Red Hat OpenStack Platform (RHOSP)进行身份验证来访问资源。RHOSP 服务帐户(如 Identity Service 和 Image 服务)和授权管理保留在 Identity Service 数据库中。使用 Identity Service 管理工具将权限和角色分配给 AD DS 帐户。

将 OpenStack Identity 与 Active Directory 集成的过程包括以下阶段:

  1. 配置 Active Directory 凭证并导出 LDAPS 证书
  2. 在 OpenStack 中安装和配置 LDAPS 证书
  3. 将 director 配置为使用一个或多个 LDAP 后端
  4. 配置 Controller 节点以访问 Active Directory 后端
  5. 配置 Active Directory 用户或组对 OpenStack 项目的访问权限
  6. 验证域和用户列表是否已正确创建
  7. 可选:为非管理员用户创建凭证文件。

1.1. 配置 Active Directory 凭证

要将 Active Directory 域服务(AD DS)配置为与 OpenStack 身份集成,请为 Identity 服务设置 LDAP 帐户,为 Red Hat OpenStack 用户创建一个用户组,并导出要在 Red Hat OpenStack Platform 部署中使用的 LDAPS 证书公钥。

先决条件

  • Active Directory Domain Services 已配置并运行。
  • Red Hat OpenStack Platform 已配置和操作。
  • DNS 名称解析功能全面,所有主机都被正确注册。
  • AD DS 身份验证流量使用 LDAPS 进行加密,使用端口 636。
  • 建议:使用高可用性或负载平衡解决方案实施 AD DS,以避免出现单点故障。

流程

在 Active Directory 服务器上执行这些步骤。

  1. 创建 LDAP 查找帐户。Identity Service 使用这个帐户查询 AD DS LDAP 服务:

    PS C:\> New-ADUser -SamAccountName svc-ldap -Name "svc-ldap" -GivenName LDAP -Surname Lookups -UserPrincipalName svc-ldap@lab.local  -Enabled $false -PasswordNeverExpires $true -Path 'OU=labUsers,DC=lab,DC=local'
  2. 为此帐户设置密码,然后启用它。系统将提示您指定一个符合 AD 域复杂性要求的密码:

    PS C:\> Set-ADAccountPassword svc-ldap -PassThru | Enable-ADAccount
  3. 为 RHOSP 用户创建一个名为 grp-openstack 的组。只有此组的成员才能在 OpenStack Identity 中分配权限。

    PS C:\> NEW-ADGroup -name "grp-openstack" -groupscope Global -path "OU=labUsers,DC=lab,DC=local"
  4. 创建项目组:

    PS C:\> NEW-ADGroup -name "grp-openstack-demo" -groupscope Global -path "OU=labUsers,DC=lab,DC=local"
    PS C:\> NEW-ADGroup -name "grp-openstack-admin" -groupscope Global -path "OU=labUsers,DC=lab,DC=local"
  5. svc-ldap 用户添加到 grp-openstack 组中:

    PS C:\> ADD-ADGroupMember "grp-openstack" -members "svc-ldap"
  6. 从 AD 域控制器,使用证书 MMC 将 LDAPS 证书的公钥(而不是私钥)导出为 DER 编码的 x509 .cer 文件。将此文件发送到 RHOSP 管理员。
  7. 检索 AD DS 域的 NetBIOS 名称。

    PS C:\> Get-ADDomain | select NetBIOSName
    NetBIOSName
    -----------
    LAB

    将这个值发送到 RHOSP 管理员。

1.2. 安装 Active Directory LDAPS 证书

OpenStack Identity (keystone)使用 LDAPS 查询来验证用户帐户。要加密此流量,keystone 使用 keystone.conf 定义的证书文件。要配置 LDAPS 证书,请将从 Active Directory 接收的公钥转换为 .crt 格式,并将证书复制到 keystone 可以引用它的位置。

注意

当使用多个域进行 LDAP 身份验证时,您可能会收到各种错误,如 Unable to retrieve authorized projects或者 Peer 的证书签发者无法识别。如果 keystone 对某个域使用不正确的证书,会出现这种情况。作为临时解决方案,将所有 LDAPS 公钥合并到单个 .crt 捆绑包中,并将所有 keystone 域配置为使用此文件。

先决条件

  • 配置了 Active Directory 凭证。
  • LDAPS 证书是从 Active Directory 导出的。

流程

  1. 将 LDAPS 公钥复制到运行 OpenStack 身份的节点,并将 .cer 转换为 .crt。这个示例使用名为 addc.lab.local.cer 的源证书文件:

    # openssl x509 -inform der -in addc.lab.local.cer -out addc.lab.local.crt
    # cp addc.lab.local.crt /etc/pki/ca-trust/source/anchors
  2. 可选:如果您需要运行诊断命令,如 ldapsearch,您还需要将证书添加到 RHEL 证书存储中:

    1. .cer 转换为 .pem。这个示例使用名为 addc.lab.local.cer 的源证书文件:

      # openssl x509 -inform der -in addc.lab.local.cer -out addc.lab.local.pem
    2. 在 Controller 节点上安装 .pem。例如,在 Red Hat Enterprise Linux 中:

      # cp addc.lab.local.pem /etc/pki/ca-trust/source/anchors/
      # update-ca-trust

1.3. 配置 director 以使用域特定的 LDAP 后端

要将 director 配置为使用一个或多个 LDAP 后端,请在 heat 模板中将 KeystoneLDAPDomainEnable 标志设置为 true,并使用每个 LDAP 后端的信息设置环境文件。然后,director 会为每个 keystone 域使用单独的 LDAP 后端。

注意

域配置文件的默认目录设置为 /etc/keystone/domains/。您可以使用 keystone::domain_config_directory hiera 键设置所需的路径,并将它添加为环境文件中的 ExtraConfig 参数来覆盖它。

流程

  1. 在部署的 heat 模板中,将 KeystoneLDAPDomainEnable 标志设置为 true。这会在 identity 配置组中的 keystone 中的 domain_specific_drivers_enabled 选项。
  2. 通过在 tripleo-heat-templates 中设置 KeystoneLDAPBackendConfigs 参数来添加 LDAP 后端配置的规格,然后您可以指定所需的 LDAP 选项。
  3. 创建 keystone_domain_specific_ldap_backend.yaml 环境文件的副本:

    $ cp /usr/share/openstack-tripleo-heat-templates/environments/services/keystone_domain_specific_ldap_backend.yaml /home/stack/templates/
  4. 编辑 /home/stack/templates/keystone_domain_specific_ldap_backend.yaml 环境文件,并设置这些值以适应您的部署。例如,此参数为名为 testdomain 的 keystone 域创建 LDAP 配置:

        parameter_defaults:
          KeystoneLDAPDomainEnable: true
          KeystoneLDAPBackendConfigs:
            testdomain:
              url: ldaps://192.0.2.250
              user: cn=openstack,ou=Users,dc=director,dc=example,dc=com
              password: RedactedComplexPassword
              suffix: dc=director,dc=example,dc=com
              user_tree_dn: ou=Users,dc=director,dc=example,dc=com
              user_filter: "(memberOf=cn=OSuser,ou=Groups,dc=director,dc=example,dc=com)"
              user_objectclass: person
              user_id_attribute: cn
    注意

    keystone_domain_specific_ldap_backend.yaml 环境文件包含以下已弃用的写入参数:

    • user_allow_create
    • user_allow_update
    • user_allow_delete

    这些参数的值对部署没有影响,可以安全地删除。

  5. 可选:在环境文件中添加更多域。例如:

        KeystoneLDAPBackendConfigs:
          domain1:
            url: ldaps://domain1.example.com
            user: cn=openstack,ou=Users,dc=director,dc=example,dc=com
            password: RedactedComplexPassword
            ...
          domain2:
            url: ldaps://domain2.example.com
            user: cn=openstack,ou=Users,dc=director,dc=example,dc=com
            password: RedactedComplexPassword
            ...

    这会导致名为 domain1domain2 的两个域;各自具有不同的 LDAP 域,它们都有自己的配置。

1.4. 授予 admin 用户对 OpenStack 身份域的访问权限

要允许 admin 用户访问 OpenStack Identity (keystone)域并查看 Domain 选项卡,获取域的 ID 和 admin 用户,然后将 admin 角色分配给域中的用户。

注意

这不会授予 OpenStack admin 帐户对外部服务域的任何权限。在这种情况下,术语 domain 指的是 OpenStack 对 keystone 域的使用。

流程

此流程使用 LAB 域。使用您要配置的域的实际名称替换域名。

  1. 获取 LAB 域的 ID:

    $ openstack domain show LAB
    +---------+----------------------------------+
    | Field   | Value                            |
    +---------+----------------------------------+
    | enabled | True                             |
    | id      | 6800b0496429431ab1c4efbb3fe810d4 |
    | name    | LAB                              |
    +---------+----------------------------------+
  2. 默认域 获取 admin 用户的 ID:

    $ openstack user list --domain default | grep admin
    | 3d75388d351846c6a880e53b2508172a | admin      |
  3. 获取 admin 角色的 ID:

    $ openstack role list

    输出取决于您集成的外部服务:

    • Active Directory Domain Service (AD DS):

      +----------------------------------+-----------------+
      | ID                               | Name            |
      +----------------------------------+-----------------+
      | 01d92614cd224a589bdf3b171afc5488 | admin           |
      | 034e4620ed3d45969dfe8992af001514 | member          |
      | 0aa377a807df4149b0a8c69b9560b106 | ResellerAdmin   |
      | 9369f2bf754443f199c6d6b96479b1fa | heat_stack_user |
      | cfea5760d9c948e7b362abc1d06e557f | reader          |
      | d5cb454559e44b47aaa8821df4e11af1 | swiftoperator   |
      | ef3d3f510a474d6c860b4098ad658a29 | service         |
      +----------------------------------+-----------------+
    • Red Hat Identity Manager (IdM):

      +----------------------------------+---------------+
      | ID                               | Name          |
      +----------------------------------+---------------+
      | 544d48aaffde48f1b3c31a52c35f01f9 | SwiftOperator |
      | 6d005d783bf0436e882c55c62457d33d | ResellerAdmin |
      | 785c70b150ee4c778fe4de088070b4cf | admin         |
      | 9fe2ff9ee4384b1894a90878d3e92bab | _member_      |
      +----------------------------------+---------------+
  4. 使用 domain 和 admin ID 来构造命令,将 admin 用户添加到 keystone LAB 域的 admin 角色中:

    # openstack role add --domain 6800b0496429431ab1c4efbb3fe810d4 --user 3d75388d351846c6a880e53b2508172a 785c70b150ee4c778fe4de088070b4cf

1.5. 授予外部组对 Red Hat OpenStack Platform 项目的访问权限

要授予多个经过身份验证的用户对 Red Hat OpenStack Platform (RHOSP)资源的访问权限,您可以授权外部用户管理服务中的某些组授予 RHOSP 项目的访问权限,而不必要求 OpenStack 管理员手动将每个用户分配到项目中的角色。因此,这些组的所有成员都可以访问预先确定的项目。

先决条件

  • 确保外部服务管理员完成以下步骤:

    • 创建名为 grp-openstack-admin 的组。
    • 创建名为 grp-openstack-demo 的组。
    • 根据需要,将 RHOSP 用户添加到这些组中。
    • 将您的用户添加到 grp-openstack 组。
  • 创建 OpenStack 身份域。此流程使用 LAB 域。
  • 创建或选择 RHOSP 项目。这流程使用一个名为 demo 的项目,这项目由 openstack project create --domain default --description "Demo Project" demo 命令创建。

流程

  1. 从 OpenStack 身份域检索用户组列表:

    # openstack group list --domain LAB

    命令输出取决于您集成的外部用户管理服务:

    • Active Directory Domain Service (AD DS):

      +------------------------------------------------------------------+---------------------+
      | ID                                                               | Name                |
      +------------------------------------------------------------------+---------------------+
      | 185277be62ae17e498a69f98a59b66934fb1d6b7f745f14f5f68953a665b8851 | grp-openstack       |
      | a8d17f19f464c4548c18b97e4aa331820f9d3be52654aa8094e698a9182cbb88 | grp-openstack-admin |
      | d971bb3bd5e64a454cbd0cc7af4c0773e78d61b5f81321809f8323216938cae8 | grp-openstack-demo  |
      +------------------------------------------------------------------+---------------------+
    • Red Hat Identity Manager (IdM):

      +------------------------------------------------------------------+---------------------+
      | ID                                                               | Name                |
      +------------------------------------------------------------------+---------------------+
      | 185277be62ae17e498a69f98a59b66934fb1d6b7f745f14f5f68953a665b8851 | grp-openstack       |
      | a8d17f19f464c4548c18b97e4aa331820f9d3be52654aa8094e698a9182cbb88 | grp-openstack-admin |
      | d971bb3bd5e64a454cbd0cc7af4c0773e78d61b5f81321809f8323216938cae8 | grp-openstack-demo  |
      +------------------------------------------------------------------+---------------------+
  2. 检索角色列表:

    # openstack role list

    命令输出取决于您集成的外部用户管理服务:

    • Active Directory Domain Service (AD DS):

      +----------------------------------+-----------------+
      | ID                               | Name            |
      +----------------------------------+-----------------+
      | 01d92614cd224a589bdf3b171afc5488 | admin           |
      | 034e4620ed3d45969dfe8992af001514 | member          |
      | 0aa377a807df4149b0a8c69b9560b106 | ResellerAdmin   |
      | 9369f2bf754443f199c6d6b96479b1fa | heat_stack_user |
      | cfea5760d9c948e7b362abc1d06e557f | reader          |
      | d5cb454559e44b47aaa8821df4e11af1 | swiftoperator   |
      | ef3d3f510a474d6c860b4098ad658a29 | service         |
      +----------------------------------+-----------------+
    • Red Hat Identity Manager (IdM):

      +----------------------------------+---------------+
      | ID                               | Name          |
      +----------------------------------+---------------+
      | 0969957bce5e4f678ca6cef00e1abf8a | ResellerAdmin |
      | 1fcb3c9b50aa46ee8196aaaecc2b76b7 | admin         |
      | 9fe2ff9ee4384b1894a90878d3e92bab | _member_      |
      | d3570730eb4b4780a7fed97eba197e1b | SwiftOperator |
      +----------------------------------+---------------+
  3. 通过将用户组添加到一个或多个这些角色,来授予用户对 RHOSP 项目的访问权限。例如,如果您希望 grp-openstack-demo 组中的用户是 demo 项目的普通用户,您必须将该组添加到 member_member_ 角色中,具体取决于您要集成的外部服务:

    • Active Directory Domain Service (AD DS):

      # openstack role add --project demo --group d971bb3bd5e64a454cbd0cc7af4c0773e78d61b5f81321809f8323216938cae8  member
    • Red Hat Identity Manager (IdM):

      $ openstack role add --project demo --group d971bb3bd5e64a454cbd0cc7af4c0773e78d61b5f81321809f8323216938cae8  _member_

结果

grp-openstack-demo 的成员可通过输入其用户名和密码并在 Domain 字段中输入 6443 登录到仪表板:

domain
注意

如果用户收到错误 Error: Unable to retrieve container list。 它应该能够管理容器,则必须将它们添加到 SwiftOperator 角色中。

1.6. 授予外部用户访问 Red Hat OpenStack Platform 项目

要从 grp-openstack 组中授予特定经过身份验证的用户,您可以向这些用户授予 Red Hat OpenStack Platform (RHOSP)项目的直接访问。如果您要向单个用户授予访问权限,而不是向组授予访问权限,请使用此过程。

先决条件

  • 确保外部服务管理员完成以下步骤:

    • 将您的 RHOSP 用户添加到 grp-openstack 组中。
    • 创建 OpenStack 身份域.此流程使用 LAB 域。
  • 创建或选择 RHOSP 项目。这流程使用一个名为 demo 的项目,这项目由 openstack project create --domain default --description "Demo Project" demo 命令创建。

流程

  1. 从 OpenStack 身份域检索用户列表:

    # openstack user list --domain LAB
     +------------------------------------------------------------------+----------------+
    | ID                                                               | Name           |
    +------------------------------------------------------------------+----------------+
    | 1f24ec1f11aeb90520079c29f70afa060d22e2ce92b2eba7784c841ac418091e | user1          |
    | 12c062faddc5f8b065434d9ff6fce03eb9259537c93b411224588686e9a38bf1 | user2          |
    | afaf48031eb54c3e44e4cb0353f5b612084033ff70f63c22873d181fdae2e73c | user3          |
    | e47fc21dcf0d9716d2663766023e2d8dc15a6d9b01453854a898cabb2396826e | user4          |
    +------------------------------------------------------------------+----------------+
  2. 检索角色列表:

    # openstack role list

    命令输出取决于您集成的外部用户管理服务:

    • Active Directory Domain Service (AD DS):

      +----------------------------------+-----------------+
      | ID                               | Name            |
      +----------------------------------+-----------------+
      | 01d92614cd224a589bdf3b171afc5488 | admin           |
      | 034e4620ed3d45969dfe8992af001514 | member          |
      | 0aa377a807df4149b0a8c69b9560b106 | ResellerAdmin   |
      | 9369f2bf754443f199c6d6b96479b1fa | heat_stack_user |
      | cfea5760d9c948e7b362abc1d06e557f | reader          |
      | d5cb454559e44b47aaa8821df4e11af1 | swiftoperator   |
      | ef3d3f510a474d6c860b4098ad658a29 | service         |
      +----------------------------------+-----------------+
    • Red Hat Identity Manager (IdM):

      +----------------------------------+---------------+
      | ID                               | Name          |
      +----------------------------------+---------------+
      | 0969957bce5e4f678ca6cef00e1abf8a | ResellerAdmin |
      | 1fcb3c9b50aa46ee8196aaaecc2b76b7 | admin         |
      | 9fe2ff9ee4384b1894a90878d3e92bab | _member_      |
      | d3570730eb4b4780a7fed97eba197e1b | SwiftOperator |
      +----------------------------------+---------------+
  3. 通过将他们添加到一个或多个这些角色来授予用户对 RHOSP 项目的访问权限。例如,如果您希望 user1demo 项目的一个一般用户,您可以将它们添加到member_member_ 角色中(具体取决于您集成的外部服务)。

    • Active Directory Domain Service (AD DS):

      # openstack role add --project demo --user 1f24ec1f11aeb90520079c29f70afa060d22e2ce92b2eba7784c841ac418091e member
    • Red Hat Identity Manager (IdM):

      # openstack role add --project demo --user 1f24ec1f11aeb90520079c29f70afa060d22e2ce92b2eba7784c841ac418091e _member_
  4. 如果您希望 user1demo 项目的管理用户,请将该用户添加到 admin 角色中:

    # openstack role add --project demo --user 1f24ec1f11aeb90520079c29f70afa060d22e2ce92b2eba7784c841ac418091e admin

结果

user1 用户可以通过输入其外部用户名和密码并在 Domain 字段中输入 LAB 登录到控制面板:

domain
注意

如果用户收到错误 Error: Unable to retrieve container list。 它应该能够管理容器,则必须将它们添加到 SwiftOperator 角色中。

1.7. 查看 OpenStack 身份域和用户列表

使用 openstack domain list 命令列出可用条目。在 Identity Service 中配置多个域,可在仪表板登录页面中启用一个新的 Domain 字段。用户应输入与其登录凭据匹配的域。

重要

完成集成后,您需要决定是否在 Default 域中创建新项目,还是在新创建的 keystone 域中创建新项目。您必须考虑您的工作流以及如何管理用户帐户。如果可能,使用 Default 域作为内部域来管理服务帐户和 admin 项目,并将外部用户保留在单独的域中。

在本例中,外部帐户需要指定 LAB 域。内置的 keystone 帐户(如 admin )必须指定 Default 作为其域。

流程

  1. 显示域列表:

    # openstack domain list
    +----------------------------------+---------+---------+----------------------------------------------------------------------+
    | ID                               | Name    | Enabled | Description                                                          |
    +----------------------------------+---------+---------+----------------------------------------------------------------------+
    | 6800b0496429431ab1c4efbb3fe810d4 | LAB     | True    |                                                                      |
    | default                          | Default | True    | Owns users and projects available on Identity API v2. |
    +----------------------------------+---------+---------+----------------------------------------------------------------------+
  2. 显示特定域中的用户列表。这个命令指定了 --domain the,并返回属于 grp-openstack 组成员的用户,该域中的用户:

    # openstack user list --domain LAB

    您还可以附加 --domain Default 来显示内置 keystone 帐户:

    # openstack user list --domain Default

1.8. 为非管理员用户创建凭据文件

为 OpenStack 身份配置用户和域后,您可能需要为非管理员用户创建凭据文件。

流程

  • 为非管理员用户创建凭证(RC)文件。本例使用文件中的 user1 用户。

    $ cat overcloudrc-v3-user1
    # Clear any old environment that may conflict.
    for key in $( set | awk '{FS="="}  /^OS_/ {print $1}' ); do unset $key ; done
    export OS_USERNAME=user1
    export NOVA_VERSION=1.1
    export OS_PROJECT_NAME=demo
    export OS_PASSWORD=RedactedComplexPassword
    export OS_NO_CACHE=True
    export COMPUTE_API_VERSION=1.1
    export no_proxy=,10.0.0.5,192.168.2.11
    export OS_CLOUDNAME=overcloud
    export OS_AUTH_URL=https://10.0.0.5:5000/v3
    export OS_AUTH_TYPE=password
    export PYTHONWARNINGS="ignore:Certificate has no, ignore:A true
    SSLContext object is not available"
    export OS_IDENTITY_API_VERSION=3
    export OS_PROJECT_DOMAIN_NAME=Default
    export OS_USER_DOMAIN_NAME=LAB

1.9. 测试 OpenStack Identity 与外部用户管理服务集成

要测试 OpenStack Identity (keystone)是否成功与 Active Directory 域服务(AD DS)集成,请测试用户对仪表板功能的访问权限。

先决条件

  • 与外部用户管理服务集成,如 Active Directory (AD)或 Red Hat Identity Manager (IdM)

流程

  1. 在外部用户管理服务中创建测试用户,并将用户添加到 grp-openstack 组中。
  2. 在 Red Hat OpenStack Platform 中,将用户添加到 demo 项目的 _member_ 角色中。
  3. 使用 AD 测试用户的凭证登录到控制面板。
  4. 单击每个选项卡,以确认它们成功显示且没有错误消息。
  5. 使用控制面板构建测试实例。
注意

如果您在这些步骤时遇到问题,请使用 admin 帐户登录控制面板,然后以该用户身份执行后续步骤。如果测试成功,这意味着 OpenStack 仍然按预期工作,并且 OpenStack Identity 和 Active Directory 之间的集成设置出现问题。

1.10. Active Directory 集成故障排除

如果您在使用 Active Directory 与 OpenStack Identity 集成时遇到问题,您可能需要测试 LDAP 连接或测试证书信任配置。您可能还需要检查 LDAPS 端口是否可以访问。

注意

根据错误类型和位置,仅执行此流程中的相关步骤。

流程

  1. 使用 ldapsearch 命令远程对 Active Directory 域控制器执行测试查询来测试 LDAP 连接。这里有一个成功的结果表示网络连接正在正常工作,AD DS 服务已启动。在本例中,针对服务器 addc.lab.local 在端口 636 上执行测试查询:

    # ldapsearch -Z -x -H ldaps://addc.lab.local:636 -D "svc-ldap@lab.local" -W -b "OU=labUsers,DC=lab,DC=local" -s sub "(cn=*)" cn
    注意
    • ldapsearchopenldap-clients 软件包的一部分。您可以使用 evince dnf install openldap-clients 进行安装
    • 此命令需要在主机操作系统中找到必要的证书。
  2. 如果您在测试 ldapsearch 命令时 无法识别 Peer 的证书签发者 错误,请确认您的 TLS_CACERTDIR 路径设置正确。例如:

    TLS_CACERTDIR /etc/openldap/certs
  3. 作为临时解决方案,请考虑禁用证书验证。

    重要

    不得永久配置此设置。

    /etc/openldap/ldap.conf 中,设置 TLS_REQCERT 参数 以允许

    TLS_REQCERT allow

    如果在设置这个值后 ldapsearch 查询可以正常工作,您可能需要检查您的证书信任是否正确配置。

  4. 使用 nc 命令检查是否远程访问 LDAPS 端口 636。在本例中,针对服务器 addc.lab.local 执行探测。按 ctrl-c 退出提示符。

    # nc -v addc.lab.local 636
    Ncat: Version 6.40 ( http://nmap.org/ncat )
    Ncat: Connected to 192.168.200.10:636.
    ^C

    如果无法建立连接,这可能表示防火墙配置问题。

第 2 章 将 OpenStack 身份(keystone)与红帽身份管理器(IdM)集成

当您将 OpenStack Identity (keystone)与 Red Hat Identity Manager (IdM)集成时,OpenStack Identity 会验证某些 Red Hat Identity Management (IdM)用户,但在 Identity Service 数据库中保留授权设置和关键服务帐户。因此,Identity Service 对 IdM 具有对 IdM 进行用户帐户身份验证的只读访问权限,同时保留对分配给经过身份验证的帐户的权限的管理。您还可以使用 tripleo-ipanovajoin 将节点注册到 IdM。

注意

此集成的配置文件由 Puppet 管理。因此,您添加的任何自定义配置都会在下次运行 openstack overcloud deploy 命令时被覆盖。您可以使用 director 配置 LDAP 身份验证,而不是手动编辑配置文件。

在计划并配置 IdM 集成前,请查看以下关键术语:

  • 身份验证 - 使用密码验证用户是否声明的进程。
  • 授权 - 验证经过身份验证的用户对试图访问的系统具有适当权限。
  • - 请参阅在 Identity Service 中配置的额外后端。例如,可将 Identity Service 配置为从外部 IdM 环境验证用户身份。生成的用户集合可以被视为

将 OpenStack 身份与 IdM 集成的过程包括以下阶段:

  1. 使用 novajoin 在 IdM 中注册 undercloud 和 overcloud
  2. 使用 Ansible 在 undercloud 和 overcloud 中实施 TLS-e
  3. 配置 IdM 服务器凭证并导出 LDAPS 证书
  4. 在 OpenStack 中安装和配置 LDAPS 证书
  5. 将 director 配置为使用一个或多个 LDAP 后端
  6. 配置 Controller 节点以访问 IdM 后端
  7. 配置 IdM 用户或组对 OpenStack 项目的访问权限
  8. 验证域和用户列表是否已正确创建
  9. 可选:为非管理员用户创建凭证文件

2.1. 规划 Red Hat Identity Manager (IdM)集成

当您计划 OpenStack 身份与红帽身份管理(IdM)集成时,请确保服务都已配置并运行,并查看集成对用户管理和防火墙设置的影响。

先决条件
  • 红帽身份管理已配置和操作。
  • Red Hat OpenStack Platform 已配置和操作。
  • DNS 名称解析功能全面,所有主机都被正确注册。
权限和角色
此集成允许 IdM 用户对 OpenStack 进行身份验证并访问资源。OpenStack 服务帐户(如 keystone 和 glance)和授权管理(权限和角色)将保留在 Identity Service 数据库中。使用 Identity Service 管理工具将权限和角色分配给 IdM 帐户。
高可用性选项
此配置会为单个 IdM 服务器的可用性创建一个依赖项:如果 Identity Service 无法向 IdM 服务器进行身份验证,则项目用户将会受到影响。您可以将 keystone 配置为查询不同的 IdM 服务器,应该不可用,也可以使用负载均衡器。将 IdM 与 SSSD 搭配使用时不要使用负载均衡器,因为此配置已在客户端上实施故障转移。
中断要求
  • 需要重启 Identity Service 来添加 IdM 后端。
  • 在 IdM 中创建帐户之前,用户无法访问控制面板。要减少停机时间,请考虑在此更改前预先执行 IdM 帐户。
防火墙配置

IdM 和 OpenStack 之间的通信包括:

  • 验证用户
  • IdM 每两小时从控制器检索证书撤销列表(CRL)
  • 过期后对新证书的 certmonger 请求
注意

如果初始请求失败,定期 certmonger 任务将继续请求新证书。

如果防火墙在 IdM 和 OpenStack 之间过滤流量,则需要通过以下端口允许访问:

目的地类型端口

OpenStack Controller 节点

Red Hat Identity Management

LDAPS

TCP 636

2.2. OpenStack 的身份管理(IdM)服务器建议

红帽提供了以下信息以帮助您集成 IdM 服务器和 OpenStack 环境。

有关为 IdM 安装准备 Red Hat Enterprise Linux 的详情,请参考 安装身份管理

运行 ipa-server-install 命令来安装和配置 IdM。您可以使用命令参数跳过交互式提示。使用以下建议,以便您的 IdM 服务器可以与您的 Red Hat OpenStack Platform 环境集成:

表 2.1. 参数建议

选项建议

--admin-password

请注意您提供的值。配置 Red Hat OpenStack Platform 以用于 IdM 时,您将需要此密码。

--ip-address

请注意您提供的值。undercloud 和 overcloud 节点需要网络访问此 ip 地址。

--setup-dns

使用这个选项在 IdM 服务器上安装集成的 DNS 服务。undercloud 和 overcloud 节点使用 IdM 服务器进行域名解析。

--auto-forwarders

使用这个选项使用 /etc/resolv.conf 中的地址作为 DNS 转发器。

--auto-reverse

使用这个选项解析 IdM 服务器 IP 地址的反向记录和区域。如果反向记录或区域无法解析,IdM 会创建反向区域。这简化了 IdM 部署。

--ntp-server, --ntp-pool

您可以使用这两个选项或其中一个选项来配置 NTP 源。IdM 服务器和 OpenStack 环境必须具有正确的和同步时间。

您必须打开 IdM 所需的防火墙端口,以启用与 Red Hat OpenStack Platform 节点的通信。如需更多信息,请参阅打开 IdM 所需的端口

2.3. 使用 Ansible 实现 TLS-e

您可以使用新的 tripleo-ipa 方法在 overcloud 端点上启用 SSL/TLS,在任何位置称为 TLS (TLS-e)。由于所需的证书数量,Red Hat OpenStack Platform 与 Red Hat Identity Management (IdM)集成。当您使用 tripleo-ipa 配置 TLS-e 时,IdM 是证书颁发机构。

先决条件

确保 undercloud 的所有配置步骤(如创建 stack 用户)已完成。如需了解更多详细信息,请参阅 Director 安装和使用 以了解更多详细信息

流程

使用以下步骤在 Red Hat OpenStack Platform 的新安装或您要使用 TLS-e 配置的现有部署中实施 TLS-e。如果在预置备节点中使用 TLS-e 部署 Red Hat OpenStack Platform,则必须使用此方法。

注意

如果您要为现有环境实施 TLS-e,则需要运行命令,如 openstack undercloud installopenstack overcloud deploy。这些过程是幂等的,仅调整现有的部署配置,以匹配更新的模板和配置文件。

  1. 配置 /etc/resolv.conf 文件:

    /etc/resolv.conf 中设置 undercloud 上的适当的搜索域和名称服务器。例如,如果部署域是 example.com,并且 FreeIPA 服务器的域是 bigcorp.com,那么将以下行添加到 /etc/resolv.conf 中:

    search example.com bigcorp.com
    nameserver $IDM_SERVER_IP_ADDR
  2. 安装所需的软件:

    sudo dnf install -y python3-ipalib python3-ipaclient krb5-devel
  3. 使用特定于您的环境的值导出环境变量:

    export IPA_DOMAIN=bigcorp.com
    export IPA_REALM=BIGCORP.COM
    export IPA_ADMIN_USER=$IPA_USER
    export IPA_ADMIN_PASSWORD=$IPA_PASSWORD
    export IPA_SERVER_HOSTNAME=ipa.bigcorp.com
    export UNDERCLOUD_FQDN=undercloud.example.com
    export USER=stack
    export CLOUD_DOMAIN=example.com
    注意

    IdM 用户凭证必须是可添加新主机和服务的管理用户。

  4. 在 undercloud 上运行 undercloud-ipa-install.yaml ansible playbook:

    ansible-playbook \
    --ssh-extra-args "-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" \
    /usr/share/ansible/tripleo-playbooks/undercloud-ipa-install.yaml
  5. 在 undercloud.conf 中添加以下参数

    undercloud_nameservers = $IDM_SERVER_IP_ADDR
    overcloud_domain_name = example.com
  6. 部署 undercloud:

    openstack undercloud install

验证

通过完成以下步骤验证 undercloud 是否已正确注册:

  1. 列出 IdM 中的主机:

    $ kinit admin
    $ ipa host-find
  2. 确认 undercloud 上存在 /etc/novajoin/krb5.keytab

    ls /etc/novajoin/krb5.keytab
注意

novajoin 目录名称仅用于传统的命名目的。

在 overcloud 上配置 TLS-e

当您随处使用 TLS 部署 overcloud 时,来自 Undercloud 和 Overcloud 的 IP 地址将自动注册到 IdM。

  1. 在部署 overcloud 之前,创建一个 YAML 文件 tls-parameters.yaml,其内容类似如下。您选择的值将特定于您的环境:

    parameter_defaults:
        DnsSearchDomains: ["example.com"]
        DnsServers: ["192.168.1.13"]
        CloudDomain: example.com
        CloudName: overcloud.example.com
        CloudNameInternal: overcloud.internalapi.example.com
        CloudNameStorage: overcloud.storage.example.com
        CloudNameStorageManagement: overcloud.storagemgmt.example.com
        CloudNameCtlplane: overcloud.ctlplane.example.com
        IdMServer: freeipa-0.redhat.local
        IdMDomain: redhat.local
        IdMInstallClientPackages: False
    
    resource_registry:
          OS::TripleO::Services::IpaClient: /usr/share/openstack-tripleo-heat-templates/deployment/ipa/ipaservices-baremetal-ansible.yaml
    • OS::TripleO::Services::IpaClient 参数显示的值会覆盖 enable-internal-tls.yaml 文件中的默认设置。您必须确保 openstack overcloud deploy 命令中的 tls-parameters.yaml 文件遵循 enable-internal-tls.yaml
    • 有关用来实现 TLS-e 的参数的更多信息,请参阅 tripleo-ipa 的参数
  2. 部署 overcloud。您需要在部署命令中包含 tls-parameters.yaml :

    DEFAULT_TEMPLATES=/usr/share/openstack-tripleo-heat-templates/
    CUSTOM_TEMPLATES=/home/stack/templates
    
    openstack overcloud deploy \
    -e ${DEFAULT_TEMPLATES}/environments/ssl/tls-everywhere-endpoints-dns.yaml \
    -e ${DEFAULT_TEMPLATES}/environments/services/haproxy-public-tls-certmonger.yaml \
    -e ${DEFAULT_TEMPLATES}/environments/ssl/enable-internal-tls.yaml \
    -e ${CUSTOM_TEMPLATES}/tls-parameters.yaml \
    ...
  3. 通过查询 keystone 获取端点列表来确认每个端点正在使用 HTTPS:

    openstack endpoint list

2.4. 使用 novajoin 在 Red Hat Identity Manager (IdM)中注册节点

novajoin 是作为部署过程的一部分,用来在 Red Hat Identity Manager (IdM)中注册节点的默认工具。红帽建议通过默认的 novajoin 解决方案设置新的基于 ansible 的 tripleo-ipa 解决方案,以使用 TLS 配置 undercloud 和 overcloud。如需更多信息,请参阅使用 Ansible 实施 TLS

您必须执行注册过程,然后才能执行 IdM 集成的其余部分。注册过程包括以下步骤:

  1. 将 undercloud 节点添加到证书颁发机构(CA)
  2. 将 undercloud 节点添加到 IdM
  3. 可选:将 IdM 服务器设置为 overcloud 的 DNS 服务器
  4. 准备环境文件并部署 overcloud
  5. 在 IdM 和 RHOSP 中测试 overcloud 注册
  6. 可选:在 IdM 中为 novajoin 添加 DNS 条目
注意

带有 novajoin 的 IdM 注册目前仅适用于 undercloud 和 overcloud 节点。在以后的版本中,支持用于 overcloud 实例的 novajoin 集成。

2.4.1. 将 undercloud 节点添加到证书颁发机构中

在部署 overcloud 之前,请通过在 undercloud 节点上安装 python3-novajoin 软件包并运行 novajoin-ipa-setup 脚本,将 undercloud 添加到证书颁发机构(CA)中。

流程

  1. 在 undercloud 节点上安装 python3-novajoin 软件包:

    $ sudo dnf install python3-novajoin
  2. 在 undercloud 节点上,运行 novajoin-ipa-setup 脚本,并调整值以符合您的部署:

    $ sudo /usr/libexec/novajoin-ipa-setup \
        --principal admin \
        --password <IdM admin password> \
        --server <IdM server hostname> \
        --realm <realm> \
        --domain <overcloud cloud domain> \
        --hostname <undercloud hostname> \
        --precreate

    使用生成的一次性密码(OTP)来注册 undercloud。

2.4.2. 将 undercloud 节点添加到 Red Hat Identity Manager (IdM)

将 undercloud 节点添加到证书颁发机构(CA)后,将 undercloud 注册到 IdM 并配置 novajoin。在 undercloud.conf 文件的 [DEFAULT] 部分中配置以下设置:

流程

  1. 启用 novajoin 服务:

    [DEFAULT]
    enable_novajoin = true
  2. 设置一次性密码(OTP),以便您可以使用 IdM 注册 undercloud 节点:

    ipa_otp = <otp>
  3. 将 overcloud 的域名设置为由 neutron 的 DHCP 服务器提供:

    overcloud_domain_name = <domain>
  4. 为 undercloud 设置主机名:

    undercloud_hostname = <undercloud FQDN>
  5. 将 IdM 设置为 undercloud 的名称服务器:

    undercloud_nameservers = <IdM IP>
  6. 对于较大的环境,请查看 novajoin 连接超时值。在 undercloud.conf 文件中,添加对名为 undercloud-timeout.yaml 的新文件的引用:

    hieradata_override = /home/stack/undercloud-timeout.yaml

    undercloud-timeout.yaml 中添加以下选项。您可以指定超时值(以秒为单位),例如 5

    nova::api::vendordata_dynamic_connect_timeout: <timeout value>
    nova::api::vendordata_dynamic_read_timeout: <timeout value>
  7. 可选: 如果您希望本地 openSSL 证书颁发机构为 director 中的公共端点生成 SSL 证书,请将 generate_service_certificate 参数设置为 true

    generate_service_certificate = true
  8. 保存 undercloud.conf 文件。
  9. 运行 undercloud 部署命令,将更改应用到现有的 undercloud:

    $ openstack undercloud install

验证

通过完成以下步骤验证 undercloud 是否已正确注册:

  1. 列出 IdM 中的主机:

    $ kinit admin
    $ ipa host-find
  2. 确认 undercloud 上存在 /etc/novajoin/krb5.keytab

    ls /etc/novajoin/krb5.keytab

2.4.3. 将 Red Hat Identity Manager (IdM)设置为 overcloud 的 DNS 服务器

要启用 IdM 环境的自动检测并方便注册,请将 IdM 设置为您的 DNS 服务器。这个过程是可选的,但推荐使用。

流程

  1. 连接到 undercloud:

    $ source ~/stackrc
  2. 将 control plane 子网配置为使用 IdM 作为 DNS 名称服务器:

    $ openstack subnet set ctlplane-subnet --dns-nameserver  <idm_server_address>
  3. 在环境文件中设置 DnsServers 参数以使用您的 IdM 服务器:

    parameter_defaults:
      DnsServers: ["<idm_server_address>"]

    此参数通常在自定义 network-environment.yaml 文件中定义。

2.4.4. 准备环境文件并使用 novajoin 注册部署 overcloud

要使用 IdM 集成部署 overcloud,您可以创建和编辑环境文件,将 overcloud 配置为根据您在 overcloud 中定义的域使用自定义域参数 CloudDomainCloudName。然后,您可以使用所有环境文件以及部署所需的任何其他环境文件来部署 overcloud。

流程

  1. 创建 /usr/share/openstack-tripleo-heat-templates/environments/predictable-placement/custom-domain.yaml 环境文件的副本:

    $ cp /usr/share/openstack-tripleo-heat-templates/environments/predictable-placement/custom-domain.yaml \
      /home/stack/templates/custom-domain.yaml
  2. 编辑 /home/stack/templates/custom-domain.yaml 环境文件,并设置 CloudDomainCloudName bang 值以适合您的部署:

    parameter_defaults:
      CloudDomain: lab.local
      CloudName: overcloud.lab.local
      CloudNameInternal: overcloud.internalapi.lab.local
      CloudNameStorage: overcloud.storage.lab.local
      CloudNameStorageManagement: overcloud.storagemgmt.lab.local
      CloudNameCtlplane: overcloud.ctlplane.lab.local
  3. 选择适合您的环境的 TLS 的实施:

    • 使用 enable-tls.yaml 环境文件来保护带有自定义证书的外部端点:

      1. /usr/share/openstack-tripleo-heat-templates/environments/ssl/enable-tls.yaml 复制到 /home/stack/templates
      2. 修改 /home/stack/enable-tls.yaml 环境文件,使其包含您的自定义证书和密钥。
      3. 在部署中包含以下环境文件,以保护内部和外部端点:

        • enable-internal-tls.yaml
        • tls-every-endpoints-dns.yaml
        • custom-domain.yaml
        • enable-tls.yaml

          openstack overcloud deploy \
            --templates \
            -e /usr/share/openstack-tripleo-heat-templates/environments/ssl/enable-internal-tls.yaml \
            -e /usr/share/openstack-tripleo-heat-templates/environments/ssl/tls-everywhere-endpoints-dns.yaml \
            -e /home/stack/templates/custom-domain.yaml \
            -e /home/stack/templates/enable-tls.yaml
    • 使用 haproxy-public-tls-certmonger.yaml 环境文件来保护使用 IdM 发布的证书的外部端点。对于此实现,您必须为 novajoin 使用的 VIP 端点创建 DNS 条目:

      1. 您必须为 novajoin 使用的 VIP 端点创建 DNS 条目。识别位于 '/home/stack/templates 的自定义 network-environment.yaml 文件中的 overcloud 网络:

        parameter_defaults:
            ControlPlaneDefaultRoute: 192.168.24.1
            ExternalAllocationPools:
            -   end: 10.0.0.149
                start: 10.0.0.101
            InternalApiAllocationPools:
            -   end: 172.17.1.149
                start: 172.17.1.10
            StorageAllocationPools:
            -   end: 172.17.3.149
                start: 172.17.3.10
            StorageMgmtAllocationPools:
            -   end: 172.17.4.149
                start: 172.17.4.10
      2. 在 heat 模板中为每个 overcloud 网络创建虚拟 IP 地址列表,例如 /home/stack/public_vip.yaml

        parameter_defaults:
            ControlFixedIPs: [{'ip_address':'192.168.24.101'}]
            PublicVirtualFixedIPs: [{'ip_address':'10.0.0.101'}]
            InternalApiVirtualFixedIPs: [{'ip_address':'172.17.1.101'}]
            StorageVirtualFixedIPs: [{'ip_address':'172.17.3.101'}]
            StorageMgmtVirtualFixedIPs: [{'ip_address':'172.17.4.101'}]
            RedisVirtualFixedIPs: [{'ip_address':'172.17.1.102'}]
      3. 根据需要,为每个 VIP 和区在 IdM 中添加 DNS 条目:

        ipa dnsrecord-add lab.local overcloud --a-rec 10.0.0.101
        ipa dnszone-add ctlplane.lab.local
        ipa dnsrecord-add ctlplane.lab.local overcloud --a-rec 192.168.24.101
        ipa dnszone-add internalapi.lab.local
        ipa dnsrecord-add internalapi.lab.local overcloud --a-rec 172.17.1.101
        ipa dnszone-add storage.lab.local
        ipa dnsrecord-add storage.lab.local overcloud --a-rec 172.17.3.101
        ipa dnszone-add storagemgmt.lab.local
        ipa dnsrecord-add storagemgmt.lab.local overcloud --a-rec 172.17.4.101
      4. 在部署中包含以下环境文件,以保护内部和外部端点:

        • enable-internal-tls.yaml
        • tls-everywhere-endpoints-dns.yaml
        • haproxy-public-tls-certmonger.yaml
        • custom-domain.yaml
        • public_vip.yaml

          openstack overcloud deploy \
            --templates \
             -e /usr/share/openstack-tripleo-heat-templates/environments/ssl/enable-internal-tls.yaml \
             -e /usr/share/openstack-tripleo-heat-templates/environments/ssl/tls-everywhere-endpoints-dns.yaml \
             -e /usr/share/openstack-tripleo-heat-templates/environments/services/haproxy-public-tls-certmonger.yaml \
             -e /home/stack/templates/custom-domain.yaml \
             -e /home/stack/templates/public-vip.yaml
注意

您不能使用 novajoin 在预先存在的部署(TLS-e)上随处实施 TLS。

2.4.5. 在 Red Hat Identity Manager (IdM)中测试 overcloud 注册

使用 novajoin 在 IdM 中完成 undercloud 和 overcloud 注册后,您可以通过搜索 IdM 中的 overcloud 节点,并检查主机条目是否包含 Keytab:True 来测试注册是否成功。您还可以登录到 overcloud 节点,并确认 sssd 命令可以查询 IdM 用户。

  1. 在 IdM 中找到 overcloud 节点,并确认主机条目包含 Keytab:True

    $ ipa host-show overcloud-node-01
      Host name: overcloud-node-01.lab.local
      Principal name: host/overcloud-node-01.lab.local@LAB.LOCAL
      Principal alias: host/overcloud-node-01.lab.local@LAB.LOCAL
      SSH public key fingerprint: <snip>
      Password: False
      Keytab: True
      Managed by: overcloud-node-01.lab.local
  2. 登录 overcloud 节点,并确认 sssd 可以查询 IdM 用户。例如,查询名为 susan 的 IdM 用户:

    $ getent passwd susan
    uid=1108400007(susan) gid=1108400007(bob) groups=1108400007(susan)

2.5. 配置 Red Hat Identity Manager (IdM)服务器凭证

要将 Red Hat Identity Manager (IdM)配置为与 OpenStack 身份集成,请为 Identity 服务设置要使用的 LDAP 帐户,为 Red Hat OpenStack 用户创建一个用户组,并为 lookup 帐户的密码。

先决条件

  • Red Hat Identity Manager (IdM)已配置和操作。
  • Red Hat OpenStack Platform (RHOSP)已配置和操作。
  • DNS 名称解析功能全面,所有主机都被正确注册。
  • IdM 身份验证流量使用 LDAPS 加密,使用端口 636。
  • 建议:使用高可用性或负载平衡解决方案实施 IdM,以避免出现单点故障。

流程

在 IdM 服务器上执行此步骤。

  1. 创建 LDAP 查找帐户,以便在 OpenStack Identity Service 中使用,以查询 IdM LDAP 服务:

    # kinit admin
    # ipa user-add
    First name: OpenStack
    Last name: LDAP
    User  [radministrator]: svc-ldap
    注意

    查看此帐户的密码过期设置,一旦创建。

  2. 为 RHOSP 用户创建一个名为 grp-openstack 的组。只有此组的成员才能在 OpenStack Identity 中分配权限。

    # ipa group-add --desc="OpenStack Users" grp-openstack
  3. 设置 svc-ldap 帐户密码并将其添加到 grp-openstack 组中:

    # ipa passwd svc-ldap
    # ipa group-add-member --users=svc-ldap grp-openstack
  4. svc-ldap 用户身份登录并在提示时更改密码:

    # kinit svc-ldap

2.6. 安装 Red Hat Identity Manager (IdM) LDAPS 证书

OpenStack Identity (keystone)使用 LDAPS 查询来验证用户帐户。要加密此流量,keystone 使用 keystone.conf 定义的证书文件。要安装 LDAPS 证书,请将证书从 Red Hat Identity Manager (IdM)服务器复制到 keystone 可以引用它的位置,并将证书从 .crt 转换为 .pem 格式。

注意

当使用多个域进行 LDAP 身份验证时,您可能会收到各种错误,如 Unable to retrieve authorized projects或者 Peer 的证书签发者无法识别。如果 keystone 对某个域使用不正确的证书,会出现这种情况。作为临时解决方案,将所有 LDAPS 公钥合并到单个 .crt 捆绑包中,并将所有 keystone 域配置为使用此文件。

先决条件

  • IdM 服务器凭证已配置。

流程

  1. 在您的 IdM 环境中,找到 LDAPS 证书。此文件可以使用 /etc/openldap/ldap.conf

    TLS_CACERT /etc/ipa/ca.crt
  2. 将文件复制到运行 keystone 服务的 Controller 节点。例如,scp 命令将 ca.crt 文件复制到节点 node.lab.local

    # scp /etc/ipa/ca.crt root@node.lab.local:/root/
  3. ca.crt 文件复制到证书目录中。这是 keystone 服务用来访问证书的位置:

    # cp ca.crt /etc/pki/ca-trust/source/anchors
  4. 可选:如果您需要运行诊断命令,如 ldapsearch,您还需要将证书添加到 RHEL 证书存储中:

    1. 3.在 Controller 节点上,将 .crt 转换为 .pem 格式:

      # openssl x509 -in ca.crt -out ca.pem -outform PEM
    2. 在 Controller 节点上安装 .pem。例如,在 Red Hat Enterprise Linux 中:

      # cp ca.pem /etc/pki/ca-trust/source/anchors/
      # update-ca-trust

2.7. 配置 director 以使用域特定的 LDAP 后端

要将 director 配置为使用一个或多个 LDAP 后端,请在 heat 模板中将 KeystoneLDAPDomainEnable 标志设置为 true,并使用每个 LDAP 后端的信息设置环境文件。然后,director 会为每个 keystone 域使用单独的 LDAP 后端。

注意

域配置文件的默认目录设置为 /etc/keystone/domains/。您可以使用 keystone::domain_config_directory hiera 键设置所需的路径,并将它添加为环境文件中的 ExtraConfig 参数来覆盖它。

流程

  1. 在部署的 heat 模板中,将 KeystoneLDAPDomainEnable 标志设置为 true。这会在 identity 配置组中的 keystone 中的 domain_specific_drivers_enabled 选项。
  2. 通过在 tripleo-heat-templates 中设置 KeystoneLDAPBackendConfigs 参数来添加 LDAP 后端配置的规格,然后您可以指定所需的 LDAP 选项。
  3. 创建 keystone_domain_specific_ldap_backend.yaml 环境文件的副本:

    $ cp /usr/share/openstack-tripleo-heat-templates/environments/services/keystone_domain_specific_ldap_backend.yaml /home/stack/templates/
  4. 编辑 /home/stack/templates/keystone_domain_specific_ldap_backend.yaml 环境文件,并设置这些值以适应您的部署。例如,此参数为名为 testdomain 的 keystone 域创建 LDAP 配置:

        parameter_defaults:
          KeystoneLDAPDomainEnable: true
          KeystoneLDAPBackendConfigs:
            testdomain:
              url: ldaps://192.0.2.250
              user: cn=openstack,ou=Users,dc=director,dc=example,dc=com
              password: RedactedComplexPassword
              suffix: dc=director,dc=example,dc=com
              user_tree_dn: ou=Users,dc=director,dc=example,dc=com
              user_filter: "(memberOf=cn=OSuser,ou=Groups,dc=director,dc=example,dc=com)"
              user_objectclass: person
              user_id_attribute: cn
    注意

    keystone_domain_specific_ldap_backend.yaml 环境文件包含以下已弃用的写入参数:

    • user_allow_create
    • user_allow_update
    • user_allow_delete

    这些参数的值对部署没有影响,可以安全地删除。

  5. 可选:在环境文件中添加更多域。例如:

        KeystoneLDAPBackendConfigs:
          domain1:
            url: ldaps://domain1.example.com
            user: cn=openstack,ou=Users,dc=director,dc=example,dc=com
            password: RedactedComplexPassword
            ...
          domain2:
            url: ldaps://domain2.example.com
            user: cn=openstack,ou=Users,dc=director,dc=example,dc=com
            password: RedactedComplexPassword
            ...

    这会导致名为 domain1domain2 的两个域;各自具有不同的 LDAP 域,它们都有自己的配置。

2.8. 授予 admin 用户对 OpenStack 身份域的访问权限

要允许 admin 用户访问 OpenStack Identity (keystone)域并查看 Domain 选项卡,获取域的 ID 和 admin 用户,然后将 admin 角色分配给域中的用户。

注意

这不会授予 OpenStack admin 帐户对外部服务域的任何权限。在这种情况下,术语 domain 指的是 OpenStack 对 keystone 域的使用。

流程

此流程使用 LAB 域。使用您要配置的域的实际名称替换域名。

  1. 获取 LAB 域的 ID:

    $ openstack domain show LAB
    +---------+----------------------------------+
    | Field   | Value                            |
    +---------+----------------------------------+
    | enabled | True                             |
    | id      | 6800b0496429431ab1c4efbb3fe810d4 |
    | name    | LAB                              |
    +---------+----------------------------------+
  2. 默认域 获取 admin 用户的 ID:

    $ openstack user list --domain default | grep admin
    | 3d75388d351846c6a880e53b2508172a | admin      |
  3. 获取 admin 角色的 ID:

    $ openstack role list

    输出取决于您集成的外部服务:

    • Active Directory Domain Service (AD DS):

      +----------------------------------+-----------------+
      | ID                               | Name            |
      +----------------------------------+-----------------+
      | 01d92614cd224a589bdf3b171afc5488 | admin           |
      | 034e4620ed3d45969dfe8992af001514 | member          |
      | 0aa377a807df4149b0a8c69b9560b106 | ResellerAdmin   |
      | 9369f2bf754443f199c6d6b96479b1fa | heat_stack_user |
      | cfea5760d9c948e7b362abc1d06e557f | reader          |
      | d5cb454559e44b47aaa8821df4e11af1 | swiftoperator   |
      | ef3d3f510a474d6c860b4098ad658a29 | service         |
      +----------------------------------+-----------------+
    • Red Hat Identity Manager (IdM):

      +----------------------------------+---------------+
      | ID                               | Name          |
      +----------------------------------+---------------+
      | 544d48aaffde48f1b3c31a52c35f01f9 | SwiftOperator |
      | 6d005d783bf0436e882c55c62457d33d | ResellerAdmin |
      | 785c70b150ee4c778fe4de088070b4cf | admin         |
      | 9fe2ff9ee4384b1894a90878d3e92bab | _member_      |
      +----------------------------------+---------------+
  4. 使用 domain 和 admin ID 来构造命令,将 admin 用户添加到 keystone LAB 域的 admin 角色中:

    # openstack role add --domain 6800b0496429431ab1c4efbb3fe810d4 --user 3d75388d351846c6a880e53b2508172a 785c70b150ee4c778fe4de088070b4cf

2.9. 授予外部组对 Red Hat OpenStack Platform 项目的访问权限

要授予多个经过身份验证的用户对 Red Hat OpenStack Platform (RHOSP)资源的访问权限,您可以授权外部用户管理服务中的某些组授予 RHOSP 项目的访问权限,而不必要求 OpenStack 管理员手动将每个用户分配到项目中的角色。因此,这些组的所有成员都可以访问预先确定的项目。

先决条件

  • 确保外部服务管理员完成以下步骤:

    • 创建名为 grp-openstack-admin 的组。
    • 创建名为 grp-openstack-demo 的组。
    • 根据需要,将 RHOSP 用户添加到这些组中。
    • 将您的用户添加到 grp-openstack 组。
  • 创建 OpenStack 身份域。此流程使用 LAB 域。
  • 创建或选择 RHOSP 项目。这流程使用一个名为 demo 的项目,这项目由 openstack project create --domain default --description "Demo Project" demo 命令创建。

流程

  1. 从 OpenStack 身份域检索用户组列表:

    # openstack group list --domain LAB

    命令输出取决于您集成的外部用户管理服务:

    • Active Directory Domain Service (AD DS):

      +------------------------------------------------------------------+---------------------+
      | ID                                                               | Name                |
      +------------------------------------------------------------------+---------------------+
      | 185277be62ae17e498a69f98a59b66934fb1d6b7f745f14f5f68953a665b8851 | grp-openstack       |
      | a8d17f19f464c4548c18b97e4aa331820f9d3be52654aa8094e698a9182cbb88 | grp-openstack-admin |
      | d971bb3bd5e64a454cbd0cc7af4c0773e78d61b5f81321809f8323216938cae8 | grp-openstack-demo  |
      +------------------------------------------------------------------+---------------------+
    • Red Hat Identity Manager (IdM):

      +------------------------------------------------------------------+---------------------+
      | ID                                                               | Name                |
      +------------------------------------------------------------------+---------------------+
      | 185277be62ae17e498a69f98a59b66934fb1d6b7f745f14f5f68953a665b8851 | grp-openstack       |
      | a8d17f19f464c4548c18b97e4aa331820f9d3be52654aa8094e698a9182cbb88 | grp-openstack-admin |
      | d971bb3bd5e64a454cbd0cc7af4c0773e78d61b5f81321809f8323216938cae8 | grp-openstack-demo  |
      +------------------------------------------------------------------+---------------------+
  2. 检索角色列表:

    # openstack role list

    命令输出取决于您集成的外部用户管理服务:

    • Active Directory Domain Service (AD DS):

      +----------------------------------+-----------------+
      | ID                               | Name            |
      +----------------------------------+-----------------+
      | 01d92614cd224a589bdf3b171afc5488 | admin           |
      | 034e4620ed3d45969dfe8992af001514 | member          |
      | 0aa377a807df4149b0a8c69b9560b106 | ResellerAdmin   |
      | 9369f2bf754443f199c6d6b96479b1fa | heat_stack_user |
      | cfea5760d9c948e7b362abc1d06e557f | reader          |
      | d5cb454559e44b47aaa8821df4e11af1 | swiftoperator   |
      | ef3d3f510a474d6c860b4098ad658a29 | service         |
      +----------------------------------+-----------------+
    • Red Hat Identity Manager (IdM):

      +----------------------------------+---------------+
      | ID                               | Name          |
      +----------------------------------+---------------+
      | 0969957bce5e4f678ca6cef00e1abf8a | ResellerAdmin |
      | 1fcb3c9b50aa46ee8196aaaecc2b76b7 | admin         |
      | 9fe2ff9ee4384b1894a90878d3e92bab | _member_      |
      | d3570730eb4b4780a7fed97eba197e1b | SwiftOperator |
      +----------------------------------+---------------+
  3. 通过将用户组添加到一个或多个这些角色,来授予用户对 RHOSP 项目的访问权限。例如,如果您希望 grp-openstack-demo 组中的用户是 demo 项目的普通用户,您必须将该组添加到 member_member_ 角色中,具体取决于您要集成的外部服务:

    • Active Directory Domain Service (AD DS):

      # openstack role add --project demo --group d971bb3bd5e64a454cbd0cc7af4c0773e78d61b5f81321809f8323216938cae8  member
    • Red Hat Identity Manager (IdM):

      $ openstack role add --project demo --group d971bb3bd5e64a454cbd0cc7af4c0773e78d61b5f81321809f8323216938cae8  _member_

结果

grp-openstack-demo 的成员可通过输入其用户名和密码并在 Domain 字段中输入 6443 登录到仪表板:

domain
注意

如果用户收到错误 Error: Unable to retrieve container list。 它应该能够管理容器,则必须将它们添加到 SwiftOperator 角色中。

2.10. 授予外部用户访问 Red Hat OpenStack Platform 项目

要从 grp-openstack 组中授予特定经过身份验证的用户,您可以向这些用户授予 Red Hat OpenStack Platform (RHOSP)项目的直接访问。如果您要向单个用户授予访问权限,而不是向组授予访问权限,请使用此过程。

先决条件

  • 确保外部服务管理员完成以下步骤:

    • 将您的 RHOSP 用户添加到 grp-openstack 组中。
    • 创建 OpenStack 身份域.此流程使用 LAB 域。
  • 创建或选择 RHOSP 项目。这流程使用一个名为 demo 的项目,这项目由 openstack project create --domain default --description "Demo Project" demo 命令创建。

流程

  1. 从 OpenStack 身份域检索用户列表:

    # openstack user list --domain LAB
     +------------------------------------------------------------------+----------------+
    | ID                                                               | Name           |
    +------------------------------------------------------------------+----------------+
    | 1f24ec1f11aeb90520079c29f70afa060d22e2ce92b2eba7784c841ac418091e | user1          |
    | 12c062faddc5f8b065434d9ff6fce03eb9259537c93b411224588686e9a38bf1 | user2          |
    | afaf48031eb54c3e44e4cb0353f5b612084033ff70f63c22873d181fdae2e73c | user3          |
    | e47fc21dcf0d9716d2663766023e2d8dc15a6d9b01453854a898cabb2396826e | user4          |
    +------------------------------------------------------------------+----------------+
  2. 检索角色列表:

    # openstack role list

    命令输出取决于您集成的外部用户管理服务:

    • Active Directory Domain Service (AD DS):

      +----------------------------------+-----------------+
      | ID                               | Name            |
      +----------------------------------+-----------------+
      | 01d92614cd224a589bdf3b171afc5488 | admin           |
      | 034e4620ed3d45969dfe8992af001514 | member          |
      | 0aa377a807df4149b0a8c69b9560b106 | ResellerAdmin   |
      | 9369f2bf754443f199c6d6b96479b1fa | heat_stack_user |
      | cfea5760d9c948e7b362abc1d06e557f | reader          |
      | d5cb454559e44b47aaa8821df4e11af1 | swiftoperator   |
      | ef3d3f510a474d6c860b4098ad658a29 | service         |
      +----------------------------------+-----------------+
    • Red Hat Identity Manager (IdM):

      +----------------------------------+---------------+
      | ID                               | Name          |
      +----------------------------------+---------------+
      | 0969957bce5e4f678ca6cef00e1abf8a | ResellerAdmin |
      | 1fcb3c9b50aa46ee8196aaaecc2b76b7 | admin         |
      | 9fe2ff9ee4384b1894a90878d3e92bab | _member_      |
      | d3570730eb4b4780a7fed97eba197e1b | SwiftOperator |
      +----------------------------------+---------------+
  3. 通过将他们添加到一个或多个这些角色来授予用户对 RHOSP 项目的访问权限。例如,如果您希望 user1demo 项目的一个一般用户,您可以将它们添加到member_member_ 角色中(具体取决于您集成的外部服务)。

    • Active Directory Domain Service (AD DS):

      # openstack role add --project demo --user 1f24ec1f11aeb90520079c29f70afa060d22e2ce92b2eba7784c841ac418091e member
    • Red Hat Identity Manager (IdM):

      # openstack role add --project demo --user 1f24ec1f11aeb90520079c29f70afa060d22e2ce92b2eba7784c841ac418091e _member_
  4. 如果您希望 user1demo 项目的管理用户,请将该用户添加到 admin 角色中:

    # openstack role add --project demo --user 1f24ec1f11aeb90520079c29f70afa060d22e2ce92b2eba7784c841ac418091e admin

结果

user1 用户可以通过输入其外部用户名和密码并在 Domain 字段中输入 LAB 登录到控制面板:

domain
注意

如果用户收到错误 Error: Unable to retrieve container list。 它应该能够管理容器,则必须将它们添加到 SwiftOperator 角色中。

2.11. 查看 OpenStack 身份域和用户列表

使用 openstack domain list 命令列出可用条目。在 Identity Service 中配置多个域,可在仪表板登录页面中启用一个新的 Domain 字段。用户应输入与其登录凭据匹配的域。

重要

完成集成后,您需要决定是否在 Default 域中创建新项目,还是在新创建的 keystone 域中创建新项目。您必须考虑您的工作流以及如何管理用户帐户。如果可能,使用 Default 域作为内部域来管理服务帐户和 admin 项目,并将外部用户保留在单独的域中。

在本例中,外部帐户需要指定 LAB 域。内置的 keystone 帐户(如 admin )必须指定 Default 作为其域。

流程

  1. 显示域列表:

    # openstack domain list
    +----------------------------------+---------+---------+----------------------------------------------------------------------+
    | ID                               | Name    | Enabled | Description                                                          |
    +----------------------------------+---------+---------+----------------------------------------------------------------------+
    | 6800b0496429431ab1c4efbb3fe810d4 | LAB     | True    |                                                                      |
    | default                          | Default | True    | Owns users and projects available on Identity API v2. |
    +----------------------------------+---------+---------+----------------------------------------------------------------------+
  2. 显示特定域中的用户列表。这个命令指定了 --domain the,并返回属于 grp-openstack 组成员的用户,该域中的用户:

    # openstack user list --domain LAB

    您还可以附加 --domain Default 来显示内置 keystone 帐户:

    # openstack user list --domain Default

2.12. 为非管理员用户创建凭据文件

为 OpenStack 身份配置用户和域后,您可能需要为非管理员用户创建凭据文件。

流程

  • 为非管理员用户创建凭证(RC)文件。本例使用文件中的 user1 用户。

    $ cat overcloudrc-v3-user1
    # Clear any old environment that may conflict.
    for key in $( set | awk '{FS="="}  /^OS_/ {print $1}' ); do unset $key ; done
    export OS_USERNAME=user1
    export NOVA_VERSION=1.1
    export OS_PROJECT_NAME=demo
    export OS_PASSWORD=RedactedComplexPassword
    export OS_NO_CACHE=True
    export COMPUTE_API_VERSION=1.1
    export no_proxy=,10.0.0.5,192.168.2.11
    export OS_CLOUDNAME=overcloud
    export OS_AUTH_URL=https://10.0.0.5:5000/v3
    export OS_AUTH_TYPE=password
    export PYTHONWARNINGS="ignore:Certificate has no, ignore:A true
    SSLContext object is not available"
    export OS_IDENTITY_API_VERSION=3
    export OS_PROJECT_DOMAIN_NAME=Default
    export OS_USER_DOMAIN_NAME=LAB

2.13. 测试 OpenStack Identity 与外部用户管理服务集成

要测试 OpenStack Identity (keystone)是否成功与 Active Directory 域服务(AD DS)集成,请测试用户对仪表板功能的访问权限。

先决条件

  • 与外部用户管理服务集成,如 Active Directory (AD)或 Red Hat Identity Manager (IdM)

流程

  1. 在外部用户管理服务中创建测试用户,并将用户添加到 grp-openstack 组中。
  2. 在 Red Hat OpenStack Platform 中,将用户添加到 demo 项目的 _member_ 角色中。
  3. 使用 AD 测试用户的凭证登录到控制面板。
  4. 单击每个选项卡,以确认它们成功显示且没有错误消息。
  5. 使用控制面板构建测试实例。
注意

如果您在这些步骤时遇到问题,请使用 admin 帐户登录控制面板,然后以该用户身份执行后续步骤。如果测试成功,这意味着 OpenStack 仍然按预期工作,并且 OpenStack Identity 和 Active Directory 之间的集成设置出现问题。

2.14. Red Hat Identity Manager (IdM)集成故障排除

如果您在将 Red Hat Identity Manager (IdM)与 OpenStack 身份集成时遇到问题,您可能需要测试 LDAP 连接或测试证书信任配置。您可能还需要检查 LDAPS 端口是否可以访问。

注意

根据错误类型和位置,仅执行此流程中的相关步骤。

流程

  1. 使用 ldapsearch 命令远程对 IdM 服务器执行测试查询来测试 LDAP 连接。这里有一个成功的结果表示网络连接正在正常工作,IdM 服务已启动。在本例中,针对服务器 idm.lab.local 在端口 636 上执行测试查询:

    # ldapsearch -D "cn=directory manager" -H ldaps://idm.lab.local:636 -b "dc=lab,dc=local" -s sub "(objectclass=*)" -w RedactedComplexPassword
    注意

    ldapsearchopenldap-clients 软件包的一部分。您可以使用 evince dnf install openldap-clients 进行安装

  2. 使用 nc 命令检查是否远程访问 LDAPS 端口 636。在本例中,针对服务器 idm.lab.local 执行探测。按 ctrl-c 退出提示符。

    # nc -v idm.lab.local 636
    Ncat: Version 6.40 ( http://nmap.org/ncat )
    Ncat: Connected to 192.168.200.10:636.
    ^C

    如果无法建立连接,这可能表示防火墙配置问题。

法律通告

Copyright © 2023 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.