Merge "Allow service role more RBAC access for Octavia"
This commit is contained in:
commit
93fd409f55
@ -24,7 +24,7 @@ The network IP availability API now support project scope and default roles.
|
||||
rules = [
|
||||
policy.DocumentedRuleDefault(
|
||||
name='get_network_ip_availability',
|
||||
check_str=base.ADMIN,
|
||||
check_str=base.ADMIN_OR_SERVICE,
|
||||
scope_types=['project'],
|
||||
description='Get network IP availability',
|
||||
operations=[
|
||||
|
@ -258,7 +258,8 @@ rules = [
|
||||
name='create_port:allowed_address_pairs',
|
||||
check_str=neutron_policy.policy_or(
|
||||
base.ADMIN_OR_NET_OWNER_MEMBER,
|
||||
base.PROJECT_MANAGER),
|
||||
base.PROJECT_MANAGER,
|
||||
base.SERVICE),
|
||||
scope_types=['project'],
|
||||
description=(
|
||||
'Specify ``allowed_address_pairs`` '
|
||||
@ -275,7 +276,8 @@ rules = [
|
||||
name='create_port:allowed_address_pairs:mac_address',
|
||||
check_str=neutron_policy.policy_or(
|
||||
base.ADMIN_OR_NET_OWNER_MEMBER,
|
||||
base.PROJECT_MANAGER),
|
||||
base.PROJECT_MANAGER,
|
||||
base.SERVICE),
|
||||
scope_types=['project'],
|
||||
description=(
|
||||
'Specify ``mac_address` of `allowed_address_pairs`` '
|
||||
@ -292,7 +294,8 @@ rules = [
|
||||
name='create_port:allowed_address_pairs:ip_address',
|
||||
check_str=neutron_policy.policy_or(
|
||||
base.ADMIN_OR_NET_OWNER_MEMBER,
|
||||
base.PROJECT_MANAGER),
|
||||
base.PROJECT_MANAGER,
|
||||
base.SERVICE),
|
||||
scope_types=['project'],
|
||||
description=(
|
||||
'Specify ``ip_address`` of ``allowed_address_pairs`` '
|
||||
@ -650,7 +653,8 @@ rules = [
|
||||
name='update_port:allowed_address_pairs',
|
||||
check_str=neutron_policy.policy_or(
|
||||
base.ADMIN_OR_NET_OWNER_MEMBER,
|
||||
base.PROJECT_MANAGER),
|
||||
base.PROJECT_MANAGER,
|
||||
base.SERVICE),
|
||||
scope_types=['project'],
|
||||
description='Update ``allowed_address_pairs`` attribute of a port',
|
||||
operations=ACTION_PUT,
|
||||
@ -664,7 +668,8 @@ rules = [
|
||||
name='update_port:allowed_address_pairs:mac_address',
|
||||
check_str=neutron_policy.policy_or(
|
||||
base.ADMIN_OR_NET_OWNER_MEMBER,
|
||||
base.PROJECT_MANAGER),
|
||||
base.PROJECT_MANAGER,
|
||||
base.SERVICE),
|
||||
scope_types=['project'],
|
||||
description=(
|
||||
'Update ``mac_address`` of ``allowed_address_pairs`` '
|
||||
@ -681,7 +686,8 @@ rules = [
|
||||
name='update_port:allowed_address_pairs:ip_address',
|
||||
check_str=neutron_policy.policy_or(
|
||||
base.ADMIN_OR_NET_OWNER_MEMBER,
|
||||
base.PROJECT_MANAGER),
|
||||
base.PROJECT_MANAGER,
|
||||
base.SERVICE),
|
||||
scope_types=['project'],
|
||||
description=(
|
||||
'Update ``ip_address`` of ``allowed_address_pairs`` '
|
||||
|
@ -126,6 +126,7 @@ rules = [
|
||||
'rule:shared',
|
||||
'rule:external_network',
|
||||
base.ADMIN_OR_NET_OWNER_READER,
|
||||
base.SERVICE,
|
||||
),
|
||||
scope_types=['project'],
|
||||
description='Get a subnet',
|
||||
|
@ -99,7 +99,7 @@ class ServiceRoleTests(NetworkIPAvailabilityAPITestCase):
|
||||
self.context = self.service_ctx
|
||||
|
||||
def test_get_network_ip_availability(self):
|
||||
self.assertRaises(
|
||||
base_policy.PolicyNotAuthorized,
|
||||
policy.enforce,
|
||||
self.context, 'get_network_ip_availability', self.target)
|
||||
self.assertTrue(
|
||||
policy.enforce(
|
||||
self.context, 'get_network_ip_availability',
|
||||
self.target))
|
||||
|
@ -1628,25 +1628,22 @@ class ServiceRoleTests(PortAPITestCase):
|
||||
'create_port:binding:vnic_type', self.target))
|
||||
|
||||
def test_create_port_with_allowed_address_pairs(self):
|
||||
self.assertRaises(
|
||||
base_policy.PolicyNotAuthorized,
|
||||
policy.enforce,
|
||||
self.context, 'create_port:allowed_address_pairs',
|
||||
self.target)
|
||||
self.assertTrue(
|
||||
policy.enforce(
|
||||
self.context, 'create_port:allowed_address_pairs',
|
||||
self.target))
|
||||
|
||||
def test_create_port_with_allowed_address_pairs_and_mac_address(self):
|
||||
self.assertRaises(
|
||||
base_policy.PolicyNotAuthorized,
|
||||
policy.enforce,
|
||||
self.context, 'create_port:allowed_address_pairs:mac_address',
|
||||
self.alt_target)
|
||||
self.assertTrue(
|
||||
policy.enforce(
|
||||
self.context, 'create_port:allowed_address_pairs:mac_address',
|
||||
self.alt_target))
|
||||
|
||||
def test_create_port_with_allowed_address_pairs_and_ip_address(self):
|
||||
self.assertRaises(
|
||||
base_policy.PolicyNotAuthorized,
|
||||
policy.enforce,
|
||||
self.context, 'create_port:allowed_address_pairs:ip_address',
|
||||
self.target)
|
||||
self.assertTrue(
|
||||
policy.enforce(
|
||||
self.context, 'create_port:allowed_address_pairs:ip_address',
|
||||
self.target))
|
||||
|
||||
def test_create_port_tags(self):
|
||||
self.assertRaises(
|
||||
@ -1744,25 +1741,22 @@ class ServiceRoleTests(PortAPITestCase):
|
||||
self.context, 'update_port:binding:vnic_type', self.target))
|
||||
|
||||
def test_update_port_with_allowed_address_pairs(self):
|
||||
self.assertRaises(
|
||||
base_policy.PolicyNotAuthorized,
|
||||
policy.enforce,
|
||||
self.context, 'update_port:allowed_address_pairs',
|
||||
self.target)
|
||||
self.assertTrue(
|
||||
policy.enforce(
|
||||
self.context, 'update_port:allowed_address_pairs',
|
||||
self.target))
|
||||
|
||||
def test_update_port_with_allowed_address_pairs_and_mac_address(self):
|
||||
self.assertRaises(
|
||||
base_policy.PolicyNotAuthorized,
|
||||
policy.enforce,
|
||||
self.context, 'update_port:allowed_address_pairs:mac_address',
|
||||
self.target)
|
||||
self.assertTrue(
|
||||
policy.enforce(
|
||||
self.context, 'update_port:allowed_address_pairs:mac_address',
|
||||
self.target))
|
||||
|
||||
def test_update_port_with_allowed_address_pairs_and_ip_address(self):
|
||||
self.assertRaises(
|
||||
base_policy.PolicyNotAuthorized,
|
||||
policy.enforce,
|
||||
self.context, 'update_port:allowed_address_pairs:ip_address',
|
||||
self.target)
|
||||
self.assertTrue(
|
||||
policy.enforce(
|
||||
self.context, 'update_port:allowed_address_pairs:ip_address',
|
||||
self.target))
|
||||
|
||||
def test_update_port_data_plane_status(self):
|
||||
self.assertRaises(
|
||||
|
@ -927,10 +927,8 @@ class ServiceRoleTests(SubnetAPITestCase):
|
||||
self.context, 'create_subnet:tags', self.target)
|
||||
|
||||
def test_get_subnet(self):
|
||||
self.assertRaises(
|
||||
base_policy.PolicyNotAuthorized,
|
||||
policy.enforce,
|
||||
self.context, 'get_subnet', self.target)
|
||||
self.assertTrue(
|
||||
policy.enforce(self.context, 'get_subnet', self.target))
|
||||
|
||||
def test_get_subnet_segment_id(self):
|
||||
self.assertRaises(
|
||||
|
@ -0,0 +1,33 @@
|
||||
---
|
||||
features:
|
||||
- |
|
||||
Updated RBAC rules so that they allow the ``service`` role to pass the
|
||||
following policies by default:
|
||||
|
||||
- ``get_subnet``
|
||||
|
||||
- ``get_network_ip_availability``
|
||||
|
||||
- ``create_port:allowed_address_pairs``
|
||||
|
||||
- ``create_port:allowed_address_pairs:mac_address``
|
||||
|
||||
- ``create_port:allowed_address_pairs:ip_address``
|
||||
|
||||
- ``update_port:allowed_address_pairs``
|
||||
|
||||
- ``update_port:allowed_address_pairs:mac_address``
|
||||
|
||||
- ``update_port:allowed_address_pairs:ip_address``
|
||||
|
||||
This allows for integration with the Octavia project using the
|
||||
``service`` role instead of the ``admin`` role for integration
|
||||
with Neutron.
|
||||
upgrade:
|
||||
- |
|
||||
Default RBAC policies for ``get_subnet``, ``get_network_ip_availability``,
|
||||
``create_port:allowed_address_pairs``, ``create_port:allowed_address_pairs:mac_address``,
|
||||
``create_port:allowed_address_pairs:ip_address``, ``update_port:allowed_address_pairs``,
|
||||
``update_port:allowed_address_pairs:mac_address`` and
|
||||
``update_port:allowed_address_pairs:ip_address`` have been updated to allow the
|
||||
``service`` role.
|
Loading…
x
Reference in New Issue
Block a user