openstack中的身份管理

原文: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 plaincopy
  1. $ keystone user-create --name=alice --pass=mypassword123 --email= [email protected]  

租戶可以看做是一個項目、分組或組織。當你向OpenStack服務發送請求時,你必須之地一個租戶。例如如果你要向計算服務請求查詢運行實例的列表,你將收到在你查詢裏指定租戶內的運行實例列表。下面的例子創建一個名爲“acme”的租戶。

[plain] view plaincopy
  1. $ keystone tenant-create --name=acme  

注意!因爲在以前的OpenStack計算版本中使用術語“項目”來代替租戶,一些命令行工具使用--project_id代替--tenant-id或--os-tenant-id指定租戶ID。

角色歸納了給定租戶下允許用戶執行的操作。以下例子創建一個名爲“compute-user"的角色:

[plain] view plaincopy
  1. $ keystone role-create --name=compute-user  

注意!這取決於單個的服務(比如計算服務和鏡像服務)分配這些角色的意義。至於身份服務而言,角色只是一個簡單的名字。

身份服務將一個用戶與租戶、角色關聯。繼續我們前面的例子,我們希望在租戶“acme”中給用戶”alice”分配“compute-user”權限。

[plain] view plaincopy
  1. $ keystone user-list  
  2. +--------+---------+-------------------+--------+  
  3. | id | enabled | email | name |  
  4. +--------+---------+-------------------+--------+  
  5. | 892585 | True | [email protected] | 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 plaincopy
  1. "volume:create":[],  
如果你希望限制當前租戶中有”compute-user"角色的用戶才能創建卷,可以增加“role:compute-user",例如這樣:

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

如果我們希望限制所有的計算服務請求都需要這個角色,策略文件是這樣的:

[plain] view plaincopy
  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. }  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章