原文:http://blog.csdn.net/xxfigo/article/details/8785748

原作者关于openstack的一系列文章http://blog.csdn.net/xxfigo/article/category/1151758

基本概念

身份服务有两个主要功能:

1、用户管理:记录用户和他们的权限

2、服务目录:提供可用服务和该服务api的终端地址

身份服务定义了一些非常值得理解的定义:

用户(User):使用OpenStack云服务的人、系统、服务的数字表示。身份验证服务验证用户传入的请求。用户登录可能被赋予访问资源的令牌。用户可能直接被指定给一个特定租户,好像用户在这个租户中一样。

认证信息(Credentials):用户持有的,一般情况下只有这个用户知道的数据。用户能够使用这个数据来证明他的身份(因为没有其他人知道这个数据)。例如:

  • 配对的用户名和密码
  • 配对的用户名和API key
  • 自己和有你本人照片的驾驶证
  • 颁发给你不被其他人知道的令牌

认证(Authentication):在认证服务背景下,认证是确认用户身份和请求正确性的动作。身份服务确认传入的请求来自于有请求权限的用户。这些请求最初以一系列验证信息的形式出现(用户名和密码,或用户名和API key)。经过初始验证后,身份服务会颁发给用户一个令牌,在后续请求时用户可以用这个令牌说明他们的身份已经经过认证。

令牌(Token):令牌是用来访问资源的任意比特的文本。每个令牌有一个访问范围。令牌可在任意时间收回,并在一个有限的时间内有效。在Folsom版本中身份服务支持基于令牌的认证,未来将会支持额外的协议。首要目的是集成服务,不渴望成为一个成熟的身份存储和管理方案。

租户(Tenant):用来分组或隔离资源和(或)身份对象的容器。根据服务运营商,租户可以映射成一个客户、账户、组织或项目。

服务(Service):一个OpenStack服务,例如计算(nova),对象存储(swift)或镜像服务(glance)。服务提供一个或多个用户可以访问资源和执行(可能有用的)操作的端点。

端点(Endpoint):一个可通过网络访问的服务地址,通常使用URL描述。如果使用扩展,可以创建端点模板,它代表了所有可跨区域访问的服务。

角色(Role):可执行一特定系列操作的用户特性。角色包括一系列权利和特权。用户可继承其所属角色的权利和特权。在身份服务中,颁发给用户的令牌包括用户能承担的角色列表。这个用户调用的服务决定他们怎样解释这个用户所属的角色,以及每个角色授予访问的操作和资源。

用户管理

用户身份管理有三个主要的概念:

  • 用户Users
  • 租户Tenants
  • 角色Roles

用户代表一个人,他持有相关的信息,例如用户名、密码、电子邮件。下面的例子是创建一个名为“alice”的用户:

[plain] view
plain
copy

 
  1. $ keystone user-create --name=alice --pass=mypassword123 --email= alice@example.com

租户可以看做是一个项目、分组或组织。当你向OpenStack服务发送请求时,你必须之地一个租户。例如如果你要向计算服务请求查询运行实例的列表,你将收到在你查询里指定租户内的运行实例列表。下面的例子创建一个名为“acme”的租户。

[plain] view
plain
copy

 
  1. $ keystone tenant-create --name=acme

注意!因为在以前的OpenStack计算版本中使用术语“项目”来代替租户,一些命令行工具使用--project_id代替--tenant-id或--os-tenant-id指定租户ID。

角色归纳了给定租户下允许用户执行的操作。以下例子创建一个名为“compute-user"的角色:

[plain] view
plain
copy

 
  1. $ keystone role-create --name=compute-user

注意!这取决于单个的服务(比如计算服务和镜像服务)分配这些角色的意义。至于身份服务而言,角色只是一个简单的名字。

身份服务将一个用户与租户、角色关联。继续我们前面的例子,我们希望在租户“acme”中给用户”alice”分配“compute-user”权限。

[plain] view
plain
copy

 
  1. $ keystone user-list
  2. +--------+---------+-------------------+--------+
  3. | id | enabled | email | name |
  4. +--------+---------+-------------------+--------+
  5. | 892585 | True | alice@example.com | alice |
  6. +--------+---------+-------------------+--------+
  7. $ keystone role-list
  8. +--------+--------------+
  9. | id | name |
  10. +--------+--------------+
  11. | 9a764e | compute-user |
  12. +--------+--------------+
  13. $ keystone tenant-list
  14. +--------+------+---------+
  15. | id | name | enabled |
  16. +--------+------+---------+
  17. | 6b8fd2 | acme | True |
  18. +--------+------+---------+
  19. $ keystone user-role-add --user=892585 --role=9a764e --tenant-id=6b8fd2

可以在不同的租户中给用户分配不同的角色。例如Alice可以在租户“Cyberdyne”中拥有“admin”角色。在同一个租户中,也可以给用户分配多个角色。

/etc/[SERVICE_CODENAME]/policy.json控制给定服务允许用户进行的操作。例如/etc/nova/policy.json指定计算服务的访问策略,/etc/glance/policy.json指定镜像服务的访问策略,/etc/keystone/policy.json指定身份服务的访问策略。

计算、身份、镜像服务中默认的policy.json文件只有一个“admin"角色:里面所有不需要admin角色的操作可以被租户中任意角色的用户访问。

如果你希望在例如计算服务中限制用户执行操作,你需要在身份服务中创建角色,然后修改/etc/nova/policy.json文件使这个角色应用到计算操作中。

例如,下面/etc/nova/policy.json中的这一行指定对用户创建卷不做限制:不论用户在租户中是有何种角色,他们都可以在租户中创建卷。

[plain] view
plain
copy

 
  1. "volume:create":[],

如果你希望限制当前租户中有”compute-user"角色的用户才能创建卷,可以增加“role:compute-user",例如这样:

[plain] view
plain
copy

 
  1. "volume:create": ["role:compute-user"],

如果我们希望限制所有的计算服务请求都需要这个角色,策略文件是这样的:

[plain] view
plain
copy

 
  1. {
  2. "admin_or_owner": [["role:admin"], ["project_id: %(project_id)s"]],
  3. "default": [["rule:admin_or_owner"]],
  4. "compute:create": ["role":"compute-user"],
  5. "compute:create:attach_network": ["role":"compute-user"],
  6. "compute:create:attach_volume": ["role":"compute-user"],
  7. "compute:get_all": ["role":"compute-user"],
  8. "admin_api": [["role:admin"]],
  9. "compute_extension:accounts": [["rule:admin_api"]],
  10. "compute_extension:admin_actions": [["rule:admin_api"]],
  11. "compute_extension:admin_actions:pause": [["rule:admin_or_owner"]],
  12. "compute_extension:admin_actions:unpause": [["rule:admin_or_owner"]],
  13. "compute_extension:admin_actions:suspend": [["rule:admin_or_owner"]],
  14. "compute_extension:admin_actions:resume": [["rule:admin_or_owner"]],
  15. "compute_extension:admin_actions:lock": [["rule:admin_api"]],
  16. "compute_extension:admin_actions:unlock": [["rule:admin_api"]],
  17. "compute_extension:admin_actions:resetNetwork": [["rule:admin_api"]],
  18. "compute_extension:admin_actions:injectNetworkInfo": [["rule:admin_api"]],
  19. "compute_extension:admin_actions:createBackup": [["rule:admin_or_owner"]],
  20. "compute_extension:admin_actions:migrateLive": [["rule:admin_api"]],
  21. "compute_extension:admin_actions:migrate": [["rule:admin_api"]],
  22. "compute_extension:aggregates": [["rule:admin_api"]],
  23. "compute_extension:certificates": ["role":"compute-user"],
  24. "compute_extension:cloudpipe": [["rule:admin_api"]],
  25. "compute_extension:console_output": ["role":"compute-user"],
  26. "compute_extension:consoles": ["role":"compute-user"],
  27. "compute_extension:createserverext": ["role":"compute-user"],
  28. "compute_extension:deferred_delete": ["role":"compute-user"],
  29. "compute_extension:disk_config": ["role":"compute-user"],
  30. "compute_extension:extended_server_attributes": [["rule:admin_api"]],
  31. "compute_extension:extended_status": ["role":"compute-user"],
  32. "compute_extension:flavorextradata": ["role":"compute-user"],
  33. "compute_extension:flavorextraspecs": ["role":"compute-user"],
  34. "compute_extension:flavormanage": [["rule:admin_api"]],
  35. "compute_extension:floating_ip_dns": ["role":"compute-user"],
  36. "compute_extension:floating_ip_pools": ["role":"computeuser"],
  37. "compute_extension:floating_ips": ["role":"compute-user"],
  38. "compute_extension:hosts": [["rule:admin_api"]],
  39. "compute_extension:keypairs": ["role":"compute-user"],
  40. "compute_extension:multinic": ["role":"compute-user"],
  41. "compute_extension:networks": [["rule:admin_api"]],
  42. "compute_extension:quotas": ["role":"compute-user"],
  43. "compute_extension:rescue": ["role":"compute-user"],
  44. "compute_extension:security_groups": ["role":"compute-user"],
  45. "compute_extension:server_action_list": [["rule:admin_api"]],
  46. "compute_extension:server_diagnostics": [["rule:admin_api"]],
  47. "compute_extension:simple_tenant_usage:show": [["rule:admin_or_owner"]],
  48. "compute_extension:simple_tenant_usage:list": [["rule:admin_api"]],
  49. "compute_extension:users": [["rule:admin_api"]],
  50. "compute_extension:virtual_interfaces": ["role":"computeuser"],
  51. "compute_extension:virtual_storage_arrays": ["role":"computeuser"],
  52. "compute_extension:volumes": ["role":"compute-user"],
  53. "compute_extension:volumetypes": ["role":"compute-user"],
  54. "volume:create": ["role":"compute-user"],
  55. "volume:get_all": ["role":"compute-user"],
  56. "volume:get_volume_metadata": ["role":"compute-user"],
  57. "volume:get_snapshot": ["role":"compute-user"],
  58. "volume:get_all_snapshots": ["role":"compute-user"],
  59. "network:get_all_networks": ["role":"compute-user"],
  60. "network:get_network": ["role":"compute-user"],
  61. "network:delete_network": ["role":"compute-user"],
  62. "network:disassociate_network": ["role":"compute-user"],
  63. "network:get_vifs_by_instance": ["role":"compute-user"],
  64. "network:allocate_for_instance": ["role":"compute-user"],
  65. "network:deallocate_for_instance": ["role":"compute-user"],
  66. "network:validate_networks": ["role":"compute-user"],
  67. "network:get_instance_uuids_by_ip_filter": ["role":"computeuser"],
  68. "network:get_floating_ip": ["role":"compute-user"],
  69. "network:get_floating_ip_pools": ["role":"compute-user"],
  70. "network:get_floating_ip_by_address": ["role":"compute-user"],
  71. "network:get_floating_ips_by_project": ["role":"computeuser"],
  72. "network:get_floating_ips_by_fixed_address": ["role":"computeuser"],
  73. "network:allocate_floating_ip": ["role":"compute-user"],
  74. "network:deallocate_floating_ip": ["role":"compute-user"],
  75. "network:associate_floating_ip": ["role":"compute-user"],
  76. "network:disassociate_floating_ip": ["role":"compute-user"],
  77. "network:get_fixed_ip": ["role":"compute-user"],
  78. "network:add_fixed_ip_to_instance": ["role":"compute-user"],
  79. "network:remove_fixed_ip_from_instance": ["role":"computeuser"],
  80. "network:add_network_to_project": ["role":"compute-user"],
  81. "network:get_instance_nw_info": ["role":"compute-user"],
  82. "network:get_dns_domains": ["role":"compute-user"],
  83. "network:add_dns_entry": ["role":"compute-user"],
  84. "network:modify_dns_entry": ["role":"compute-user"],
  85. "network:delete_dns_entry": ["role":"compute-user"],
  86. "network:get_dns_entries_by_address": ["role":"compute-user"],
  87. "network:get_dns_entries_by_name": ["role":"compute-user"],
  88. "network:create_private_dns_domain": ["role":"compute-user"],
  89. "network:create_public_dns_domain": ["role":"compute-user"],
  90. "network:delete_dns_domain": ["role":"compute-user"]
  91. }

openstack中的身份管理的更多相关文章

  1. Azure Active Directory中的特权身份管理如何运作?

    [TechTarget中国原创] 用户权限不是平等的.有些用户需要有大量权利和特权——通常这些都是管理员.企业在允许特权用户进行管理以及支持活动时,还需要意识到特权用户也有可能犯错.他们会犯错.他们可 ...

  2. 003-官网安装openstack之-keystone身份认证服务

    以下操作均在控制节点进行 1.控制节点安装keystone服务 概念理解: Keystone是OpenStack框架中,负责身份验证.服务规则和服务令牌的功能, 它实现了OpenStack的Ident ...

  3. 云计算openstack核心组件——keystone身份认证服务

    一.Keystone介绍:       keystone 是OpenStack的组件之一,用于为OpenStack家族中的其它组件成员提供统一的认证服务,包括身份验证.令牌的发放和校验.服务列表.用户 ...

  4. openstack核心组件——keystone身份认证服务(5)

    云计算openstack核心组件——keystone身份认证服务(5) 部署公共环境 ntp openstack mariadb-server rabbitmq-server memcache 1.w ...

  5. 云计算OpenStack核心组件---horizon Web管理界面(9)

    一.horizon介绍 Horizon 为 Openstack 提供一个 WEB 前端的管理界面 (UI 服务 )通过 Horizone 所提供的 DashBoard 服务 , 管理员可以使用通过 W ...

  6. 云计算OpenStack核心组件---keystone身份认证服务(5)

    一.Keystone介绍: keystone 是OpenStack的组件之一,用于为OpenStack家族中的其它组件成员提供统一的认证服务,包括身份验证.令牌的发放和校验.服务列表.用户权限的定义等 ...

  7. OpenStack中Keystone的基本概念理解

    原文http://www.kankanews.com/ICkengine/archives/10788.shtml Keystone简介 Keystone(OpenStack Identity Ser ...

  8. openstack中eventlet使用

    openstack中使用eventlet的协程来实现并发. 第一种,使用eventlet.GreenPool来管理绿色线程 如l3-agent在开启了8个绿色线程来处理router消息 def _pr ...

  9. Azure Service Bus 中的身份验证方式 Shared Access Signature

    var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...

随机推荐

  1. 新浪云SAE使用入门,教你如何发布自己的网站

    新浪云sae是一个免费的web服务器,SAE的Web服务器采用分布式部署的方式,开发者将代码部署到SAE前端机后,会通过同步的方式,将代码部署到SAE所有的Web服务器.相当于在每一台Web服务器上都 ...

  2. MapReduce Shuffle过程

    MapReduce Shuffle 过程详解 一.MapReduce Shuffle过程 1. Map Shuffle过程 2. Reduce Shuffle过程 二.Map Shuffle过程 1. ...

  3. 强大的自适应jQuery焦点图特效

    jQuery焦点图切换自适应效果 自适应jQuery焦点图特效是一款支持移动端的响应式jQuery焦点图插件,支持flexible布局,支持移动触摸事件等. 今天我们要来分享一款很灵活的jQuery焦 ...

  4. Java基本概念(1)什么是Java

    什么是Java Java是一种开发语言(核心特点:跨平台,面向对象,名称由来看这里:J2EE里面的2是什么意思),对于开发者来讲,Java基本等于Jdk. Jdk的版本介绍看这里:Java都有那些版本 ...

  5. 【linux草鞋应用编程系列】_4_ 应用程序多线程

    一.应用程序多线程     当一个计算机上具有多个CPU核心的时候,每个CPU核心都可以执行代码,此时如果使用单线程,那么这个线程只能在一个 CPU上运行,那么其他的CPU核心就处于空闲状态,浪费了系 ...

  6. laravel5 数据库配置(MySQL)

    laravel5 数据库配置(MySQL) 首先有一个安装完成可以运行的laravel框架. 配置database.php 进入laravel根目录. 在config目录下找到database.php ...

  7. [moka同学摘录]SQL内联、外联的简单理解

    (源自:http://blog.csdn.net/kkk9127/article/details/1487686) --查询分析器中执行:--建表table1,table2:create table ...

  8. tarjan讲解(用codevs1332(tarjan的裸题)讲解)

    主要借助这道比较裸的题来讲一下tarjan这种算法 tarjan是一种求解有向图强连通分量的线性时间的算法.(用dfs来实现) 如果两个顶点可以相互通达,则称两个顶点强连通.如果有向图G的每两个顶点都 ...

  9. IOS 绘制圆饼图 简单实现的代码有注释

    今天为大家带来IOS 绘图中圆饼的实现 .h文件 #import <UIKit/UIKit.h> @interface ZXCircle : UIView @end .m文件 #impor ...

  10. Intent属性详解一 component属性

    先看效果图 概述 在介绍Component之前,我们首先来了解ComponentName这个类:ComponentName与Intent同位于android.content包下,我们从Android官 ...