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表示serversAPI 及其操作仅对管理员可发现,不会返回给任何其他用户。
这将允许测试所有活动的部分,特别是用户权限。
第二阶段¶
一旦第一阶段发布,就可以开始第二阶段。在第二阶段,原始数据将被转换为一种不暴露服务器策略实现内部细节的格式。例如,客户端不需要知道操作的名称,它们需要知道 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-checkCLI 命令。
第二阶段将在一个单独的规范中指定,该规范将根据第一阶段实施中学到的内容创建。
依赖项¶
- 将策略默认值嵌入代码
测试¶
单元和功能测试。
文档影响¶
新的 nova CLI 命令需要记录。
参考资料¶
- [1] 默认“可发现”策略为“@”
- [2] Nova API 会议
http://eavesdrop.openstack.org/meetings/nova_api/2016/nova_api.2016-04-13-13.00.log.html
- [3] Newton 设计峰会
历史¶
发布名称 |
描述 |
|---|---|
Newton |
引入 |