分享

OpenStack身份管理Identity-keystone之用户管理

pig2 发表于 2014-2-9 00:49:35 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 0 21529
本帖最后由 pig2 于 2014-2-9 00:57 编辑

阅读下面可以带着下面问题:
1.从使用角度该如何理解user,Tenants,Roles?
2.user,Tenants,Roles三者之间的关系是什么?
3.那些文件控制着访问权限?


一、基本概念
身份认证服务包括两个主要功能:
用户管理:时时跟踪用户以及用户被赋予了什么权限。
服务编录:提供一份可用服务的目录并可以定位这些服务的API。
1.1 用户管理
Identity用户管理包括三个主要概念:
用户(Users)
租户(Tenants)
角色(Roles)
用户表示拥有用户名,密码,邮箱等帐号信息的自然人。这里给出创建用户名为"alice”的用户:
$ keystone  user-create  --name=alice  --pass=mypassword123  --mail=alice@example.com
租户可以被理解为一个项目,团队或组织。你必须指定一个相应的租户(tenant)才可以申请OpenStack服务,例如你指定以某租户申请Compute服务来查询当前运行的实例列表,则你将收到的是该租户的运行实例列表。这里是创建一个名为"acme”租户的例子:
$ keystone  tenant-create  --name=acme
注意事项:由于在早期的版本中使用项目术语来表示租户,所以有些命令行工具使用--project_id替代--tenant_id给客户分配一个ID号。
角色代表特定的租户中的用户用户操作权限,可以使用如下命令创建角色:
$ keystone  role-create  --name=compute-user
译者批注:你可以理解租户为那些使用你云环境的客户,这些客户可以是一个项目组、工作组、公司,这些客户中会建立不同的帐号(用户)及其对应的权限(角色).
Identity服务将用户与租户及角色结合在一起,继续刚才的例子,我们也许希望在acme租户中为alice用户分配compute-user角色。
  1. $ keystone user-list
复制代码
+---------------------------------+----------+------+-------+
|id                                | enabled | email | name |
+----------------------------------+----------+------+-------+
| 96a6ebba0d4c441887aceaeced892585 | True  |  ... | alice  |
+----------------------------------+----------+------+-------+
  1. $ keystone role-list      
复制代码
+----------------------------------+------------------+
|id                                | name             |
+----------------------------------+------------------+
| f8dd5a2e4dc64a41b96add562d9a764e | compute-user     |
+----------------------------------+------------------+
---------------------------------------------------------------------------------------------------------------------------------------------------

这里详细介绍一下role的基本操作及通过role,操作user。
二、role基本操作

  与user,tenant等一样,role的操作也无怪乎创建,更新,删除,列举等:

  列举:

  # keystone role-list

创建:

# keystone role-create

  删除:

  # keystonerole-delete

  ... 等等,由于太过简单,这里不再说明。


三、通过role操作用户

下面着重介绍通过role将一个用户加入到另一个tenant的小魔法。

  首先,创建两个tenant, 分别命名为tenant1和tenant2(注意创建tenant,user, role的keystone命令必须有administrator权限,这里对所有administrator操作忽略相关用户/密码/tenant的声明):
# keystone tenant-create --name tenant1 --enabled true

# keystone tenant-create --name tenant2 --enabled true



为tenant1创建用户user1, 为tenant2创建用户user2:

  # keystone user-create --name user1 --tenant-id <tenant-id of tenant1> --pass password --enabled true  

  # keystone user-create --name user2 --tenant-id <tenant-id of tenant2> --pass password --enabled true     

  先不进行role操作,用user1用户创建一个instance:

  # nova --os-username user1--os-password password --os-tenant-name tenant1 boot test --image "cb79a458-169d-413e-89d0-02bcae61569a" --flavor 1

  #nova --os_username user1 --os_password password --os_tenant_name tenant1 list

  +--------------------------------------+-------+--------+---------------------------+

  | ID                                   | Name  | Status | Networks                  |
  +--------------------------------------+-------+--------+---------------------------+
  | 88bc939b-e29e-44ee-9f09-ec45a93ee6c4 | test | ACTIVE | nova_fixed=192.168.123.65 |
  +--------------------------------------+-------+--------+---------------------------+

  这时候,用user2用户登录,是无法对user1用户创建的instance进行操作的。

  #nova --os_username user2 --os_password password --os_tenant_name tenant2 list

  -- <NULL> --



  创建role test:

  keystone role-create --name test

   +----------+----------------------------------+
   | Property |              Value               |
   +----------+----------------------------------+
   |    id    | 2493283f09c1475198f2337a47aa398f |
   |   name   |              test               |
   +----------+----------------------------------+


  通过role test将user2用户加入到名为tenant1的tenant中:

   # keystone user-role-add --user-id 7b32f4fc92704947802d2eca95edff0d --role-id 2493283f09c1475198f2337a47aa398f --tenant-id 0647347fa21d4221b0197cd282465a00

   其中7b32f4fc92704947802d2eca95edff0d是user2的id,0647347fa21d4221b0197cd282465a00是tenant1的id。

   这样,就把user2用户加入到了tenant1。

  #nova --os_username user2 --os_password password --os_tenant_name tenant1 list

   +--------------------------------------+-------+--------+---------------------------+
   | ID                                   | Name  | Status | Networks                  |
   +--------------------------------------+-------+--------+---------------------------+
   | 88bc939b-e29e-44ee-9f09-ec45a93ee6c4 | test | ACTIVE | nova_fixed=192.168.123.65 |
   +--------------------------------------+-------+--------+---------------------------+
   test2用户可以看到tenant1下的instance。

  # nova --os_username user2 --os_password password --os_tenant_name tenant1 delete 88bc939b-e29e-44ee-9f09-ec45a93ee6c4

  user2用户可以将user1用户创建的instance删除,因为这个instance在tenant1中。当然,对于tenant1内的资源,user2用户也必须用tenant1内的身份去访问,这就是我们在上边的命令中定义--os_tenant_name为tenant1的原因。




---------------------------------------------------------------------------------------------------------------------------------------
  1. $ keystone tenant-list                 
复制代码
+----------------------------------+-------+----------+
| id                               | name  | enabled  |
+----------------------------------+-------+----------+
| 2395953419144b67955ac4bab96b8fd2 | acme  | True     |
+----------------------------------+-------+----------+
  1. $ keystone user-role-add \      
  2. --user=96a6ebba0d4c441887aceaeced892585 \            
  3. --role=f8dd5a2e4dc64a41b96add562d9a764e \            
  4. --tenant_id=2395953419144b67955ac4bab96b8fd2         
复制代码
tenant详细操作可以参考:openstack之tenant介绍



一个用户可以在不同的租户中被分配不同的角色,例如Alice也可以在Cyberdyne租户中用户admin角色。一个用户也可以在同一个租户中分配多个角色。
/etc/[服务代码名称]/policy.json控制着哪些用户可以拥有什么样的服务,如:/etc/nova/policy.json定义了Compute服务的访问策略,/etc/glance/policy.json定义Image服务的访问策略,以及/etc/keystone/policy.json定义Identity服务的访问策略。
Compute,Identity,Image服务的默认policy.json文件仅识别admin角色:所有的操作无需admin角色即可被租户中拥有任何角色的用户均可以访问。
如果你希望限制用户在Compute服务中所执行的操作,你需要在Identity服务中创建一个角色并修改/etc/nova/policy.json,实现仅提供该角色才可以执行Compute操作。
实例,以下在/etc/nova/policy.json中的配置设定卷创建的操作对用户无任何限制,在租户中的用户用户任何角色均可以创建卷。
  1. "volume:create": [],                                            
复制代码
如果你需要仅拥有compute-user角色的用户才可以创建卷,你就需要添加一行”role:compute-user”,具体配置如下:
  1. "volume:create": ["role:compute-user"],                       
复制代码
如我们需要对所有Compute服务的请求均需要指定的角色,你的配置文件应该作类似于如下这样的配置:
  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":"compute-user"],
  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":"compute-user"],
  51. "compute_extension:virtual_storage_arrays": ["role":"compute-user"],
  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":"compute-user"],
  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":"compute-user"],
  72. "network:get_floating_ips_by_fixed_address": ["role":"compute-user"],
  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":"compute-user"],
  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. }
复制代码
1.2 服务管理
服务管理有两个主要的概念:
服务
终端
Identity服务同时维护着一份与各个服务相同的用户(如:Compute服务有一个对应的用户名nova),以及一个名为service的特殊服务租户。




来自群组: openstack技术组

没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条