领域配置存储

bp domain-config-ext

提供一种将通常存储在领域特定配置文件中的配置选项存储在 SQL 表中的方法。

问题描述

领域特定的配置文件用于指定给定领域与其身份后端相关的唯一选项(例如 [ldap] url,用于该领域)。为每个领域使用单独的配置文件会导致在 onboarding 新领域时出现一些复杂性,例如:

  • 调用 Keystone API 以添加新领域,创建所需的领域角色分配

  • 使用带外机制创建并将领域特定的配置文件放置在 Keystone 服务器上

  • 重启 Keystone 以确保读取领域特定的配置文件

将有关领域的信息存储在两种不同的介质中(即,身份驱动程序信息在配置文件中以及领域名称、描述等在 SQL 中),也使得很难轻松查看为特定领域定义了哪些选项。

提议的变更

本提案将提供一种以 SQL 后端存储配置选项的能力,并按领域 ID 进行索引。一个主要的配置选项将决定 Keystone 是否使用此扩展来获取领域特定的配置数据,或者使用现有的领域特定的配置文件方法。这将是一个全有或全无的选项——不会将一些选项放在扩展中,而将另一些选项放在配置文件中。如果指定扩展作为配置数据的存储,则将忽略任何领域特定的配置文件。Keystone 将以与今天相同的方式执行构建领域配置的逻辑,即从扩展或设置的文件中读取配置选项。

每当任何领域特定的配置选项更新时,给定领域的身份后端将被重新加载(使用任何新的配置数据),从而进一步协助领域 onboarding。

此新功能只能用于替换原本会出现在领域特定文件中的选项——它不会允许指定仅出现在 Keystone 主配置文件中的选项。由于这些选项可以通过 REST 访问,openstack 客户端和 Horizon 可以提供查看和设置此信息的能力。

虽然配置选项将存储在 SQL 中,但这并不意味着身份后端本身的介质(即使需要,也可以全部使用 LDAP)。

对此能力的一个担忧是,某些配置选项可能被认为高度敏感,并且希望将其单独存储,虽然可以通过 API 写入,但无法读取(例如,在不支持匿名查询的情况下,用于执行 LDAP 搜索的用户密码)。为了解决此问题,建议我们在内部强制执行可读取配置选项的显式白名单。所有其他选项将存储在单独的后端表中,并且不会在读取时返回。目前的提案是密码除外,所有配置选项都将包含在白名单中。这意味着 LDAP url 将在读取时返回(因为这将是云管理员可能想要检查的常见选项)。在某些情况下,url 可能需要编码一个未列入白名单的项目(例如密码)。为了避免在读取时显示这些内容,我们将支持在任何配置字符串中使用的替换命令,这些命令允许通过在选项中指定来引用任何未列入白名单的项目

%(config-option-name)s

例如

“url”: “http://myldap/root/henry/%(password)s

在 Keystone 内部使用配置选项时,将替换为在与正在定义的选项相同的组中存在的指定配置选项(在本例中为“url”)。

此新功能最初将被归类为实验性的 in-tree 功能,并计划尽快迁移到稳定版本,目标是在 Kilo 发布之前实现这一点。

备选方案

使用联合访问 IdP 将(有效地)将此问题转移到创建映射规则。

数据模型影响

对数据模型的更改将限制为用于存储配置信息的新表。

REST API 影响

确切的 API 规范将在审查 Identity API 的更改时定义。

安全影响

此功能向领域的后端配置数据公开了一个新的 API。与其他 v3 API 一样,它将受到标准的 RBAC 权限模型的约束。

通知影响

没有其他,除了此功能将订阅领域删除事件。

其他最终用户影响

性能影响

其他部署者影响

对于已经部署了领域特定安装的云提供商,将提供一个一次性选项给 keystone-manage,该选项会将领域特定配置文件的内容复制到 SQL 存储中。

开发人员影响

实现

负责人

主要负责人

henry-nash

工作项

  • 达成 API 规范一致

  • 实现领域配置代码

  • 实现 keystone-manage 迁移选项

  • 为 keystoneclient 库添加支持

  • 为 openstack 客户端添加支持

将在 Horizon 中支持此 API 的工作将另行提出。

依赖项

测试

除了常规单元测试外,还将对迁移选项进行测试。

文档影响

对 Identity API 和 configuration.rst 的更改。

参考资料