多属性端点分组

在 Keystone 默认情况下,当它颁发项目范围的令牌时,会返回所有已知的服务端点,无论用户是否具有访问权限。这既不高效也不安全。在 Havana 版本中,创建了一个端点过滤器扩展。不幸的是,它提供的过滤能力有限,并且难以管理服务端点。本规范的目的是概述一种改进的端点过滤解决方案。

bp multi-attribute-endpoint-grouping

问题描述

目前,使用 Keystone 中的端点过滤扩展,我们可以将端点与项目关联,从而限制在项目范围令牌的目录中显示的服务端点。但是,属于给定项目的所有人都可以看到所有项目范围的服务端点。从安全角度来看,这显然违反了“最小权限”原则。例如,位于美国西海岸的 Glance 管理员不应该看到 Glance,更不用说美国东海岸或任何其他地区的服务端点。因此,强烈需要提供更细粒度的服务端点过滤能力。特别是,我们应该能够根据服务(例如 Nova、Swift 等)、接口类型(例如 admin、internal 等)、区域或它们的任何组合来过滤服务端点。

此外,使用当前的端点过滤扩展,由于服务端点与项目之间关系的静态性质,管理服务端点是一个挑战。例如,当前您必须为每个新的服务端点显式创建项目关联,这给管理带来了麻烦。本质上,当前解决方案为给定项目提供了一组静态的端点。

提议的变更

多属性端点分组基本上建立在端点过滤扩展提供的功能之上,并通过引入与项目直接关联的动态端点属性过滤能力来扩展这些功能。

多属性端点分组的基本思想是提供基于键值对的过滤策略,该策略将具有相同特征(例如服务、类型、区域)的服务端点分组。

多属性端点分组的优点如下

  • 服务端点可以根据其特征(可以充当过滤器)轻松管理。过滤器列表包括:service_idservice_typeregion_id

  • 服务端点可以属于多个组,这增加了粒度级别。例如,您可以将服务端点限制为某个服务(例如 Swift)和区域(例如 US-West)。

  • 多属性端点分组提供了哈瓦那版本中作为扩展添加到 Keystone 的端点过滤器功能的超集。

备选方案

多属性端点分组的一种替代解决方案是在策略文件中定义细粒度的规则,以规定在给定项目范围令牌的目录中包含哪些服务端点。目前,由于策略语言和 Keystone 的解释都不够,以及策略配置的静态性质限制了在运行时动态添加新的服务端点,因此这种细粒度的动态规则不可行。

安全影响

此扩展无意提供额外的安全性。相反,端点只是从用户的服务目录中省略。此行为不会阻止用户与端点通信。

该提案的好处是我们对返回给用户的基础服务目录中的服务端点提供更细粒度的控制。

通知影响

其他最终用户影响

性能影响

一般来说,这种更改应该会减少项目范围令牌中包含的服务目录的大小,因为我们正在过滤服务端点。每个项目范围令牌请求都需要额外的 SQL 查询来查找与目标项目关联的所有端点组。然后为每个关联的端点组执行一个 SQL 查询。这种额外的查询应该增加最小的性能影响,并且默认情况下不启用过滤。

其他部署者影响

部署者需要启用端点过滤器扩展并创建多属性端点分组扩展表。此信息将在 keystone\doc\source\extensions 中记录。

开发人员影响

无。

实现

负责人

主要负责人

Bob Thyne (bobt)

其他贡献者

Fabio Giannetti (fabiog)

工作项

  • 更新现有的端点过滤器如下
    • 添加 SQL 以创建新的多属性端点分组表。

    • 添加 SQL 以进行与新的多属性端点分组操作相关的 CRUD 操作。

    • 添加 SQL 以处理迁移到新的多属性端点分组。

    • 更新路由器、控制器和核心以处理与新的多属性端点过滤器相关的新的 API。

    • 更新/扩展单元测试以涵盖新的多属性端点分组 API。

    • 更新 policy.json 以确保需要管理员权限才能使用新的多属性端点分组 API。

  • 创建文档,包括设置和配置

依赖项

文档影响

  • 需要记录多属性端点分组扩展 API(api 更改)。

参考资料