天天看點

openstack身份管理

基本概念

身份服務有兩個主要功能:

1、使用者管理:記錄使用者和他們的權限

2、服務目錄:提供可用服務和該服務api的終端位址

身份服務定義了一些非常值得了解的定義:

使用者(User):使用OpenStack雲服務的人、系統、服務的數字表示。身份驗證服務驗證使用者傳入的請求。使用者登入可能被賦予通路資源的令牌。使用者可能直接被指定給一個特定租戶,好像使用者在這個租戶中一樣。

認證資訊(Credentials):使用者持有的,一般情況下隻有這個使用者知道的資料。使用者能夠使用這個資料來證明他的身份(因為沒有其他人知道這個資料)。例如:

  • 配對的使用者名和密碼
  • 配對的使用者名和API key
  • 自己和有你本人照片的駕駛證
  • 頒發給你不被其他人知道的令牌

認證(Authentication):在認證服務背景下,認證是确認使用者身份和請求正确性的動作。身份服務确認傳入的請求來自于有請求權限的使用者。這些請求最初以一系列驗證資訊的形式出現(使用者名和密碼,或使用者名和API key)。經過初始驗證後,身份服務會頒發給使用者一個令牌,在後續請求時使用者可以用這個令牌說明他們的身份已經經過認證。

令牌(Token):令牌是用來通路資源的任意比特的文本。每個令牌有一個通路範圍。令牌可在任意時間收回,并在一個有限的時間内有效。在Folsom版本中身份服務支援基于令牌的認證,未來将會支援額外的協定。首要目的是內建服務,不渴望成為一個成熟的身份存儲和管理方案。

租戶(Tenant):用來分組或隔離資源和(或)身份對象的容器。根據服務營運商,租戶可以映射成一個客戶、賬戶、組織或項目。

服務(Service):一個OpenStack服務,例如計算(nova),對象存儲(swift)或鏡像服務(glance)。服務提供一個或多個使用者可以通路資源和執行(可能有用的)操作的端點。

端點(Endpoint):一個可通過網絡通路的服務位址,通常使用URL描述。如果使用擴充,可以建立端點模闆,它代表了所有可跨區域通路的服務。

角色(Role):可執行一特定系列操作的使用者特性。角色包括一系列權利和特權。使用者可繼承其所屬角色的權利和特權。在身份服務中,頒發給使用者的令牌包括使用者能承擔的角色清單。這個使用者調用的服務決定他們怎樣解釋這個使用者所屬的角色,以及每個角色授予通路的操作和資源。

openstack身份管理

使用者管理

使用者身份管理有三個主要的概念:

  • 使用者Users
  • 租戶Tenants
  • 角色Roles

使用者代表一個人,他持有相關的資訊,例如使用者名、密碼、電子郵件。下面的例子是建立一個名為“alice”的使用者:

$ keystone user-create --name=alice --pass=mypassword123 --email= [email protected]
           

租戶可以看做是一個項目、分組或組織。當你向OpenStack服務發送請求時,你必須之地一個租戶。例如如果你要向計算服務請求查詢運作執行個體的清單,你将收到在你查詢裡指定租戶内的運作執行個體清單。下面的例子建立一個名為“acme”的租戶。

$ keystone tenant-create --name=acme
           

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

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

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

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

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

$ keystone user-list
+--------+---------+-------------------+--------+
| id | enabled | email | name |
+--------+---------+-------------------+--------+
| 892585 | True | [email protected] | alice |
+--------+---------+-------------------+--------+
$ keystone role-list
+--------+--------------+
| id | name |
+--------+--------------+
| 9a764e | compute-user |
+--------+--------------+
$ keystone tenant-list
+--------+------+---------+
| id | name | enabled |
+--------+------+---------+
| 6b8fd2 | acme | True |
+--------+------+---------+
$ 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中的這一行指定對使用者建立卷不做限制:不論使用者在租戶中是有何種角色,他們都可以在租戶中建立卷。

"volume:create":[],
           

如果你希望限制目前租戶中有”compute-user"角色的使用者才能建立卷,可以增加“role:compute-user",例如這樣:

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

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

{
"admin_or_owner": [["role:admin"], ["project_id: %(project_id)s"]],
"default": [["rule:admin_or_owner"]],
"compute:create": ["role":"compute-user"],
"compute:create:attach_network": ["role":"compute-user"],
"compute:create:attach_volume": ["role":"compute-user"],
"compute:get_all": ["role":"compute-user"],
"admin_api": [["role:admin"]],
"compute_extension:accounts": [["rule:admin_api"]],
"compute_extension:admin_actions": [["rule:admin_api"]],
"compute_extension:admin_actions:pause": [["rule:admin_or_owner"]],
"compute_extension:admin_actions:unpause": [["rule:admin_or_owner"]],
"compute_extension:admin_actions:suspend": [["rule:admin_or_owner"]],
"compute_extension:admin_actions:resume": [["rule:admin_or_owner"]],
"compute_extension:admin_actions:lock": [["rule:admin_api"]],
"compute_extension:admin_actions:unlock": [["rule:admin_api"]],
"compute_extension:admin_actions:resetNetwork": [["rule:admin_api"]],
"compute_extension:admin_actions:injectNetworkInfo": [["rule:admin_api"]],
"compute_extension:admin_actions:createBackup": [["rule:admin_or_owner"]],
"compute_extension:admin_actions:migrateLive": [["rule:admin_api"]],
"compute_extension:admin_actions:migrate": [["rule:admin_api"]],
"compute_extension:aggregates": [["rule:admin_api"]],
"compute_extension:certificates": ["role":"compute-user"],
"compute_extension:cloudpipe": [["rule:admin_api"]],
"compute_extension:console_output": ["role":"compute-user"],
"compute_extension:consoles": ["role":"compute-user"],
"compute_extension:createserverext": ["role":"compute-user"],
"compute_extension:deferred_delete": ["role":"compute-user"],
"compute_extension:disk_config": ["role":"compute-user"],
"compute_extension:extended_server_attributes": [["rule:admin_api"]],
"compute_extension:extended_status": ["role":"compute-user"],
"compute_extension:flavorextradata": ["role":"compute-user"],
"compute_extension:flavorextraspecs": ["role":"compute-user"],
"compute_extension:flavormanage": [["rule:admin_api"]],
"compute_extension:floating_ip_dns": ["role":"compute-user"],
"compute_extension:floating_ip_pools": ["role":"computeuser"],
"compute_extension:floating_ips": ["role":"compute-user"],
"compute_extension:hosts": [["rule:admin_api"]],
"compute_extension:keypairs": ["role":"compute-user"],
"compute_extension:multinic": ["role":"compute-user"],
"compute_extension:networks": [["rule:admin_api"]],
"compute_extension:quotas": ["role":"compute-user"],
"compute_extension:rescue": ["role":"compute-user"],
"compute_extension:security_groups": ["role":"compute-user"],
"compute_extension:server_action_list": [["rule:admin_api"]],
"compute_extension:server_diagnostics": [["rule:admin_api"]],
"compute_extension:simple_tenant_usage:show": [["rule:admin_or_owner"]],
"compute_extension:simple_tenant_usage:list": [["rule:admin_api"]],
"compute_extension:users": [["rule:admin_api"]],
"compute_extension:virtual_interfaces": ["role":"computeuser"],
"compute_extension:virtual_storage_arrays": ["role":"computeuser"],
"compute_extension:volumes": ["role":"compute-user"],
"compute_extension:volumetypes": ["role":"compute-user"],
"volume:create": ["role":"compute-user"],
"volume:get_all": ["role":"compute-user"],
"volume:get_volume_metadata": ["role":"compute-user"],
"volume:get_snapshot": ["role":"compute-user"],
"volume:get_all_snapshots": ["role":"compute-user"],
"network:get_all_networks": ["role":"compute-user"],
"network:get_network": ["role":"compute-user"],
"network:delete_network": ["role":"compute-user"],
"network:disassociate_network": ["role":"compute-user"],
"network:get_vifs_by_instance": ["role":"compute-user"],
"network:allocate_for_instance": ["role":"compute-user"],
"network:deallocate_for_instance": ["role":"compute-user"],
"network:validate_networks": ["role":"compute-user"],
"network:get_instance_uuids_by_ip_filter": ["role":"computeuser"],
"network:get_floating_ip": ["role":"compute-user"],
"network:get_floating_ip_pools": ["role":"compute-user"],
"network:get_floating_ip_by_address": ["role":"compute-user"],
"network:get_floating_ips_by_project": ["role":"computeuser"],
"network:get_floating_ips_by_fixed_address": ["role":"computeuser"],
"network:allocate_floating_ip": ["role":"compute-user"],
"network:deallocate_floating_ip": ["role":"compute-user"],
"network:associate_floating_ip": ["role":"compute-user"],
"network:disassociate_floating_ip": ["role":"compute-user"],
"network:get_fixed_ip": ["role":"compute-user"],
"network:add_fixed_ip_to_instance": ["role":"compute-user"],
"network:remove_fixed_ip_from_instance": ["role":"computeuser"],
"network:add_network_to_project": ["role":"compute-user"],
"network:get_instance_nw_info": ["role":"compute-user"],
"network:get_dns_domains": ["role":"compute-user"],
"network:add_dns_entry": ["role":"compute-user"],
"network:modify_dns_entry": ["role":"compute-user"],
"network:delete_dns_entry": ["role":"compute-user"],
"network:get_dns_entries_by_address": ["role":"compute-user"],
"network:get_dns_entries_by_name": ["role":"compute-user"],
"network:create_private_dns_domain": ["role":"compute-user"],
"network:create_public_dns_domain": ["role":"compute-user"],
"network:delete_dns_domain": ["role":"compute-user"]
}
           

繼續閱讀