OpenStack网络指南(24)基于角色的访问控制 (RBAC)
来源:互联网 发布:淘宝的推广方式 编辑:程序博客网 时间:2024/06/06 03:57
基于角色的访问控制(RBAC)策略框架允许运营商和用户授予对特定项目的资源的访问权。
支持的对象与特定项目共享
目前,可以使用此功能授予的访问权限受以下支持:
网络上的常规端口创建权限(自Liberty)。
绑定QoS策略权限到网络或端口(自Mitaka)。
将路由器网关连接到网络(自Mitaka)。
与特定项目共享对象
通过创建允许目标项目对该对象的access_as_shared操作的策略条目来实现与特定项目共享对象。
与特定项目共享网络
创建要共享的网络:
$ neutron net-create secret_networkCreated 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-e26b39f2277cCreated 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-ccce2bd44411Deleted rbac_policy: 1edebaf8-3fa5-47b9-b3dd-ccce2bd44411
如果该项目在网络上有端口,则服务器将阻止在端口被删除之前删除策略:
$ neutron rbac-delete 1edebaf8-3fa5-47b9-b3dd-ccce2bd44411RBAC policy on object 6532a265-43fb-4c8c-8edb-e26b39f2277ccannot be removed because other objects depend on it.
该过程可以重复任何次数以共享具有任意数量的项目的网络。
与特定项目共享QoS策略
创建用于共享的QoS策略:
$ neutron qos-policy-create secret_policyCreated 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-d12c9151541dCreated 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-d12c9151541dDeleted rbac_policy: e45e6917-3f3f-4835-ad54-d12c9151541d
如果该项目具有应用QoS策略的端口或网络,则服务器将不会删除RBAC策略,直到QoS策略不再使用:
$ neutron rbac-delete e45e6917-3f3f-4835-ad54-d12c9151541dRBAC policy on object e45e6917-3f3f-4835-ad54-d12c9151541dcannot be removed because other objects depend on it.
此过程可以重复任意次数,以与任意数量的项目共享qos策略。
“共享”标志如何与这些条目相关
如其他指南条目中所介绍的,neutron提供了一种使对象(网络,qos策略)可用于每个项目的手段。 这是使用支持的对象上的共享标志完成的:
$ neutron net-create global_network --sharedCreated 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_networkCreated 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-fb63072b5e56Deleted rbac_policy: c26b3b05-5781-48a1-a36a-fb63072b5e56
如果该项目具有连接到该网络的路由器网关端口,则服务器防止在端口被删除之前删除该策略:
$ neutron rbac-delete c26b3b05-5781-48a1-a36a-fb63072b5e56RBAC policy on object f9e39715-f7da-4bca-a74d-fc3675321661cannot be removed because other objects depend on it.
该过程可以重复任何次数,以使网络可用作任意数量的项目的外部。
如果网络在创建期间标记为外部,它现在隐式地创建通配符RBAC策略,授予每个人访问以保留之前的行为,然后添加此功能。
$ neutron net-create global_external_network --router:externalCreated 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”。
- OpenStack网络指南(24)基于角色的访问控制 (RBAC)
- 基于角色的访问控制-rbac-yii
- RBAC基于角色的访问控制 thinkphp
- RBAC(基于角色的访问控制)的实现
- 基于角色的访问控制(RBAC)介绍
- RBAC(基于角色的访问控制)扫盲贴
- 基于角色的访问控制 (RBAC)- 常见问题
- YII framework下基于角色的访问控制(RBAC)
- YII framework下基于角色的访问控制(RBAC)
- 基于角色的访问控制(RBAC)介绍
- 基于角色的访问控制 (RBAC)权限管理
- RBAC基于角色的访问控制模型(权限管理)
- RBAC权限管理(基于角色的访问控制)
- 基于角色的访问控制RBAC的mysql表设计
- 角色访问控制(RBAC)
- 角色访问控制(RBAC)
- 角色访问控制(RBAC)
- 角色访问控制(RBAC)
- Python KMeans聚类分析
- c语言获取当前路径
- MySQL(8):视图和索引
- iOS开发之有间距的UITableViewCell
- conExcepression用法
- OpenStack网络指南(24)基于角色的访问控制 (RBAC)
- LeetCode Integer to Roman
- ANDROID设备无手机助手adb连接
- C语言字节对齐问题详解
- “OpenCV ERROR: Insufficient memory”解决方法(如:用随机森林来进行预测样本过大时报错解决方法)
- JAVA基础【1.3】《Java核心技术1》Java程序设计概述-Java JDK1.6新特性【收集】
- 【Linux】文件的权限管理
- pocketSpinix 训练自己的声学模型(一)
- Cocoa-ViewController