为特定于域的公司目录配置OpenStack Keystone支持

介绍了OpenStack Keystone如何通过支持特定域的公司目录,如LDAP和Active Directory,以适应更复杂的企业环境。文章详细解释了多域配置的挑战及解决方案,以及如何配置Keystone以实现这一功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开源OpenStack项目提供了一个基础架构即服务(IaaS)层,用于构建公共云和私有云。 目前,OpenStack在公司,服务提供商,增值经销商,中小型企业,研究人员和全球数据中心(用于部署大型私有或公共云)中的采用正取得巨大增长。 (请参阅相关主题 ,以了解更多关于OpenStack的。)

随着越来越多的企业客户开始部署OpenStack,将这些客户无缝集成到他们现有的公司目录基础结构中变得至关重要。 在某些情况下,这可以通过Keystone的联合支持来解决,但对于许多企业而言,关键是与现有LDAP或Active Directory集成。 Keystone已为多个发行版提供了对单个公司目录的支持,但安装更为复杂(例如,每个部门的目录或目录挂载点不同的企业,或希望向客户提供自己服务的服务提供商)目录)。 Grizzly版本首次引入了针对特定域的公司目录支持的实验版本。 在OpenStack Juno版本中,现在已完全支持此功能。 本文介绍以下内容:

  • OpenStack Keystone对公司目录的经典支持概述
  • Keystone中已添加的增强功能,使其能够支持特定于域的目录
  • 有关如何配置Keystone以使用此新支持的基本步骤
  • OpenStack Keystone未来改善领域特定目录的方向概述

Keystone的经典授权模型

在检查Keystone的新的特定于域的目录支持之前,概述一下Keystone的经典单域目录支持会很有帮助。 Keystone的核心实际上分为两个部分:身份和分配。 身份(即可以进行身份​​验证的身份)允许用户和组存储在本地SQL数据库中,或者由远程LDAP或Active Directory服务支持。 分配(即用户通过身份验证后可以执行的操作)存储项目,域,角色以及这些角色的分配。 同样,只要您对它们具有读写访问权限,就可以将它们存储在本地SQL数据库中,或者存储在远程LDAP / AD服务中。 由于将Keystone的域结构映射到LDAP(从身份的角度来看)的挑战,直到现在,只要启用LDAP身份,就只能使用一个默认域。 这限制了在更复杂的环境中使用LDAP / AD。

多域公司目录支持的要求

鉴于您无法更改以下事实:LDAP / AD架构不能很好地映射到IaaS层所需的典型模型,出于效率原因,该模型需要共享使用,您需要更改Keystone模型与之交互的方式目录。 本质上,您需要处理Keystone中的“领域”方面,并与相应的公司目录进行对话,就好像它是您正在使用的唯一目录一样。 这包括在每个域的基础上定义所有典型的LDAP / AD参数(例如URL,目录属性映射等),并确保每当您说读给定域的用户记录时,将调用路由到正确的公司目录。 这种级别的支持是在Grizzly中引入的,但是存在许多问题。 其中最严重的是Keystone API的核心概念与这种多域支持之间的冲突-即您可以向API提供用户或组ID,而Keystone可以使用它来查找有问题的用户/组实体。 如果有多个目录服务器,您将查找哪一个? 出于性能原因,将它们全部搜索不是一个可行的选择。 因此,最初的实现尝试推断出所涉及的域-例如,由于通常必须使用域范围的令牌来检索给定ID的用户实体,因此可以使用令牌的范围来确定适当的公司目录有关域名。 但是,该方法显然有局限性。 例如,您只需提供用户ID和密码即可进行身份验证。 即使可以克服这些限制,您是否应该信任任何给定的公司目录来创建在所有其他公司目录中唯一的实体ID?

支持多域公司目录

OpenStack的Juno版本通过Keystone提供了一个目录映射层来解决上述问题,该目录映射层为其客户端生成唯一的用户和组ID,并存储哪个身份后端驱动程序持有该实体的基本详细信息(以及该后端中的本地ID) 。 此目录映射层对于Keystone API的调用者基本上是不可见的,并且当Keystone在其身份驱动程序中遇到实体时,映射是动态建立的。 呼叫者可能唯一注意到的是用户和组的ID越来越大。 (默认情况下,它们是64字节的sha256散列,而不是经典的32字节UUID。)应该注意,此目录映射与用于处理IDP断言的映射的Keystone联合映射无关。属性添加到Keystone角色分配中。

因此,让我们看一个在实践中使用特定于域的目录的示例。 在向其客户提供云服务的服务提供商中,通常将客户表示为Keystone中的域。 这使客户可以拥有自己的用户,组和项目。 提供者希望做的是能够为客户提供使用其现有公司目录对其域进行身份验证的能力-使每个客户域都能指向客户自己的LDAP / AD服务。 首先,要在Keystone中启用特定于域的配置支持(默认情况下处于禁用状态),方法是在Keystone主配置文件中设置以下两个选项:

[identity]
    domain_specific_drivers_enabled=true
    domain_config_dir=/etc/keystone/domains

启用特定于域的驱动程序后,每次启动Keystone时,它将扫描domain_config_dir的内容以查找任何特定于域的配置文件。 对于需要其唯一公司目录的每个域,服务提供商将创建一个特定于域的配置文件,其中包含该域公司目录的特定详细信息。 例如,如果服务提供商创建了一个名为“ customerA”的域来表示该客户,则他们将创建一个特定于域的配置文件,名为keystone.customerA.conf 。 (名称很重要,并且始终采用以下格式:keystone。{domain-name} .conf-域名必须与在keystone中创建的域的名称匹配。)此配置文件的内容可能类似于以下内容:

[ldap]
    url = ldap://ldapservice.thecustomer.com
    user = cn=Manager,dc=openstack,dc=org
    password = mysecret
    suffix = dc=openstack,dc=org
    group_tree_dn = ou=UserGroups,dc=openstack,dc=org
    ;user_tree_dn = ou=Users,dc=openstack,dc=org
    user_mail_attribute = mail

    [identity]
    driver = keystone.identity.backends.ldap.Identity

如您所见,这些与通常在Keystone主配置文件中设置的配置选项类型完全相同-在这种情况下,它们是在该域的特定配置文件中指定的。 每个需要自己配置的域都需要有自己的配置文件。 请注意,此处仅需要指定特定于域的选项。 常用选项可以保留在Keystone主配置文件中。

域拥有自己的配置文件后,Keystone将在遇到后端时为该用户和组实体建立一个映射,并将针对这些实体发出的所有请求路由到适当的公司目录。

虽然它主要是为了支持不同的公司目录而设计的,但是您也可以为域指定一个配置文件以使用SQL后端。 如果您想让某些本地用户(例如服务用户或本地管理员用户)不想放在公司目录中,则此功能特别有用。 这样做的方式与LDAP / AD情况完全相同:使用相同的命名约定为域创建特定于域的配置文件,但是在这种情况下,它可能仅包含驱动程序的名称。 例如,如果您希望域CloudAdmin由SQL支持,而所有其他域可能都使用LDAP,则创建一个称为keystone.CloudAdmin.conf的特定于域的配置文件,其中包含:

[identity]
    driver = keystone.identity.backends.sql.Identity

但是,最大的限制是Keystone当前一次只能加载一个SQL驱动程序-因此它可以是包罗万象的驱动程序(通过在主Keystone配置文件中将身份指定为SQL),也可以是分配给特定域(使用特定于域的配置文件)。 如果您尝试使用自己SQL配置指定多个域,则启动时Keystone会引发异常。 未来版本的Keystone可能会解除此限制。

实用技巧

您可以部署多种技术来使用上述功能来简化生产配置。

以正确的顺序做事

如果您仅使用默认域指向单个LDAP / AD公司目录时从经典配置开始,那么步骤顺序应为:

  1. 在主梯形校正配置文件中将domain_specific_drivers_enabled设置为“ true”,然后重新启动梯形校正。
  2. 创建您要为其具有特定配置的域。
  3. 为这些域中的每个域创建特定于域的配置文件。
  4. 再次重新启动Keystone。

使用LDAP作为默认驱动程序时,如果不首先将domain_specific_drivers_enabled设置为“ true”,则Keystone将阻止您创建新域(因为它知道默认LDAP驱动程序只能处理默认域)。

如果域配置不起作用,请检查Keystone日志文件

如果您已经设置了域和配置文件,但是仍然无法访问公司目录中的数据,那么值得检查Keystone日志文件。 在启动时,Keystone正在扫描domain_config_dir ,它将检查每个文件。 如果它与keystone。{domain-name} .conf的形式不匹配,则它将被忽略。 如果Keystone找不到文件名中指定的名称的域,那么它也会忽略它。 在这两种情况下,Keystone都将加载带有问题文件名称的警告。 例如:

Invalid domain name (CustomerB) found in config file name

偶尔进行目录映射表的维护

如前所述,Keystone在适当的公司目录服务中动态构建从外部发布的用户和组ID到基础本地实体的目录映射。 由于从Keystone角度来看,这些公司目录通常是只读的,因此任何用户管理都将通过用于维护相关公司目录的工具进行带外处理。 实际上,这意味着随着时间的流逝,随着用户和组实体从公司目录中删除,旧的映射条目将保留在Keystone的目录映射表中。 尽管这是良性的,但随着时间的流逝,它可能会使Keystone表膨胀。 为了管理此问题, 梯形失真管理工具已得到增强,以支持从梯形失真目录映射表中清除条目的多个选项。 最具体的选择是清除给定域中给定本地标识符的映射。 例如:

keystone-manage mapping_purge --domain-name CustomerA --local-id abc@de.com

如果这是相对频繁发生的情况,则您可能希望自动执行此类单独清除。 但是,另一种方法是简单地定期清除给定域的所有映射。 更直接的问题可能是这是否会导致您丢失本地实体的外部发布的ID。 实际上,这不是问题,因为映射算法的设计使得Keystone可以重新生成映射并保证重新分配与以前相同的外部发布的用户/组ID。 请注意,这假设用户没有在公司目录之间移动; 如果有,则将其视为其他用户。 要清除给定域的所有映射,请执行以下操作:

keystone-manage mapping_purge --domain-name CustomerA

结论

本文概述了Keystone的新的特定于域的配置支持,并说明了此新功能如何使Keystone支持更广泛的企业配置。 它还展示了如何设置配置文件以及一些在生产中进行管理的有用技巧。


翻译自: https://www.ibm.com/developerworks/cloud/library/cl-configure-keystone-ldap-and-active-directory/index.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值