Endpoint Policy Extension

bp endpoint-policy

扩展 OS-ENDPOINT-POLICY 提供了一种将策略文件分配给特定端点的机制。此扩展需要 Identity API v3.3。

问题描述

OpenStack 提供了基于角色的访问控制 (RBAC) 功能,用于控制对基于项目的资源的访问。但是,它没有提供 RBAC 功能来控制哪些端点可以消费这些资源。

说明此问题的典型用例是分为测试、QA 和生产区域的云。在这样的环境中,通常希望限制可以发出影响生产的 API 调用的用户,例如,限制他们访问测试环境。目前,实现此目的的唯一方法是为每个环境创建一个不同的项目,并使用端点过滤来限制每个项目中的端点集(然后为这些项目中的每个项目使用不同的角色要求)。这可能会迅速导致项目爆炸,特别是考虑到您可能有不同的地理生产区域,也许每个区域都有自己的管理员用户。真正需要的的是根据端点调整 RBAC 要求。

提议的变更

此更改提供了将给定的策略文件(存储在 Keystone 中,由策略 ID 表示)与端点或一组端点关联的能力。将支持三种类型的关联

  • 与特定端点关联的策略

  • 与给定区域中的服务关联的策略

  • 与服务关联的策略

现有的 Identity 策略 API 将被扩展,以允许为特定端点检索策略,其中为该端点创建的关联将用于选择适当的策略文件,方法是按上述三种类型的关联顺序进行检查。对于具有父级的区域,将按升序搜索这些父级。将使用找到的第一个关联匹配项 - 不会因多个关联而进行策略文件的组合。如果未找到关联,则将返回错误。

此扩展不会更改允许通过策略 ID 检索策略的现有 API,而是提供另一种选择,即端点能够检索适当的策略,而不是必须通过策略 ID 指定它。鉴于此,在本提案中,假设端点将继续仅在启动时获取其策略。未来的增强功能(本提案未涵盖)可能允许 Keystone 在策略更改时提供通知,以便端点可以刷新其策略。

此更改将允许云管理员,例如,指定在生产区域中执行某些操作所需的受限角色分配集。例如,云提供商可能会定义一个 nova 策略,对于生产环境,具有如下规则:

"compute_extension:admin_actions:pause": "rule:admin_or_owner",

而在测试区域中,策略规则可能更宽松,例如:

"compute_extension:admin_actions:pause": "rule:admin_or_owner or role:tester",

通过将这两个策略文件与各自区域的 nova 服务关联,如果端点通过端点 ID 获取其策略,将自动向任一区域中的任何 nova 端点返回正确的策略文件。

备选方案

当前解决方案(使用多个项目),结合端点过滤,可以继续使用,并伴有上述问题。

数据模型影响

对数据模型的更改将限制为用于存储端点策略关联的新表。

REST API 影响

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

  • 定义策略关联的 API

  • 扩展现有的 Identity 策略 API 以请求策略

安全影响

除了允许端点从 Keystone 获取策略(这已受支持)之外,没有重大的安全影响。

通知影响

所有策略关联更改都将是可审计事件。

其他最终用户影响

端点需要调用 Keystone 来获取其策略(而不是从文件读取),才能利用此更改。Keystone 中间件应为此提供支持。

性能影响

可以忽略不计 - 策略将不频繁地获取。

其他部署者影响

端点需要一个配置设置来告诉它们从哪里获取其策略(即文件或 Keystone)。

开发人员影响

实现

负责人

主要负责人

henry-nash

附加负责人

ayoung

工作项

  • 达成 API 规范一致

  • 实现策略关联代码

  • 扩展策略 API 以启用任何关联的使用

  • 修改 Keystone 中间件以公开此新功能

将使用单独的补丁/蓝图来修改其他项目的策略加载,以便能够使用此功能。

依赖项

在获得此扩展的优势之前,需要更改其他项目的策略加载。

测试

由于本提案的更改具有相互依赖性,因此将提供一些 Tempest 测试。

文档影响

对 Identity API 和 configuringservices.rst 的更改。

参考资料