授权策略支持

OpenStack 组件应该检查用户权限以执行任何操作。通常这些检查是基于角色的。请参阅 https://docs.openstack.org/keystone/latest/#approach-to-authorization-policy。Zaqar 也需要支持策略。

问题描述

目前 Zaqar 缺少对操作的细粒度权限。例如,很难允许一个用户只能从队列中获取消息,但不能向队列中发布消息,或者类似的情况。

提议的变更

为所有 Zaqar API 端点添加策略检查。这可以通过与其他 OpenStack 组件相同的方式完成,即利用 oslo.policy 模块,该模块将完成所有底层工作。

实现应该相当简单,使用 oslo.policy 的 Enforcer 类实例化策略文件,然后使用 enforce 方法来检查每个 API 调用。

策略文件建议内容

{
    "context_is_admin": "role:admin",
    "admin_or_owner":  "is_admin:True or project_id:%(project_id)s",
    "default": "rule:admin_or_owner",

    "queues:get_all": "",
    "queues:put": "",
    "queues:get": "",
    "queues:delete": "",

    "messages:post": "",
    "messages:get": "",
    "messages:bulk_get": "",
    "messages:bulk_delete": "",
    "messages:claim": "",

    "subscriptions:get_all": "",
    "subscriptions:create": "",
    "subscriptions:get": "",
    "subscriptions:delete": "",
    "subscriptions:update": "",
}

备选方案

无。

数据模型影响

无。

REST API 影响

无。

其他最终用户影响

无。

部署者影响

必须部署一个额外的文件,policy.json。部署者应验证该文件中的设置是否正确,以确保允许正确的用户访问。

开发者影响

如果为 Zaqar 添加了任何新的 API 端点,则应相应地更新 json 文件中的策略规则。

实现

负责人

主要负责人

kragniz (Louis Taylor)

里程碑

完成目标里程碑:L-1

工作项

  • 添加配置选项以控制策略文件和设置

  • 为所有 API 调用添加策略检查

  • 添加单元测试

  • 添加文档

依赖项