跳转到: 导航, 搜索

动态策略

动态策略

改进 OpenStack 上的访问控制


每周会议

待定


背景

OpenStack 使用基于角色的访问控制 (RBAC) 机制来管理授权,它定义了用户根据分配给他们的角色是否能够对资源执行操作。资源包括虚拟机、卷、网络等,并组织到项目(project)中,这些项目由域(domain)拥有。用户在域或项目上分配角色。

用户获取域或项目范围的令牌,该令牌包含用户分配给他们的角色,并将此令牌与请求一起传递给服务以对资源执行操作。服务会检查令牌中的角色和范围,以及策略文件 policy.json 中针对请求操作定义的规则,以确定用户是否具有足够的权限。


演进

  • 如何演进策略管理机制,当前使用一种非同步机制来更新 policy.json 文件?
  • 如何改进委派机制,允许用户仅委派其角色的子集,这些子集可以针对每个域进行自定义?
  • 如何提供更好的默认策略,修复管理员在任何地方都是所有地方管理员的错误?

路线图

故事 1 - 作为云管理员,我希望通过 API 管理策略

依赖于:

作为云管理员,我希望能够创建一个策略并将其绑定到基于其 URL 的端点,而我的 CMS 事先知道该 URL。除了能够修补、删除和显示整个策略之外,我还希望单独管理规则。

故事 2 - 作为云管理员,我希望使用我通过 API 定义的策略的服务

依赖于: 故事 1 - 作为云管理员,我希望通过 API 管理策略

作为云管理员,我希望我的服务端点使用我定义的并与之关联的策略(如果有)。中间件应从策略管理服务器下载最新的策略并根据其配置文件中的 endpoint_url 进行缓存。我的 CMS,知道该 URL 事先,会将此值放在中间件配置中。

故事 3 - 作为域管理员,我希望定义对我的业务有意义的角色

依赖于:

作为域管理员,例如代表客户,我希望定义一组对他们有意义的角色。作为全局角色,这些角色可以在分配中使用。

故事 4 - 作为管理员,我希望定义角色层次结构,允许只委派角色的子集

依赖于:

作为可以定义角色的管理员,我希望能够以层次结构的方式创建它们,这意味着拥有从另一个角色继承的角色意味着继承授权。

故事 5 - 作为部署者,我希望拥有更好的默认策略,区分不同的管理员范围

依赖于: 故事 4 - 作为用户,我希望定义角色层次结构,允许只委派角色的子集

作为部署者,我希望定义针对云、域和项目管理员的不同角色的默认策略。解决长期存在的问题,即任何地方的管理员都是所有地方的管理员。此外,公共规则应在所有服务中保持一致。

故事 6 - 作为开发人员,我希望在中间件和服务之间拆分策略执行

依赖于: 故事 2 - 作为云管理员,我希望使用我通过 API 定义的策略的服务

角色执行可以放在中间件中,而策略规则中包含的其他约束由服务执行。


工作流 - Liberty 范围

Liberty 目标任务

Liberty 周期中提出的内容是动态传递策略,即向 Keystone 服务器添加将策略信息分发到服务端点的能力。

总体方向是

  1. 允许从 Keystone 基于端点 URL 获取策略文件
  2. 修改 keystonemiddleware 以(在配置后)从 keystone 基于端点 URL 获取策略文件
  3. 修改 oslo.policy 以支持将端点的库存策略与动态策略合并。默认合并策略将是“动态规则覆盖库存规则”。

此目标由以下核心规范表示

  • “动态策略叠加”(https://review.openstack.org/#/c/196753/),指定 oslo.policy 库将如何将现有本地策略文件与动态上传的自定义规则叠加;
  • “动态策略获取和缓存”(https://review.openstack.org/#/c/134655/),定义 Keystone 中间件将如何获取其正在服务的当前服务端点的策略,然后要求 oslo.policy 将现有本地策略文件叠加;
  • “动态策略传递机制”(https://review.openstack.org/#/c/197980/),定义 Keystone 服务器将如何控制缓存机制,以确保不同服务端点之间的策略一致性,这些端点必须具有相同的策略,例如,在 HAProxy 后运行的多个 Nova 进程。

当前,围绕将动态策略与给定的服务端点关联存在一些讨论。替代方案在以下规范中提出

工作流 1 - 初始安装策略

此工作流在下面的序列图中表示,定义了管理员安装 Nova 将如何导致上传策略文件。

Dynamic Policies install sequence

工作流 2 - 自定义策略

此工作流在下面的序列图中表示,定义了管理员如何自定义策略。

Customizing Policy sequence

工作流 3 - 用户请求 URL

此工作流在下面的序列图中表示,定义了如何将上述工作流联系在一起,从而在调用服务 API 时提供动态访问控制解决方案。

Enforcing Policy sequence