授权策略支持¶
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 调用添加策略检查
添加单元测试
添加文档