blob: fb8976ff0e6c1365b9bef2677b1230a4379faebf [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.
Felipe Monteiro543f7b92018-06-10 13:38:31 -040036* *Complete coverage*. Patrole should validate all policy in code defaults. For
37 testing, Patrole uses the API-to-policy mapping contained in each project's
38 `policy in code`_ documentation where applicable.
39
40 For example, Nova's policy in code documentation is located in the
41 `Nova repository`_ under ``nova/policies``. Likewise, Keystone's policy in
42 code documentation is located in the `Keystone repository`_ under
43 ``keystone/common/policies``. The other OpenStack services follow the same
44 directory layout pattern with respect to policy in code.
45
46 .. note::
47
48 Realistically this is not always possible because some services have
49 not yet moved to policy in code.
50
51* *Self-cleaning*. Patrole should attempt to clean up after itself; whenever
Felipe Monteiroc2873892017-11-15 06:09:02 +000052 possible we should tear down resources when done.
53
54 .. note::
55
56 Patrole modifies roles dynamically in the background, which affects
57 pre-provisioned credentials. Work is currently underway to clean up
58 modifications made to pre-provisioned credentials.
59
Felipe Monteiro543f7b92018-06-10 13:38:31 -040060* *Self-testing*. Patrole should be self-testing.
61
62.. _policy in code: https://specs.openstack.org/openstack/oslo-specs/specs/newton/policy-in-code.html
63.. _Nova repository: https://github.com/openstack/nova/tree/master/nova/policies
64.. _Keystone repository: https://github.com/openstack/keystone/tree/master/keystone/common/policies
Felipe Monteiroc2873892017-11-15 06:09:02 +000065
DavidPurcell663aedf2017-01-03 10:01:14 -050066Features
Felipe Monteiro780210d2017-07-17 22:21:53 +010067--------
68* Validation of default policy definitions located in policy.json files.
69* Validation of in-code policy definitions.
70* Validation of custom policy file definitions that override default policy
71 definitions.
72* Built-in positive and negative testing. Positive and negative testing
73 are performed using the same tests and role-switching.
74* Valdation of custom roles as well as default OpenStack roles.
Felipe Monteiro7bc35dc2017-04-19 21:11:46 +010075
76.. note::
77
Felipe Monteiro780210d2017-07-17 22:21:53 +010078 Patrole does not yet support policy.yaml files, the new file format for
79 policy files in OpenStack.
Felipe Monteiro7bc35dc2017-04-19 21:11:46 +010080
81How It Works
Felipe Monteiro780210d2017-07-17 22:21:53 +010082------------
83Patrole leverages ``oslo.policy`` (OpenStack's policy enforcement engine) to
84determine whether a given role is allowed to perform a policy action, given a
85specific role and OpenStack service. The output from ``oslo.policy`` (the
86expected result) and the actual result from test execution are compared to
87each other: if both results match, then the test passes; else it fails.
Felipe Monteiro7bc35dc2017-04-19 21:11:46 +010088
gaozx268b71d2017-07-20 21:35:35 -040089* Documentation: https://docs.openstack.org/patrole/latest/
Felipe Monteiro780210d2017-07-17 22:21:53 +010090* Bugs: https://bugs.launchpad.net/patrole
Felipe Monteiro7bc35dc2017-04-19 21:11:46 +010091
Felipe Monteiro780210d2017-07-17 22:21:53 +010092Quickstart
Felipe Monteiro7c7b5702017-07-21 01:43:42 +010093----------
Felipe Monteiro780210d2017-07-17 22:21:53 +010094Tempest is a prerequisite for running Patrole. If you do not have Tempest
95installed, please reference the official Tempest documentation for guidance.
Felipe Monteiro7bc35dc2017-04-19 21:11:46 +010096
Felipe Monteiro780210d2017-07-17 22:21:53 +010097Assuming Tempest is installed, the simplest way to configure Patrole is:
Felipe Monteiro7bc35dc2017-04-19 21:11:46 +010098
Felipe Monteiro780210d2017-07-17 22:21:53 +0100991. Open up the ``tempest.conf`` configuration file and include the following
100settings:
Felipe Monteiro7bc35dc2017-04-19 21:11:46 +0100101
Felipe Monteiro780210d2017-07-17 22:21:53 +0100102.. code-block:: ini
Felipe Monteiro7bc35dc2017-04-19 21:11:46 +0100103
Felipe Monteiro780210d2017-07-17 22:21:53 +0100104 [rbac]
105 enable_rbac = True
106 rbac_test_role = admin
Felipe Monteiro7bc35dc2017-04-19 21:11:46 +0100107
Felipe Monteiro780210d2017-07-17 22:21:53 +0100108These settings tell Patrole to run RBAC tests using the "admin" role (which
109is the default admin role in OpenStack) to verify the default policy
110definitions used by OpenStack services. Specifying a different role
111for ``rbac_test_role`` will run Patrole tests against that role. For additional
112information about Patrole's configuration settings, please refer to
113:ref:`patrole-configuration` and :ref:`patrole-sampleconf` for a sample
114configuration file.
Felipe Monteiro7bc35dc2017-04-19 21:11:46 +0100115
Felipe Monteiro780210d2017-07-17 22:21:53 +01001162. You are now ready to run Patrole. To do so, you can use any testr-based test
117runner::
Felipe Monteiro7bc35dc2017-04-19 21:11:46 +0100118
Felipe Monteiro780210d2017-07-17 22:21:53 +0100119 $ testr run patrole_tempest_plugin.tests.api
Felipe Monteiro7bc35dc2017-04-19 21:11:46 +0100120
Felipe Monteiro780210d2017-07-17 22:21:53 +0100121or::
Felipe Monteiro7bc35dc2017-04-19 21:11:46 +0100122
Felipe Monteiro780210d2017-07-17 22:21:53 +0100123 $ ostestr --regex '(?!.*\[.*\bslow\b.*\])(^patrole_tempest_plugin\.tests\.api)'
Felipe Monteiro7bc35dc2017-04-19 21:11:46 +0100124
Felipe Monteiro780210d2017-07-17 22:21:53 +0100125It is also possible to run Patrole using tox::
Felipe Monteiro7bc35dc2017-04-19 21:11:46 +0100126
Felipe Monteiro780210d2017-07-17 22:21:53 +0100127 tox -eall-plugin -- patrole_tempest_plugin.tests.api
Felipe Monteiro7bc35dc2017-04-19 21:11:46 +0100128
Felipe Monteiro780210d2017-07-17 22:21:53 +0100129Release Versioning
Felipe Monteiro7c7b5702017-07-21 01:43:42 +0100130------------------
Felipe Monteiro780210d2017-07-17 22:21:53 +0100131`Patrole Release Notes <https://docs.openstack.org/releasenotes/patrole/>`_
132shows which changes have been released for each version.
Felipe Monteiro7bc35dc2017-04-19 21:11:46 +0100133
Felipe Monteiro780210d2017-07-17 22:21:53 +0100134Patrole's release versioning follows Tempest's conventions. Like Tempest,
135Patrole is branchless and uses versioning instead.