Nova 可发现策略 CLI

https://blueprints.launchpad.net/nova/+spec/get-policy-settings-cli

并非所有用户都具有相同的权限集。因此,添加一种列出用户通过的策略规则的方法可能很有帮助。

问题描述

目前,用户没有直接的方式来知道他们被允许使用哪些 API,或者哪些 API 被策略启用。此规范将添加一个新的 CLI 命令,该命令将返回用户可用的操作列表。

用例

作为用户,我想知道我通过了哪些策略,以便我知道可以对我执行哪些操作。

作为用户,我想知道我通过了哪些策略,针对某个目标(例如:实例),以便我知道可以对该目标执行哪些操作。

提议的变更

提议的更改分为两个阶段。第一阶段,在本规范中详细说明,实现了必要的管道,以通过 nova CLI 命令提供原始数据来验证概念。第二阶段,简要描述如下,将原始数据转换为长期可行的形式,并在 API 的新微版本中呈现。

第一阶段

可发现的策略将通过 nova-policy-check nova CLI 命令暴露。

此命令需要用户身份验证。身份验证选项与 python-novaclient 相同,可以作为参数传递,或从环境中加载。

该命令将向请求用户返回策略规则名称列表。它不会返回通过策略规则所需的授权条件。它不能用于确定其他用户通过的策略规则列表。

返回的操作必须满足以下标准

  • 请求用户将通过该操作的策略规则。例如,如果策略规定只有管理员才能使用操作 foo-bar,则只有在请求用户是管理员时才会返回该操作。

  • API 端点必须标记为可发现的。默认情况下,所有 API 都是可发现的 [1]。例如,具有以下策略规则:os_compute_api:servers:discoverable": "is_admin:True 表示 servers API 及其操作仅对管理员可发现,不会返回给任何其他用户。

这将允许测试所有活动的部分,特别是用户权限。

第二阶段

一旦第一阶段发布,就可以开始第二阶段。在第二阶段,原始数据将被转换为一种不暴露服务器策略实现内部细节的格式。例如,客户端不需要知道操作的名称,它们需要知道 URI。

一旦确定并实现了这种长期格式,就可以记录 API,默认情况下公开它(通过更改上述配置项的默认值),并与微版本更新相关联。

备选方案

另一种选择是将第一阶段和第二阶段合并为一个工作单元。这个想法存在两个问题

  • 如果没有分成两个阶段,就无法有效地将第一阶段的具体经验教训融入到工作中。

  • 一次性完成所有工作将难以在合理的时间内完成,从而延长了从实际部署中获得具体经验的时间。

数据模型影响

REST API 影响

安全影响

通知影响

其他最终用户影响

nova nova-policy-check CLI 命令需要身份验证。身份验证选项与 python-novaclient 相同,可以作为参数传递或从环境中加载。如果没有凭据或凭据错误,将引发异常。

该命令的返回值取决于给定的参数

  • 无参数。该命令将检查默认策略规则并将返回所有通过的策略规则名称。

  • config-file。该命令加载给定的 nova.conf 配置文件及其关联的策略文件(如果有),覆盖默认策略规则。该命令将返回所有通过的策略规则名称。例如

    nova policy-check --config-file /path/to/nova.conf
    

    如果文件未找到、无法读取或无法解析,将引发错误。

  • api-name 参数给定。该命令将仅列出包含给定 API 名称的通过策略规则。例如

    nova-policy-check --api-name os-keypairs
    
    or
    
    nova-policy-check --api-name os-keyp
    

    此命令将仅列出 os-keypairs 的通过策略。

    "os_compute_api:os-keypairs:discoverable": "@"
    "os_compute_api:os-keypairs": "rule:admin_or_owner"
    "os_compute_api:os-keypairs:index": "rule:admin_api or user_id:%(user_id)s"
    "os_compute_api:os-keypairs:show": "rule:admin_api or user_id:%(user_id)s"
    "os_compute_api:os-keypairs:create": "rule:admin_api or user_id:%(user_id)s"
    "os_compute_api:os-keypairs:delete": "rule:admin_api or user_id:%(user_id)s"
    
  • target 参数给定。该命令将仅列出给定目标的通过策略。例如

    nova-policy-check --target instance:<instance_uuid>
    

    此命令将列出给定目标的通过策略

    "os_compute_api:servers:create"
    "os_compute_api:servers:create:attach_network"
    ...
    "os_compute_api:os-admin-actions"
    "os_compute_api:os-admin-actions:reset_network"
    

    如果不存在具有给定 instance_uuid 的实例,该命令将引发错误。

    可以使用多个 target 参数

    nova-policy-check --target project_id:<project_id> --target user_id:<uid>
    

性能影响

其他部署者影响

开发人员影响

实现

负责人

主要负责人

Claudiu Belu <cbelu@cloudbasesolutions.com> Andrew Laski <andrew@lascii.com>

工作项

  • nova-policy-check CLI 命令。

第二阶段将在一个单独的规范中指定,该规范将根据第一阶段实施中学到的内容创建。

依赖项

将策略默认值嵌入代码

https://review.openstack.org/#/c/290155/

测试

  • 单元和功能测试。

文档影响

新的 nova CLI 命令需要记录。

参考资料

[1] 默认“可发现”策略为“@”

https://review.openstack.org/#/c/281911/1

[2] Nova API 会议

http://eavesdrop.openstack.org/meetings/nova_api/2016/nova_api.2016-04-13-13.00.log.html

[3] Newton 设计峰会

https://etherpad.openstack.org/p/newton-nova-api

历史

修订版

发布名称

描述

Newton

引入