基于角色的访问控制(RBAC)策略框架允许运营商和用户授予对特定项目的资源的访问权。
支持的对象与特定项目共享
目前,可以使用此功能授予的访问权限受以下支持:
网络上的常规端口创建权限(自Liberty)。
绑定QoS策略权限到网络或端口(自Mitaka)。
将路由器网关连接到网络(自Mitaka)。
与特定项目共享对象
通过创建允许目标项目对该对象的access_as_shared操作的策略条目来实现与特定项目共享对象。
与特定项目共享网络
创建要共享的网络:
$ neutron net-create secret_network
Created a new network:
+---------------------------+--------------------------------------+
| Field | Value |
+---------------------------+--------------------------------------+
| admin_state_up | True |
| id | 6532a265-43fb-4c8c-8edb-e26b39f2277c |
| mtu | 1450 |
| name | secret_network |
| port_security_enabled | True |
| provider:network_type | vxlan |
| provider:physical_network | |
| provider:segmentation_id | 1031 |
| router:external | False |
| shared | False |
| status | ACTIVE |
| subnets | |
| tenant_id | de56db175c1d48b0bbe72f09a24a3b66 |
+---------------------------+--------------------------------------+
使用neutron rbac-create命令创建策略条目(在此示例中,我们要共享的项目的ID为e28769db97d9449da658bc6931fcb683):
$ neutron rbac-create --target-tenant e28769db97d9449da658bc6931fcb683 \
--action access_as_shared --type network 6532a265-43fb-4c8c-8edb-e26b39f2277c
Created a new rbac_policy:
+---------------+--------------------------------------+
| Field | Value |
+---------------+--------------------------------------+
| action | access_as_shared |
| id | 1edebaf8-3fa5-47b9-b3dd-ccce2bd44411 |
| object_id | 6532a265-43fb-4c8c-8edb-e26b39f2277c |
| object_type | network |
| target_tenant | e28769db97d9449da658bc6931fcb683 |
| tenant_id | de56db175c1d48b0bbe72f09a24a3b66 |
+---------------+--------------------------------------+
target-tenant参数指定需要访问网络的项目。 action参数指定项目允许执行的操作。 type参数表示目标对象是网络。 最后一个参数是我们授予访问权限的网络的ID。
项目e28769db97d9449da658bc6931fcb683现在将能够看到网络运行neutron net-list和neutron net-show时,也将能够在该网络上创建端口。 其他用户(管理员和所有者除外)将无法查看网络。
要删除该项目的访问,请删除允许使用neutron rbac-delete命令的策略:
$ neutron rbac-delete 1edebaf8-3fa5-47b9-b3dd-ccce2bd44411
Deleted rbac_policy: 1edebaf8-3fa5-47b9-b3dd-ccce2bd44411
如果该项目在网络上有端口,则服务器将阻止在端口被删除之前删除策略:
$ neutron rbac-delete 1edebaf8-3fa5-47b9-b3dd-ccce2bd44411
RBAC policy on object 6532a265-43fb-4c8c-8edb-e26b39f2277c
cannot be removed because other objects depend on it.
该过程可以重复任何次数以共享具有任意数量的项目的网络。
与特定项目共享QoS策略
创建用于共享的QoS策略:
$ neutron qos-policy-create secret_policy
Created a new policy:
+-------------+--------------------------------------+
| Field | Value |
+-------------+--------------------------------------+
| description | |
| id | e45e6917-3f3f-4835-ad54-d12c9151541d |
| name | secret_policy |
| rules | |
| shared | False |
| tenant_id | 5b32b072f8354942ab13b6decb1294b3 |
+-------------+--------------------------------------+
使用neutron rbac-create命令创建RBAC策略条目(在此示例中,我们要共享的项目的ID为a6bf6cfbcd1f4e32a57d2138b6bd41d1):
$ neutron rbac-create --target-tenant a6bf6cfbcd1f4e32a57d2138b6bd41d1 \
--action access_as_shared --type qos-policy e45e6917-3f3f-4835-ad54-d12c9151541d
Created a new rbac_policy:
+---------------+--------------------------------------+
| Field | Value |
+---------------+--------------------------------------+
| action | access_as_shared |
| id | ec2e3db1-de5b-4043-9d95-156f582653d0 |
| object_id | e45e6917-3f3f-4835-ad54-d12c9151541d |
| object_type | qos_policy |
| target_tenant | a6bf6cfbcd1f4e32a57d2138b6bd41d1 |
| tenant_id | 5b32b072f8354942ab13b6decb1294b3 |
+---------------+--------------------------------------+
target-tenant参数指定需要访问QoS策略的项目。 action参数指定项目允许执行的操作。 type参数表示目标对象是QoS策略。 最后一个参数是我们授予访问权限的QoS策略的ID。
项目a6bf6cfbcd1f4e32a57d2138b6bd41d1现在将能够看到运行neutron qos-policy-list和neutron qos-policy-show的QoS策略,并且也能够将其绑定到其端口或网络。 没有其他用户(管理员和所有者除外)将能够看到QoS策略。
要删除该项目的访问,请删除允许使用neutron rbac-delete命令的RBAC策略:
$ neutron rbac-delete e45e6917-3f3f-4835-ad54-d12c9151541d
Deleted rbac_policy: e45e6917-3f3f-4835-ad54-d12c9151541d
如果该项目具有应用QoS策略的端口或网络,则服务器将不会删除RBAC策略,直到QoS策略不再使用:
$ neutron rbac-delete e45e6917-3f3f-4835-ad54-d12c9151541d
RBAC policy on object e45e6917-3f3f-4835-ad54-d12c9151541d
cannot be removed because other objects depend on it.
此过程可以重复任意次数,以与任意数量的项目共享qos策略。
“共享”标志如何与这些条目相关
如其他指南条目中所介绍的,neutron提供了一种使对象(网络,qos策略)可用于每个项目的手段。 这是使用支持的对象上的共享标志完成的:
$ neutron net-create global_network --shared
Created a new network:
+---------------------------+--------------------------------------+
| Field | Value |
+---------------------------+--------------------------------------+
| admin_state_up | True |
| id | 9a4af544-7158-456d-b180-95f2e11eaa8c |
| mtu | 1450 |
| name | global_network |
| port_security_enabled | True |
| provider:network_type | vxlan |
| provider:physical_network | |
| provider:segmentation_id | 1010 |
| router:external | False |
| shared | True |
| status | ACTIVE |
| subnets | |
| tenant_id | de56db175c1d48b0bbe72f09a24a3b66 |
+---------------------------+--------------------------------------+
这相当于在网络上创建一个允许每个项目在该网络上执行操作access_as_shared的策略。 Neutron将它们视为同一个东西,因此该网络的策略条目应该使用neutron rbac-list命令可见:
$ neutron rbac-list
+--------------------------------------+-------------+--------------------------------------+
| id | object_type | object_id |
+--------------------------------------+-------------+--------------------------------------+
| ec2e3db1-de5b-4043-9d95-156f582653d0 | qos_policy | e45e6917-3f3f-4835-ad54-d12c9151541d |
| e7b7a4a7-8c3e-4003-9e15-5a9464c1ecea | network | fcc63ae1-c56e-449d-8fb0-4f49f3cc8b55 |
+--------------------------------------+-------------+--------------------------------------+
使用neutron rbac-show命令查看详细信息:
$ neutron rbac-show fcc63ae1-c56e-449d-8fb0-4f49f3cc8b55
+---------------+--------------------------------------+
| Field | Value |
+---------------+--------------------------------------+
| action | access_as_shared |
| id | fcc63ae1-c56e-449d-8fb0-4f49f3cc8b55 |
| object_id | 9a4af544-7158-456d-b180-95f2e11eaa8c |
| object_type | network |
| target_tenant | * |
| tenant_id | de56db175c1d48b0bbe72f09a24a3b66 |
+---------------+--------------------------------------+
输出显示该条目允许网络类型的对象9a4af544-7158-456d-b180-95f2e11eaa8c上的操作access_as_shared target_tenant *,这是表示所有项目的通配符。
当前,共享标志仅仅是到网络的底层RBAC策略的映射。 在网络上将标志设置为True会创建一个通配符RBAC条目。 将其设置为False将删除通配符条目。
当运行neutron net-list或neutron net-show时,共享标志由服务器根据每个网络的调用项目和RBAC条目计算。 对于QoS对象,分别使用neutron qos-policy-list或neutron qos-policy-show。 如果有通配符条目,共享标志总是设置为True。 如果只有与特定项目共享的条目,则只有该对象共享的项目才会看到该标志为True,其余将看到该标志为False。
允许将网络用作外部网络
要使网络可用作特定项目(而不是所有项目)的外部网络,请使用access_as_external操作。
1.创建要作为外部网络使用的网络:
$ neutron net-create secret_external_network
Created a new network:
+---------------------------+--------------------------------------+
| Field | Value |
+---------------------------+--------------------------------------+
| admin_state_up | True |
| availability_zone_hints | |
| availability_zones | |
| created_at | 2016-04-30T06:51:46 |
| description | |
| id | f9e39715-f7da-4bca-a74d-fc3675321661 |
| ipv4_address_scope | |
| ipv6_address_scope | |
| mtu | 1450 |
| name | secret_external_network |
| port_security_enabled | True |
| provider:network_type | vxlan |
| provider:physical_network | |
| provider:segmentation_id | 1073 |
| router:external | False |
| shared | False |
| status | ACTIVE |
| subnets | |
| tags | |
| tenant_id | dfe49b63660e494fbdbf6ad2ca2a810f |
| updated_at | 2016-04-30T06:51:46 |
+---------------------------+--------------------------------------+
2.使用neutron rbac-create命令创建策略条目(在此示例中,我们要共享的项目的ID为e28769db97d9449da658bc6931fcb683):
target-tenant参数指定需要访问网络的项目。 action参数指定项目允许执行的操作。 type参数指示目标对象是网络。 最后一个参数是我们授予外部访问权限的网络的ID。
现在项目e28769db97d9449da658bc6931fcb683能够看到网络当运行neutron net-list和neutron net-show并且可以连接路由器网关端口到那个网络。 没有其他用户(管理员和所有者除外)能够查看网络。
要删除该项目的访问,请删除允许使用neutron rbac-delete命令的策略:
$ neutron rbac-delete c26b3b05-5781-48a1-a36a-fb63072b5e56
Deleted rbac_policy: c26b3b05-5781-48a1-a36a-fb63072b5e56
如果该项目具有连接到该网络的路由器网关端口,则服务器防止在端口被删除之前删除该策略:
$ neutron rbac-delete c26b3b05-5781-48a1-a36a-fb63072b5e56
RBAC policy on object f9e39715-f7da-4bca-a74d-fc3675321661
cannot be removed because other objects depend on it.
该过程可以重复任何次数,以使网络可用作任意数量的项目的外部。
如果网络在创建期间标记为外部,它现在隐式地创建通配符RBAC策略,授予每个人访问以保留之前的行为,然后添加此功能。
$ neutron net-create global_external_network --router:external
Created a new network:
+---------------------------+--------------------------------------+
| Field | Value |
+---------------------------+--------------------------------------+
| admin_state_up | True |
| availability_zone_hints | |
| availability_zones | |
| created_at | 2016-04-30T07:00:57 |
| description | |
| id | cb78991c-cdde-445b-a8ca-d819b9266756 |
| ipv4_address_scope | |
| ipv6_address_scope | |
| is_default | False |
| mtu | 1450 |
| name | global_external_network |
| port_security_enabled | True |
| provider:network_type | vxlan |
| provider:physical_network | |
| provider:segmentation_id | 1007 |
| router:external | True |
| shared | False |
| status | ACTIVE |
| subnets | |
| tags | |
| tenant_id | dfe49b63660e494fbdbf6ad2ca2a810f |
| updated_at | 2016-04-30T07:00:57 |
+---------------------------+--------------------------------------+
在标准路由器上方的输出中:external属性为True,如预期。 现在,通配符策略在RBAC策略列表中可见:
$ neutron rbac-list --object_id=cb78991c-cdde-445b-a8ca-d819b9266756 \
-c id -c target_tenant
+--------------------------------------+---------------+
| id | target_tenant |
+--------------------------------------+---------------+
| 2b72fe2e-20cf-4856-af12-3ac0733604d8 | * |
+--------------------------------------+---------------+
您可以使用与任何其他RBAC access_as_external策略相同的约束来修改或删除此策略。
防止常规用户彼此共享对象
默认的policy.json文件不允许普通用户使用通配符与每个其他项目共享对象; 但是,它将允许他们与特定项目ID共享对象。
如果操作员希望阻止正常用户执行此操作,则policy.json中的“create_rbac_policy”:条目可以从“”调整为“rule:admin_only”。
本文介绍了基于角色的访问控制(RBAC)策略框架的应用方法,包括如何授予特定项目的资源访问权,以及如何创建、查看和删除RBAC策略条目。同时探讨了共享标志与RBAC条目的关系。
143

被折叠的 条评论
为什么被折叠?



