基于角色的访问控制 (RBAC)
基于角色的访问控制 (RBAC) 策略框架使操作员和用户能够为特定项目授予对资源的访问权限。
支持与特定项目共享的对象
当前,可以使用此功能授予的访问权限受以下对象支持:
在网络上创建常规端口的权限(自 Liberty 版本起)。
将 QoS 策略权限绑定到网络或端口(自 Mitaka 版本起)。
将路由器网关附加到网络(自 Mitaka 版本起)。
将安全组绑定到端口(自 Stein 版本起)。
将地址范围分配给子网池(自 Ussuri 版本起)。
将子网池分配给子网(自 Ussuri 版本起)。
将地址组分配给安全组规则(自 Wallaby 版本起)。
与特定项目共享对象
通过创建允许目标项目对该对象执行 access_as_shared 操作的策略条目,可以与特定项目共享对象。
与特定项目共享网络
创建要共享的网络
$ openstack network create secret_network
+---------------------------+--------------------------------------+
| Field | Value |
+---------------------------+--------------------------------------+
| admin_state_up | UP |
| availability_zone_hints | |
| availability_zones | |
| created_at | 2017-01-25T20:16:40Z |
| description | |
| dns_domain | None |
| id | f55961b9-3eb8-42eb-ac96-b97038b568de |
| ipv4_address_scope | None |
| ipv6_address_scope | None |
| is_default | None |
| mtu | 1450 |
| name | secret_network |
| port_security_enabled | True |
| project_id | 61b7eba037fd41f29cfba757c010faff |
| provider:network_type | vxlan |
| provider:physical_network | None |
| provider:segmentation_id | 9 |
| qos_policy_id | None |
| revision_number | 3 |
| router:external | Internal |
| segments | None |
| shared | False |
| status | ACTIVE |
| subnets | |
| tags | [] |
| updated_at | 2017-01-25T20:16:40Z |
+---------------------------+--------------------------------------+
使用 openstack network rbac create 命令创建策略条目(在此示例中,我们要共享的项目的 ID 是 b87b2fc13e0248a4a031d38e06dc191d)
$ openstack network rbac create --target-project \
b87b2fc13e0248a4a031d38e06dc191d --action access_as_shared \
--type network f55961b9-3eb8-42eb-ac96-b97038b568de
+-------------------+--------------------------------------+
| Field | Value |
+-------------------+--------------------------------------+
| action | access_as_shared |
| id | f93efdbf-f1e0-41d2-b093-8328959d469e |
| name | None |
| object_id | f55961b9-3eb8-42eb-ac96-b97038b568de |
| object_type | network |
| project_id | 61b7eba037fd41f29cfba757c010faff |
| target_project_id | b87b2fc13e0248a4a031d38e06dc191d |
+-------------------+--------------------------------------+
target-project 参数指定需要访问网络的项目。 action 参数指定项目允许执行的操作。 type 参数表示目标对象是网络。 最后一个参数是要授予访问权限的网络 ID。
项目 b87b2fc13e0248a4a031d38e06dc191d 现在可以在运行 openstack network list 和 openstack network show 时看到该网络,并且还可以在该网络上创建端口。 除了管理员和所有者之外,任何其他用户都无法看到该网络。
要删除该项目的访问权限,请使用 openstack network rbac delete 命令删除允许它的策略
$ openstack network rbac delete f93efdbf-f1e0-41d2-b093-8328959d469e
如果该项目在网络上有端口,服务器将阻止删除策略,直到删除端口为止
$ openstack network rbac delete f93efdbf-f1e0-41d2-b093-8328959d469e
RBAC policy on object f93efdbf-f1e0-41d2-b093-8328959d469e
cannot be removed because other objects depend on it.
可以重复此过程任意次数,以与任意数量的项目共享网络。
与特定项目共享 QoS 策略
创建要共享的 QoS 策略
$ openstack network qos policy create secret_policy
+-------------------+--------------------------------------+
| Field | Value |
+-------------------+--------------------------------------+
| description | |
| id | 1f730d69-1c45-4ade-a8f2-89070ac4f046 |
| name | secret_policy |
| project_id | 61b7eba037fd41f29cfba757c010faff |
| revision_number | 1 |
| rules | [] |
| shared | False |
| tags | [] |
+-------------------+--------------------------------------+
使用 openstack network rbac create 命令创建 RBAC 策略条目(在此示例中,我们要共享的项目的 ID 是 be98b82f8fdf46b696e9e01cebc33fd9)
$ openstack network rbac create --target-project \
be98b82f8fdf46b696e9e01cebc33fd9 --action access_as_shared \
--type qos_policy 1f730d69-1c45-4ade-a8f2-89070ac4f046
+-------------------+--------------------------------------+
| Field | Value |
+-------------------+--------------------------------------+
| action | access_as_shared |
| id | 8828e38d-a0df-4c78-963b-e5f215d3d550 |
| name | None |
| object_id | 1f730d69-1c45-4ade-a8f2-89070ac4f046 |
| object_type | qos_policy |
| project_id | 61b7eba037fd41f29cfba757c010faff |
| target_project_id | be98b82f8fdf46b696e9e01cebc33fd9 |
+-------------------+--------------------------------------+
target-project 参数指定需要访问 QoS 策略的项目。 action 参数指定项目允许执行的操作。 type 参数表示目标对象是 QoS 策略。 最后一个参数是要授予访问权限的 QoS 策略 ID。
项目 be98b82f8fdf46b696e9e01cebc33fd9 现在可以在运行 openstack network qos policy list 和 openstack network qos policy show 时看到 QoS 策略,并且还可以将其绑定到其端口或网络。 除了管理员和所有者之外,任何其他用户都无法看到 QoS 策略。
要删除该项目的访问权限,请使用 openstack network rbac delete 命令删除 RBAC 策略
$ openstack network rbac delete 8828e38d-a0df-4c78-963b-e5f215d3d550
如果该项目在其端口或网络上应用了 QoS 策略,服务器将不会删除 RBAC 策略,直到不再使用 QoS 策略为止
$ openstack network rbac delete 8828e38d-a0df-4c78-963b-e5f215d3d550
RBAC policy on object 8828e38d-a0df-4c78-963b-e5f215d3d550
cannot be removed because other objects depend on it.
可以重复此过程任意次数,以与任意数量的项目共享 qos-policy。
与特定项目共享安全组
创建要共享的安全组
$ openstack security group create my_security_group
+-------------------+--------------------------------------+
| Field | Value |
+-------------------+--------------------------------------+
| created_at | 2019-02-07T06:09:59Z |
| description | my_security_group |
| id | 5ba835b7-22b0-4be6-bdbe-e0722d1b5f24 |
| location | None |
| name | my_security_group |
| project_id | 077e8f39d3db4c9e998d842b0503283a |
| revision_number | 1 |
| rules | ... |
| tags | [] |
| updated_at | 2019-02-07T06:09:59Z |
+-------------------+--------------------------------------+
使用 openstack network rbac create 命令创建 RBAC 策略条目(在此示例中,我们要共享的项目的 ID 是 32016615de5d43bb88de99e7f2e26a1e)
$ openstack network rbac create --target-project \
32016615de5d43bb88de99e7f2e26a1e --action access_as_shared \
--type security_group 5ba835b7-22b0-4be6-bdbe-e0722d1b5f24
+-------------------+--------------------------------------+
| Field | Value |
+-------------------+--------------------------------------+
| action | access_as_shared |
| id | 8828e38d-a0df-4c78-963b-e5f215d3d550 |
| name | None |
| object_id | 5ba835b7-22b0-4be6-bdbe-e0722d1b5f24 |
| object_type | security_group |
| project_id | 077e8f39d3db4c9e998d842b0503283a |
| target_project_id | 32016615de5d43bb88de99e7f2e26a1e |
+-------------------+--------------------------------------+
target-project 参数指定需要访问安全组的项目。 action 参数指定项目允许执行的操作。 type 参数表示目标对象是安全组。 最后一个参数是要授予访问权限的安全组 ID。
项目 32016615de5d43bb88de99e7f2e26a1e 现在可以在运行 openstack security group list 和 openstack security group show 时看到安全组,并且还可以将其绑定到其端口。 除了管理员和所有者之外,任何其他用户都无法看到安全组。
要删除该项目的访问权限,请使用 openstack network rbac delete 命令删除 RBAC 策略
$ openstack network rbac delete 8828e38d-a0df-4c78-963b-e5f215d3d550
如果该项目在其端口上应用了安全组,服务器将不会删除 RBAC 策略,直到不再使用安全组为止
$ openstack network rbac delete 8828e38d-a0df-4c78-963b-e5f215d3d550
RBAC policy on object 8828e38d-a0df-4c78-963b-e5f215d3d550
cannot be removed because other objects depend on it.
可以重复此过程任意次数,以与任意数量的项目共享 security-group。
创建使用通过 RBAC 共享的安全组的实例,但仅在调用 Nova 时指定网络 ID 目前不起作用。 在这种情况下,Nova 将检查给定的安全组是否存在于 Neutron 中,然后它会在给定的网络中创建端口。 出现问题的原因是 Nova 仅请求按 project_id 过滤的安全组,因此它无法从 Neutron API 获取共享的安全组。 有关详细信息,请参阅 bug 1942615。 为了解决此问题,用户需要在 Neutron 中先创建端口,然后将该端口传递给 Nova
$ openstack port create --network net1 --security-group
5ba835b7-22b0-4be6-bdbe-e0722d1b5f24 shared-sg-port
$ openstack server create --image cirros-0.5.1-x86_64-disk --flavor m1.tiny
--port shared-sg-port vm-with-shared-sg
与特定项目共享地址范围
创建要共享的地址范围
$ openstack address scope create my_address_scope
+-------------------+--------------------------------------+
| Field | Value |
+-------------------+--------------------------------------+
| id | c19cb654-3489-4160-9c82-8a3015483643 |
| ip_version | 4 |
| location | ... |
| name | my_address_scope |
| project_id | 34304bc4f233470fa4a2448d153b6324 |
| shared | False |
+-------------------+--------------------------------------+
使用 openstack network rbac create 命令创建 RBAC 策略条目(在此示例中,我们要共享的项目的 ID 是 32016615de5d43bb88de99e7f2e26a1e)
$ openstack network rbac create --target-project \
32016615de5d43bb88de99e7f2e26a1e --action access_as_shared \
--type address_scope c19cb654-3489-4160-9c82-8a3015483643
+-------------------+--------------------------------------+
| Field | Value |
+-------------------+--------------------------------------+
| action | access_as_shared |
| id | d54b1482-98c4-44aa-9115-ede80387ffe0 |
| location | ... |
| name | None |
| object_id | c19cb654-3489-4160-9c82-8a3015483643 |
| object_type | address_scope |
| project_id | 34304bc4f233470fa4a2448d153b6324 |
| target_project_id | 32016615de5d43bb88de99e7f2e26a1e |
+-------------------+--------------------------------------+
target-project 参数指定需要访问地址范围的项目。 action 参数指定项目允许执行的操作。 type 参数表示目标对象是地址范围。 最后一个参数是要授予访问权限的地址范围 ID。
项目 32016615de5d43bb88de99e7f2e26a1e 现在可以在运行 openstack address scope list 和 openstack address scope show 时看到地址范围,并且还可以将其分配给其子网池。 除了管理员和所有者之外,任何其他用户都无法看到地址范围。
要删除该项目的访问权限,请使用 openstack network rbac delete 命令删除 RBAC 策略
$ openstack network rbac delete d54b1482-98c4-44aa-9115-ede80387ffe0
如果该项目在其子网池上应用了地址范围,服务器将不会删除 RBAC 策略,直到不再使用地址范围为止
$ openstack network rbac delete d54b1482-98c4-44aa-9115-ede80387ffe0
RBAC policy on object c19cb654-3489-4160-9c82-8a3015483643
cannot be removed because other objects depend on it.
可以重复此过程任意次数,以与任意数量的项目共享地址范围。
与特定项目共享子网池
创建要共享的子网池
$ openstack subnet pool create my_subnetpool --pool-prefix 203.0.113.0/24
+-------------------+--------------------------------------+
| Field | Value |
+-------------------+--------------------------------------+
| address_scope_id | None |
| created_at | 2020-03-16T14:23:01Z |
| default_prefixlen | 8 |
| default_quota | None |
| description | |
| id | 11f79287-bc17-46b2-bfd0-2562471eb631 |
| ip_version | 4 |
| is_default | False |
| location | ... |
| max_prefixlen | 32 |
| min_prefixlen | 8 |
| name | my_subnetpool |
| project_id | 290ccedbcf594ecc8e76eff06f964f7e |
| revision_number | 0 |
| shared | False |
| tags | |
| updated_at | 2020-03-16T14:23:01Z |
+-------------------+--------------------------------------+
使用 openstack network rbac create 命令创建 RBAC 策略条目(在此示例中,我们要共享的项目的 ID 是 32016615de5d43bb88de99e7f2e26a1e)
$ openstack network rbac create --target-project \
32016615de5d43bb88de99e7f2e26a1e --action access_as_shared \
--type subnetpool 11f79287-bc17-46b2-bfd0-2562471eb631
+-------------------+--------------------------------------+
| Field | Value |
+-------------------+--------------------------------------+
| action | access_as_shared |
| id | d54b1482-98c4-44aa-9115-ede80387ffe0 |
| location | ... |
| name | None |
| object_id | 11f79287-bc17-46b2-bfd0-2562471eb631 |
| object_type | subnetpool |
| project_id | 290ccedbcf594ecc8e76eff06f964f7e |
| target_project_id | 32016615de5d43bb88de99e7f2e26a1e |
+-------------------+--------------------------------------+
target-project 参数指定需要访问子网池的项目。 action 参数指定项目允许执行的操作。 type 参数表示目标对象是子网池。 最后一个参数是要授予访问权限的子网池 ID。
项目 32016615de5d43bb88de99e7f2e26a1e 现在可以在运行 openstack subnet pool list 和 openstack subnet pool show 时看到子网池,并且还可以将其分配给其子网。 除了管理员和所有者之外,任何其他用户都无法看到子网池。
要删除该项目的访问权限,请使用 openstack network rbac delete 命令删除 RBAC 策略
$ openstack network rbac delete d54b1482-98c4-44aa-9115-ede80387ffe0
如果该项目在其子网上有子网池应用,服务器将不会删除 RBAC 策略,直到不再使用子网池为止
$ openstack network rbac delete d54b1482-98c4-44aa-9115-ede80387ffe0
RBAC policy on object 11f79287-bc17-46b2-bfd0-2562471eb631
cannot be removed because other objects depend on it.
可以重复此过程任意次数,以与任意数量的项目共享子网池。
与特定项目共享地址组
创建要共享的地址组
$ openstack address group create test-ag --address 10.1.1.1
+-------------+--------------------------------------+
| Field | Value |
+-------------+--------------------------------------+
| addresses | ['10.1.1.1/32'] |
| description | |
| id | cdb6eb3e-f9a0-4d52-8478-358eaa2c4737 |
| name | test-ag |
| project_id | 66c77cf262454777a8f455cce48c12c0 |
+-------------+--------------------------------------+
使用 openstack network rbac create 命令创建 RBAC 策略条目(在此示例中,我们要共享的项目的 ID 是 bbd82892525d4372911390b984ed3265)
$ openstack network rbac create --target-project \
bbd82892525d4372911390b984ed3265 --action access_as_shared \
--type address_group cdb6eb3e-f9a0-4d52-8478-358eaa2c4737
+-------------------+--------------------------------------+
| Field | Value |
+-------------------+--------------------------------------+
| action | access_as_shared |
| id | c7414ac2-9a6b-420b-84c5-4158a6cca4f9 |
| name | None |
| object_id | cdb6eb3e-f9a0-4d52-8478-358eaa2c4737 |
| object_type | address_group |
| project_id | 66c77cf262454777a8f455cce48c12c0 |
| target_project_id | bbd82892525d4372911390b984ed3265 |
+-------------------+--------------------------------------+
target-project 参数指定需要访问地址组的项目。 action 参数指定项目允许执行的操作。 type 参数表示目标对象是地址组。 最后一个参数是要授予访问权限的地址组 ID。
项目 bbd82892525d4372911390b984ed3265 现在可以在运行 openstack address group list 和 openstack address group show 时看到地址组,并且还可以将其分配给其安全组规则。 除了管理员和所有者之外,任何其他用户都无法看到地址组。
要删除该项目的访问权限,请使用 openstack network rbac delete 命令删除 RBAC 策略
$ openstack network rbac delete c7414ac2-9a6b-420b-84c5-4158a6cca4f9
如果该项目在其安全组规则上应用了地址组,服务器将不会删除 RBAC 策略,直到不再使用地址组为止
$ openstack network rbac delete c7414ac2-9a6b-420b-84c5-4158a6cca4f9
RBAC policy on object cdb6eb3e-f9a0-4d52-8478-358eaa2c4737
cannot be removed because other objects depend on it
可以重复此过程任意次数,以与任意数量的项目共享地址组。
“shared”标志与这些条目的关系
如其他指南条目中所述,neutron 提供了一种使对象(address-scope、network、qos-policy、security-group、subnetpool)对每个项目可用的一种方式。 这是使用受支持对象上的 shared 标志实现的
$ openstack network create global_network --share
+---------------------------+--------------------------------------+
| Field | Value |
+---------------------------+--------------------------------------+
| admin_state_up | UP |
| availability_zone_hints | |
| availability_zones | |
| created_at | 2017-01-25T20:32:06Z |
| description | |
| dns_domain | None |
| id | 84a7e627-573b-49da-af66-c9a65244f3ce |
| ipv4_address_scope | None |
| ipv6_address_scope | None |
| is_default | None |
| mtu | 1450 |
| name | global_network |
| port_security_enabled | True |
| project_id | 61b7eba037fd41f29cfba757c010faff |
| provider:network_type | vxlan |
| provider:physical_network | None |
| provider:segmentation_id | 7 |
| qos_policy_id | None |
| revision_number | 3 |
| router:external | Internal |
| segments | None |
| shared | True |
| status | ACTIVE |
| subnets | |
| tags | [] |
| updated_at | 2017-01-25T20:32:07Z |
+---------------------------+--------------------------------------+
这等效于在网络上创建允许每个项目执行操作 access_as_shared 的策略。 Neutron 将它们视为相同,因此应该可以使用 openstack network rbac list 命令看到该网络的策略条目
$ openstack network rbac list
+-------------------------------+-------------+--------------------------------+
| ID | Object Type | Object ID |
+-------------------------------+-------------+--------------------------------+
| 58a5ee31-2ad6-467d- | qos_policy | 1f730d69-1c45-4ade- |
| 8bb8-8c2ae3dd1382 | | a8f2-89070ac4f046 |
| 27efbd79-f384-4d89-9dfc- | network | 84a7e627-573b-49da- |
| 6c4a606ceec6 | | af66-c9a65244f3ce |
+-------------------------------+-------------+--------------------------------+
使用 openstack network rbac show 命令查看详细信息
$ openstack network rbac show 27efbd79-f384-4d89-9dfc-6c4a606ceec6
+-------------------+--------------------------------------+
| Field | Value |
+-------------------+--------------------------------------+
| action | access_as_shared |
| id | 27efbd79-f384-4d89-9dfc-6c4a606ceec6 |
| name | None |
| object_id | 84a7e627-573b-49da-af66-c9a65244f3ce |
| object_type | network |
| project_id | 61b7eba037fd41f29cfba757c010faff |
| target_project_id | * |
+-------------------+--------------------------------------+
输出显示该条目允许对类型为 network 的对象 84a7e627-573b-49da-af66-c9a65244f3ce 执行操作 access_as_shared,目标项目为 *,这是一个代表所有项目的通配符。
当前,shared 标志只是网络底层 RBAC 策略的一种映射。 将标志设置为网络的 True 会创建一个通配符 RBAC 条目。 将其设置为 False 会删除通配符条目。
当您运行 openstack network list 或 openstack network show 时,服务器会根据调用项目和每个网络的 RBAC 条目计算 shared 标志。 对于 QoS 对象,分别使用 openstack network qos policy list 或 openstack network qos policy show。 如果存在通配符条目,则 shared 标志始终设置为 True。 如果只有与特定项目共享的条目,只有共享该对象的项目会将标志视为 True,其余项目会将标志视为 False。
允许将网络用作外部网络
要使网络对特定项目可用,而不是对所有项目可用,请使用 access_as_external 操作。
创建您希望可用作外部网络的网络
$ openstack network create secret_external_network
+---------------------------+--------------------------------------+
| Field | Value |
+---------------------------+--------------------------------------+
| admin_state_up | UP |
| availability_zone_hints | |
| availability_zones | |
| created_at | 2017-01-25T20:36:59Z |
| description | |
| dns_domain | None |
| id | 802d4e9e-4649-43e6-9ee2-8d052a880cfb |
| ipv4_address_scope | None |
| ipv6_address_scope | None |
| is_default | None |
| mtu | 1450 |
| name | secret_external_network |
| port_security_enabled | True |
| project_id | 61b7eba037fd41f29cfba757c010faff |
| proider:network_type | vxlan |
| provider:physical_network | None |
| provider:segmentation_id | 21 |
| qos_policy_id | None |
| revision_number | 3 |
| router:external | Internal |
| segments | None |
| shared | False |
| status | ACTIVE |
| subnets | |
| tags | [] |
| updated_at | 2017-01-25T20:36:59Z |
+---------------------------+--------------------------------------+
使用 openstack network rbac create 命令创建策略条目(在此示例中,我们要共享的项目的 ID 是 838030a7bf3c4d04b4b054c0f0b2b17c)
$ openstack network rbac create --target-project \
838030a7bf3c4d04b4b054c0f0b2b17c --action access_as_external \
--type network 802d4e9e-4649-43e6-9ee2-8d052a880cfb
+-------------------+--------------------------------------+
| Field | Value |
+-------------------+--------------------------------------+
| action | access_as_external |
| id | afdd5b8d-b6f5-4a15-9817-5231434057be |
| name | None |
| object_id | 802d4e9e-4649-43e6-9ee2-8d052a880cfb |
| object_type | network |
| project_id | 61b7eba037fd41f29cfba757c010faff |
| target_project_id | 838030a7bf3c4d04b4b054c0f0b2b17c |
+-------------------+--------------------------------------+
“target-project”参数指定需要访问网络的项目。“action”参数指定项目允许执行的操作。“type”参数指示目标对象是一个网络。最后一个参数是我们授予外部访问权限的网络 ID。
现在,项目 838030a7bf3c4d04b4b054c0f0b2b17c 运行 openstack network list 和 openstack network show 时可以看到该网络,并且可以将路由器网关端口附加到该网络。除了管理员和所有者之外,任何其他用户都无法看到该网络。
要删除该项目的访问权限,请使用 openstack network rbac delete 命令删除允许它的策略
$ openstack network rbac delete afdd5b8d-b6f5-4a15-9817-5231434057be
如果该项目已将路由器网关端口附加到该网络,服务器会阻止删除策略,直到这些端口被删除为止。
$ openstack network rbac delete afdd5b8d-b6f5-4a15-9817-5231434057be
RBAC policy on object afdd5b8d-b6f5-4a15-9817-5231434057be
cannot be removed because other objects depend on it.
此过程可以重复任意次数,以使网络对任意数量的项目可用作外部网络。
如果在创建期间将网络标记为外部网络,现在它会隐式创建一个通配符 RBAC 策略,授予所有人访问权限,以保留在此功能添加之前的行为。
$ openstack network create global_external_network --external
+---------------------------+--------------------------------------+
| Field | Value |
+---------------------------+--------------------------------------+
| admin_state_up | UP |
| availability_zone_hints | |
| availability_zones | |
| created_at | 2017-01-25T20:41:44Z |
| description | |
| dns_domain | None |
| id | 72a257a2-a56e-4ac7-880f-94a4233abec6 |
| ipv4_address_scope | None |
| ipv6_address_scope | None |
| is_default | None |
| mtu | 1450 |
| name | global_external_network |
| port_security_enabled | True |
| project_id | 61b7eba037fd41f29cfba757c010faff |
| provider:network_type | vxlan |
| provider:physical_network | None |
| provider:segmentation_id | 69 |
| qos_policy_id | None |
| revision_number | 4 |
| router:external | External |
| segments | None |
| shared | False |
| status | ACTIVE |
| subnets | |
| tags | [] |
| updated_at | 2017-01-25T20:41:44Z |
+---------------------------+--------------------------------------+
在上面的输出中,标准的 router:external 属性是 External,如预期。现在,RBAC 策略列表中可以看到一个通配符策略。
$ openstack network rbac list --long -c ID -c Action
+--------------------------------------+--------------------+
| ID | Action |
+--------------------------------------+--------------------+
| b694e541-bdca-480d-94ec-eda59ab7d71a | access_as_external |
+--------------------------------------+--------------------+
您可以像修改或删除任何其他 RBAC access_as_external 策略一样修改或删除此策略。
防止普通用户相互共享对象
默认的 policy.yaml 文件不允许普通用户使用通配符与其他项目共享对象;但是,它允许他们与特定的项目 ID 共享对象。
如果操作员希望防止普通用户执行此操作,则可以将 policy.yaml 中的 "create_rbac_policy": 条目从 "" 调整为 "rule:admin_only"。
改进数据库 RBAC 查询操作
自从 出现在 Yoga 版本中以来,Neutron 在所有 RBAC 相关表中都对“target_tenant”(现在为“target_project”)和“action”列进行了索引。这改进了涉及 RBAC 表的 SQL 查询 。任何早于 Yoga 的系统都不会拥有这些索引,但系统管理员可以按照以下步骤手动将它们添加到 Neutron 数据库
$ tables=`mysql -e "use ovs_neutron; show tables;" | grep rbac`
为了防止系统升级期间出现错误, 已实施并回溯到 Yoga。此补丁检查 Neutron 表中是否已存在任何索引,并避免再次执行索引创建命令。