跳转到主要内容

Patrole是一个用于验证在OpenStack部署中执行基于角色的访问控制的工具。

项目描述

Patrole是一组针对运行中的OpenStack集群运行的集成测试。它有一系列专门用于验证云的RBAC实现正确性和完整性的测试。

更重要的是,Patrole是一个安全验证工具,用于验证基于角色的访问控制是否正确配置并强制执行在OpenStack云中。它使用指定的RBAC角色运行基于Tempest的API测试,从而允许部署验证只有预期的角色才能访问这些API。

Patrole目前正在经历重大开发。随着更多项目转向代码中的策略,Patrole将使测试与适当的文档保持一致。

团队和存储库标记

https://governance.openstack.org/tc/badges/patrole.svg

设计原则

作为Tempest插件,Patrole借鉴了一些Tempest设计原则,但并非全部,因为其测试范围仅限于策略。

  • 稳定性。Patrole使用OpenStack公共接口。Patrole中的测试应该仅涉及公共OpenStack API。

  • 原子性。Patrole测试应该是原子的:它们应该独立测试策略。与Tempest不同,Patrole测试努力一次只调用一个端点。这是因为验证每个策略是否被正确授权非常重要,而最好的方法就是单独验证每个策略,以避免测试污染。

  • 完全覆盖。Patrole应该验证代码中默认的所有策略。对于测试,Patrole使用适用于每个项目的策略在代码文档中包含的API到策略映射。

    例如,Nova的策略在代码文档位于Nova存储库下的nova/policies。同样,Keystone的策略在代码文档位于Keystone存储库下的keystone/common/policies。其他OpenStack服务在策略在代码方面的目录布局模式上遵循相同的模式。

  • 可定制。Patrole应该能够验证自定义策略覆盖,以确保这些覆盖增强了而不是削弱了云的RBAC配置。此外,Patrole应该能够验证任何角色。

  • 自我清理。Patrole应该尝试自我清理;在可能的情况下,我们应该在完成后拆毁资源。

  • 自我测试。Patrole应该是自我测试的。

功能

  • 位于策略.json文件中的默认策略定义的验证。

  • 代码中策略定义的验证。

  • 覆盖默认策略定义的自定义策略文件定义的验证。

  • 内置的正向和反向测试。正向和反向测试使用相同的测试和角色切换执行。

  • 自定义角色以及默认OpenStack角色的验证。

工作原理

Patrole利用oslo.policy(OpenStack的策略执行引擎)来确定给定角色是否被允许执行策略操作,给定特定的角色和OpenStack服务。将oslo.policy的输出(预期结果)与测试执行的实际情况进行比较:如果两者匹配,则测试通过;否则失败。

术语

  • 预期结果 - 给定测试的预期结果。

  • 实际结果 - 给定测试的实际结果。

  • 最终结果 - 预期和实际结果之间的匹配。预期结果和实际结果不匹配将导致测试失败。

    • 预期:通过 | 实际:通过 - 测试用例成功

    • 预期:通过 | 实际:失败 - 测试用例权限不足失败

    • 预期:失败 | 实际:通过 - 测试用例权限过度失败

    • 预期:失败 | 实际:失败(预期异常) - 测试用例成功

    • 预期:失败 | 实际:失败(意外异常) - 测试用例失败

快速入门

要运行Patrole,您必须首先安装并正确配置Tempest。请参考Tempest_quickstart指南以完成此操作。遵循其中概述的所有步骤。之后,继续执行以下步骤。

  1. 首先,您需要安装Patrole。在检出Patrole存储库后,使用pip执行此操作。

    $ git clone https://opendev.org/openstack/patrole
    $ pip install patrole/

    这可以在venv环境中完成。

  2. 接下来,您必须正确配置Patrole,这相对简单。有关配置Patrole的详细信息,请参阅Patrole配置

  3. 配置完成后,现在您就可以运行Patrole了。可以使用tempest_run命令运行。可以通过以下方式运行:

    $ tempest run --regex '^patrole_tempest_plugin\.tests\.api'

    还可以直接使用testr或任何基于testr的测试运行器,如ostestr。例如,从工作空间目录运行

    $ stestr --regex '(?!.*\[.*\bslow\b.*\])(^patrole_tempest_plugin\.tests\.api))'

    将运行与默认门控作业相同的测试集。

    您还可以使用tox运行Patrole测试,但由于Patrole需要访问全局包,请使用--sitepackages参数。要这样做,请cdTempest目录并运行

    $ tox -eall --sitepackages -- patrole_tempest_plugin.tests.api
  4. 测试的日志信息被捕获在Tempest存储库下的tempest.log中。一些Patrole调试信息被捕获在有关预期测试结果和角色覆盖的相关日志中。

    更详细的RBAC测试日志输出被发送到Patrole存储库下的patrole.log。要配置Patrole的日志记录,请参阅Patrole配置指南

RBAC测试

要更改patrole测试运行的角色的角色,请编辑tempest.conf中patrole部分下的rbac_test_roles

[patrole]
rbac_test_roles = member,reader
...

有关RBAC的更多信息,请参阅rbac-overview文档页面。

有关Patrole为哪些项目提供RBAC测试的信息,请参阅HACKING文档页面。

单元测试

Patrole还有一组单元测试,用于测试Patrole代码本身。可以通过指定测试发现路径来运行这些测试

$ stestr --test-path ./patrole_tempest_plugin/tests/unit run

通过将--test-path选项设置为./patrole_tempest_plugin/tests/unit,它指定测试发现应仅运行在单元测试目录中。

或者,有py27和py35的tox作业,将使用相应的Python版本运行单元测试。

一个常见的活动是只运行单个测试;您可以通过指定仅针对单个测试运行py27或py35测试来使用tox完成此操作

$ tox -e py27 -- -n patrole_tempest_plugin.tests.unit.test_rbac_utils.RBACUtilsTest.test_override_role_with_missing_admin_role

或者运行test_rbac_utils.py文件中的所有测试

$ tox -e py27 -- -n patrole_tempest_plugin.tests.unit.test_rbac_utils

您还可以使用正则表达式运行任何匹配的测试

$ tox -e py27 -- test_rbac_utils

有关这些选项和关于stestr的详细信息,请参阅stestr文档

版本控制

Patrole发行说明显示了每个版本已发布的更改。

Patrole的版本控制遵循Tempest的约定。与Tempest一样,Patrole没有分支,而是使用版本控制。

故事板

错误和增强功能通过Patrole的Storyboard页面进行跟踪。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

patrole-0.16.0.tar.gz (214.9 kB 查看哈希值)

上传时间 源代码

构建分布

patrole-0.16.0-py3-none-any.whl (269.8 kB 查看哈希值)

上传时间 Python 3

由支持