雲計算openstack核心組件——keystone身份認證服務(5)


一、Keystone介紹:
      keystone 是OpenStack的組件之一,用於為OpenStack家族中的其它組件成員提供統一的認證服務,包括身份驗證、令牌的發放和校驗、服務列表、用戶權限的定義等等。雲環境中所有的服務之間的授權和認證都需要經過 keystone. 因此 keystone 是雲平台中第一個即需要安裝的服務。
 
作為 OpenStack 的基礎支持服務,Keystone 做下面這幾件事情:
  1. 管理用戶及其權限
  2. 維護 OpenStack Services 的 Endpoint
  3. Authentication(認證)和 Authorization(鑒權)
 
學習 Keystone,得理解下面這些概念:
User
 
User 指代任何使用 OpenStack 的實體,可以是真正的用戶,其他系統或者服務。
當 User 請求訪問 OpenStack 時,Keystone 會對其進行驗證。Horizon 在 Identity->Users 管理 User

admin:openstack平台的超級管理員,負責openstack服務的管理和訪問權限

demo: 常規(非管理)任務應該使用無特權的項目和用戶,所有要創建 demo 項目和 demo 用戶

除了 admin 和 demo,OpenStack 也為 nova、cinder、glance、neutron 服務創建了相應的 User。 admin 也可以管理這些 User。

 
Credentials
 
Credentials 是 User 用來證明自己身份的信息,可以是:
1. 用戶名/密碼
2. Token
3. API Key
4. 其他高級方式
 
Authentication
 
Authentication 是 Keystone 驗證 User 身份的過程。User 訪問 OpenStack 時向 Keystone 提交用戶名和密碼形式的 Credentials,Keystone 驗證通過后會給 User 簽發一個 Token 作為后續訪問的 Credential。
 
Token
 
Token 是由數字和字母組成的字符串,User 成功 Authentication 后 Keystone 生成 Token 並分配給 User。
  1. Token 用做訪問 Service 的 Credential
  2. Service 會通過 Keystone 驗證 Token 的有效性
  3. Token 的有效期默認是 24 小時
Project
 
Project 用於將 OpenStack 的資源(計算、存儲和網絡)進行分組和隔離。
根據 OpenStack 服務的對象不同,Project 可以是一個客戶(公有雲,也叫租戶)、部門或者項目組(私有雲)。
 
這里請注意:
  1. 資源的所有權是屬於 Project 的,而不是 User。
  2. 在 OpenStack 的界面和文檔中,Tenant / Project / Account 這幾個術語是通用的,但長期看會傾向使用 Project
  3. 每個 User(包括 admin)必須掛在 Project 里才能訪問該 Project 的資源。 一個User可以屬於多個 Project。
  4. admin 相當於 root 用戶,具有最高權限
Horizon 在 Identity->Projects 中管理 Project

 

通過 Manage Members 將 User 添加到 Project
Service
 
OpenStack 的 Service 包括 Compute (Nova)、Block Storage (Cinder)、Object Storage (Swift)、Image Service (Glance) 、Networking Service (Neutron) 等。每個 Service 都會提供若干個 Endpoint,User 通過 Endpoint 訪問資源和執行操作。
Endpoint
 
Endpoint 是一個網絡上可訪問的地址,通常是一個 URL。Service 通過 Endpoint 暴露自己的 API。 Keystone 負責管理和維護每個 Service 的 Endpoint。
可以使用下面的命令來查看 Endpoint。
# source devstack/openrc admin admin
# openstack catalog list
Role
 
安全包含兩部分:Authentication(認證)和 Authorization(鑒權)
 
Authentication 解決的是“你是誰?”的問題
Authorization 解決的是“你能干什么?”的問題
 
Keystone 借助 Role 實現 Authorization:
  1. Keystone定義Role
     
  2. 可以為 User 分配一個或多個 Role,Horizon 的菜單為: Identity->Project->ManageMembers
 
  1. Service 決定每個 Role 能做什么事情 Service 通過各自的 policy.json 文件對 Role 進行訪問控制。 下面是 Nova 服務 /etc/nova/policy.json 中的示例:
       
       上面配置的含義是:對於 create、attach_network 和 attach_volume 操作,任何Role的 User 都可以執行; 但只有 admin 這個 Role 的 User 才能執行 forced_host 操作。
 
    2. OpenStack 默認配置只區分 admin 和非 admin Role。 如果需要對特定的 Role 進行授權,可以修改 policy.json。
        Openstack對User的驗證除了身份驗證,還需要鑒別 User 對某個Service是否有訪問權限。Policy用來定義什么角色對應什么權限。對Keystone來說,Policy其實是一個JSON文件,默認是 /etc/keystone/policy.json 。通過Policy,Keystone實現了對User的權限管理。
    
    3. openstack系統基本角色有兩個:
         一個是管理員admin
         一個是租戶_member_

二、Keystone基本架構:

 
 
•Token: 用來生成和管理token
•Catalog:用來存儲和管理service/endpoint
•Identity:用來管理tenant/user/role和驗證
•Policy:用來管理訪問權限

 

三、通過例子認識Keystone:         

我們通過“查詢可用 image”這個實際操作讓大家對這些概念建立更加感性的認識。User admin 要查看 Project 中的 image

第 1 步 登錄
 
當點擊時,OpenStack 內部發生了哪些事情?請看下面
 
Token 中包含了 User 的 Role 信息
 
第 2 步 顯示操作界面
 
 
請注意,頂部顯示 admin 可訪問的  Project 為 “admin” 和 “demo”。 其實在此之前發生了一些事情:
同時,admin 可以訪問 Intance, Volume, Image 等服務
 
 
這是因為 admin 已經從 Keystone 拿到了各 Service 的 Endpoints
 

 

第 3 步 顯示 image 列表
點擊 “Images”,會顯示 image 列表
 
 
背后發生了這些事:
首先 admin 將請求發送到 Glance 的 Endpoint
   
Glance 向 Keystone 詢問 admin 身份是否有效
 
接下來 Glance 會查看 /etc/glance/policy.json 判斷 admin 是否有查看 image 的權限
 

 

權限判定通過,Glance 將 image 列表發給 admin。
 
Troubleshoot
 
OpenStack 排查問題的方法主要是通過日志。
 
每個 Service 都有自己的日志文件。
Keystone 主要有兩個日志: keystone.log 和 keystone_access.log,保存在 /var/log/apache2/ 目錄里。
 
devstack 的 screen 窗口已經幫我們打開了這兩個日志。 可以直接查看:
如果需要得到最詳細的日志信息,可以在 /etc/keystone/keystone.conf 中打開 debug 選項
 
 
在非 devstack 安裝中,日志可能在 /var/log/keystone/ 目錄里。

 
四、keystone配置文件:
 
vim /etc/keystone/keystone.conf
[DEFAULT]
 
[assignment]
 
[auth]
 
[cache]
 
[catalog]
 
[cors]
 
[cors.subdomain]
 
[credential]
 
[database]
 
[domain_config]
 
[endpoint_filter]
 
[endpoint_policy]
 
[eventlet_server]
 
[federation]
 
[fernet_tokens]
 
[healthcheck]
 
[identity]
 
[identity_mapping]
 
[kvs]
 
[ldap]
 
[matchmaker_redis]
 
[memcache]
 
[oauth1]
 
[oslo_messaging_amqp]
 
[oslo_messaging_kafka]
 
[oslo_messaging_notifications]
 
[oslo_messaging_rabbit]
 
[oslo_messaging_zmq]
 
[oslo_middleware]
 
[oslo_policy]
 
[paste_deploy]
 
[policy]
 
[profiler]
 
[resource]
 
[revoke]
 
[role]
 
[saml]
 
[security_compliance]
 
[shadow_users]
 
[signing]
 
[token]
provider = fernet
 
[tokenless_auth]
 
[trust]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM