| .. _rbac-validation: |
| |
| RBAC Testing Validation |
| ======================= |
| |
| -------- |
| Overview |
| -------- |
| |
| RBAC testing validation is broken up into 3 stages: |
| |
| 1. "Expected" stage. Determine whether the test should be able to succeed |
| or fail based on the test role defined by ``[patrole] rbac_test_role``) |
| and the policy action that the test enforces. |
| 2. "Actual" stage. Run the test by calling the API endpoint that enforces |
| the expected policy action using the test role. |
| 3. Comparing the outputs from both stages for consistency. A "consistent" |
| result is treated as a pass and an "inconsistent" result is treated |
| as a failure. "Consistent" (or successful) cases include: |
| |
| * Expected result is ``True`` and the test passes. |
| * Expected result is ``False`` and the test fails. |
| |
| "Inconsistent" (or failing) cases include: |
| |
| * Expected result is ``False`` and the test passes. This results in an |
| ``RbacOverPermission`` exception getting thrown. |
| * Expected result is ``True`` and the test fails. This results in a |
| ``Forbidden`` exception getting thrown. |
| |
| For example, a 200 from the API call and a ``True`` result from |
| ``oslo.policy`` or a 403 from the API call and a ``False`` result from |
| ``oslo.policy`` are successful results. |
| |
| ------------------------------- |
| The RBAC Rule Validation Module |
| ------------------------------- |
| |
| High-level module that implements decorator inside which the "Expected" stage |
| is initiated. |
| |
| .. automodule:: patrole_tempest_plugin.rbac_rule_validation |
| :members: |
| :private-members: |
| |
| --------------------------- |
| The Policy Authority Module |
| --------------------------- |
| |
| Module called by the "RBAC Rule Validation Module" to verify whether the test |
| role is allowed to execute a policy action by querying ``oslo.policy`` with |
| required test data. The result is used by the "RBAC Rule Validation Module" as |
| the `expected` result. |
| |
| This module is only called for calculating the `expected` result if |
| ``[patrole] test_custom_requirements`` is ``False``. |
| |
| Using the Policy Authority Module, policy verification is performed by: |
| |
| 1. Pooling together the default `in-code` policy rules. |
| 2. Overriding the defaults with custom policy rules located in a policy.json, |
| if the policy file exists and the custom policy definition is explicitly |
| defined therein. |
| 3. Confirming that the policy action -- for example, "list_users" -- exists. |
| (``oslo.policy`` otherwise claims that role "foo" is allowed to |
| perform policy action "bar", for example, because it defers to the |
| "default" policy rule and oftentimes the default can be "anyone allowed"). |
| 4. Performing a call with all necessary data to ``oslo.policy`` and returning |
| the expected result back to ``rbac_rule_validation`` decorator. |
| |
| .. automodule:: patrole_tempest_plugin.policy_authority |
| :members: |
| :special-members: |