blob: 0c786b9eab5c2745ee3799a03973e6b6d963df4a [file] [log] [blame]
Felipe Monteiroc4589322017-06-09 19:42:50 +01001========================
2Team and repository tags
3========================
4
shangxiaobj11b02322017-08-14 22:45:11 -07005.. image:: https://governance.openstack.org/tc/badges/patrole.svg
6 :target: https://governance.openstack.org/tc/reference/tags/index.html
Felipe Monteiroc4589322017-06-09 19:42:50 +01007
Felipe Monteiroc4589322017-06-09 19:42:50 +01008Patrole - RBAC Integration Tempest Plugin
9=========================================
DavidPurcell663aedf2017-01-03 10:01:14 -050010
Felipe Monteiro780210d2017-07-17 22:21:53 +010011Patrole is a security validation tool for verifying that Role-Based Access
Felipe Monteiro443d39c2018-04-08 17:05:33 -040012Control is correctly configured and enforced in a system. It runs
13`Tempest`_-based API tests using specified RBAC roles, thus allowing
14deployments to verify that only intended roles have access to those APIs.
DavidPurcell663aedf2017-01-03 10:01:14 -050015
Felipe Monteiro780210d2017-07-17 22:21:53 +010016Patrole currently offers testing for the following OpenStack services: Nova,
17Neutron, Glance, Cinder and Keystone.
DavidPurcell663aedf2017-01-03 10:01:14 -050018
Felipe Monteiroc2873892017-11-15 06:09:02 +000019Patrole is currently undergoing heavy development. As more projects move
20toward policy in code, Patrole will align its testing with the appropriate
21documentation.
22
Felipe Monteiro443d39c2018-04-08 17:05:33 -040023.. _Tempest: https://docs.openstack.org/tempest/latest/
24
Felipe Monteiroc2873892017-11-15 06:09:02 +000025Design Principles
26-----------------
27
28Patrole borrows some design principles from Tempest, but not all, as its
29testing scope is confined to policies.
30
31* *Stability*. Patrole uses OpenStack public interfaces. Tests in Patrole
32 should only touch public OpenStack APIs.
33* *Atomicity*. Patrole tests should be atomic: they should test policies in
34 isolation. Unlike Tempest, a Patrole test strives to only call a single
35 endpoint at a time.
36* *Holistic coverage*. Patrole strives for complete coverage of the OpenStack
37 API. Additionally, Patrole strives to test the API-to-policy mapping
38 contained in each project's policy in code documentation.
39* *Self-contained*. Patrole should attempt to clean up after itself; whenever
40 possible we should tear down resources when done.
41
42 .. note::
43
44 Patrole modifies roles dynamically in the background, which affects
45 pre-provisioned credentials. Work is currently underway to clean up
46 modifications made to pre-provisioned credentials.
47
48* *Self-tested*. Patrole should be self-tested.
49
DavidPurcell663aedf2017-01-03 10:01:14 -050050Features
Felipe Monteiro780210d2017-07-17 22:21:53 +010051--------
52* Validation of default policy definitions located in policy.json files.
53* Validation of in-code policy definitions.
54* Validation of custom policy file definitions that override default policy
55 definitions.
56* Built-in positive and negative testing. Positive and negative testing
57 are performed using the same tests and role-switching.
58* Valdation of custom roles as well as default OpenStack roles.
Felipe Monteiro7bc35dc2017-04-19 21:11:46 +010059
60.. note::
61
Felipe Monteiro780210d2017-07-17 22:21:53 +010062 Patrole does not yet support policy.yaml files, the new file format for
63 policy files in OpenStack.
Felipe Monteiro7bc35dc2017-04-19 21:11:46 +010064
65How It Works
Felipe Monteiro780210d2017-07-17 22:21:53 +010066------------
67Patrole leverages ``oslo.policy`` (OpenStack's policy enforcement engine) to
68determine whether a given role is allowed to perform a policy action, given a
69specific role and OpenStack service. The output from ``oslo.policy`` (the
70expected result) and the actual result from test execution are compared to
71each other: if both results match, then the test passes; else it fails.
Felipe Monteiro7bc35dc2017-04-19 21:11:46 +010072
gaozx268b71d2017-07-20 21:35:35 -040073* Documentation: https://docs.openstack.org/patrole/latest/
Felipe Monteiro780210d2017-07-17 22:21:53 +010074* Bugs: https://bugs.launchpad.net/patrole
Felipe Monteiro7bc35dc2017-04-19 21:11:46 +010075
Felipe Monteiro780210d2017-07-17 22:21:53 +010076Quickstart
Felipe Monteiro7c7b5702017-07-21 01:43:42 +010077----------
Felipe Monteiro780210d2017-07-17 22:21:53 +010078Tempest is a prerequisite for running Patrole. If you do not have Tempest
79installed, please reference the official Tempest documentation for guidance.
Felipe Monteiro7bc35dc2017-04-19 21:11:46 +010080
Felipe Monteiro780210d2017-07-17 22:21:53 +010081Assuming Tempest is installed, the simplest way to configure Patrole is:
Felipe Monteiro7bc35dc2017-04-19 21:11:46 +010082
Felipe Monteiro780210d2017-07-17 22:21:53 +0100831. Open up the ``tempest.conf`` configuration file and include the following
84settings:
Felipe Monteiro7bc35dc2017-04-19 21:11:46 +010085
Felipe Monteiro780210d2017-07-17 22:21:53 +010086.. code-block:: ini
Felipe Monteiro7bc35dc2017-04-19 21:11:46 +010087
Felipe Monteiro780210d2017-07-17 22:21:53 +010088 [rbac]
89 enable_rbac = True
90 rbac_test_role = admin
Felipe Monteiro7bc35dc2017-04-19 21:11:46 +010091
Felipe Monteiro780210d2017-07-17 22:21:53 +010092These settings tell Patrole to run RBAC tests using the "admin" role (which
93is the default admin role in OpenStack) to verify the default policy
94definitions used by OpenStack services. Specifying a different role
95for ``rbac_test_role`` will run Patrole tests against that role. For additional
96information about Patrole's configuration settings, please refer to
97:ref:`patrole-configuration` and :ref:`patrole-sampleconf` for a sample
98configuration file.
Felipe Monteiro7bc35dc2017-04-19 21:11:46 +010099
Felipe Monteiro780210d2017-07-17 22:21:53 +01001002. You are now ready to run Patrole. To do so, you can use any testr-based test
101runner::
Felipe Monteiro7bc35dc2017-04-19 21:11:46 +0100102
Felipe Monteiro780210d2017-07-17 22:21:53 +0100103 $ testr run patrole_tempest_plugin.tests.api
Felipe Monteiro7bc35dc2017-04-19 21:11:46 +0100104
Felipe Monteiro780210d2017-07-17 22:21:53 +0100105or::
Felipe Monteiro7bc35dc2017-04-19 21:11:46 +0100106
Felipe Monteiro780210d2017-07-17 22:21:53 +0100107 $ ostestr --regex '(?!.*\[.*\bslow\b.*\])(^patrole_tempest_plugin\.tests\.api)'
Felipe Monteiro7bc35dc2017-04-19 21:11:46 +0100108
Felipe Monteiro780210d2017-07-17 22:21:53 +0100109It is also possible to run Patrole using tox::
Felipe Monteiro7bc35dc2017-04-19 21:11:46 +0100110
Felipe Monteiro780210d2017-07-17 22:21:53 +0100111 tox -eall-plugin -- patrole_tempest_plugin.tests.api
Felipe Monteiro7bc35dc2017-04-19 21:11:46 +0100112
Felipe Monteiro780210d2017-07-17 22:21:53 +0100113Release Versioning
Felipe Monteiro7c7b5702017-07-21 01:43:42 +0100114------------------
Felipe Monteiro780210d2017-07-17 22:21:53 +0100115`Patrole Release Notes <https://docs.openstack.org/releasenotes/patrole/>`_
116shows which changes have been released for each version.
Felipe Monteiro7bc35dc2017-04-19 21:11:46 +0100117
Felipe Monteiro780210d2017-07-17 22:21:53 +0100118Patrole's release versioning follows Tempest's conventions. Like Tempest,
119Patrole is branchless and uses versioning instead.