作為 OpenStack 的基礎支持服務,Keystone 做下面這幾件事情:
1.管理用戶及其權限
2.維護 OpenStack Services 的 Endpoint
3.Authentication(認證)和 Authorization(鑒權)

User;Credentials;Authentication;Token;Project;Service;Endpoint =========================================================================================================== User 指代任何使用 OpenStack 的實體,可以是真正的用戶,其他系統或者服務。 當 User 請求訪問 OpenStack 時,Keystone 會對其進行驗證。 --------------------------------------------------------------------------------------------------------- Credentials 是 User 用來證明自己身份的信息,可以是: 1. 用戶名/密碼 2. Token 3. API Key 4. 其他高級方式 --------------------------------------------------------------------------------------------------------- Authentication 是 Keystone 驗證 User 身份的過程。User 訪問 OpenStack 時向 Keystone 提交用戶名和密碼形式的 Credentials,Keystone 驗證通過后會給 User 簽發一個 Token 作為后續訪問的 Credential。 --------------------------------------------------------------------------------------------------------- Token 是由數字和字母組成的字符串,User 成功 Authentication 后 Keystone 生成 Token 並分配給 User。 1.Token 用做訪問 Service 的 Credential 2.Service 會通過 Keystone 驗證 Token 的有效性 3.Token 的有效期默認是 24 小時 --------------------------------------------------------------------------------------------------------- Project 用於將 OpenStack 的資源(計算、存儲和網絡)進行分組和隔離。 根據 OpenStack 服務的對象不同,Project 可以是一個客戶(公有雲,也叫租戶)、部門或者項目組(私有雲)。 這里請注意: 1.資源的所有權是屬於 Project 的,而不是 User。 2.在 OpenStack 的界面和文檔中,Tenant / Project / Account 這幾個術語是通用的,但長期看會傾向使用 Project 3.每個 User(包括 admin)必須掛在 Project 里才能訪問該 Project 的資源。 一個User可以屬於多個 Project。 4.admin 相當於 root 用戶,具有最高權限 --------------------------------------------------------------------------------------------------------- OpenStack 的 Service 包括 Compute (Nova)、Block Storage (Cinder)、Object Storage (Swift)、Image Service (Glance) 、Networking Service (Neutron) 等。每個 Service 都會提供若干個 Endpoint,User 通過 Endpoint 訪問資源和執行操作。 --------------------------------------------------------------------------------------------------------- Endpoint 是一個網絡上可訪問的地址,通常是一個 URL。Service 通過 Endpoint 暴露自己的 API。 Keystone 負責管理和維護每個 Service 的 Endpoint。

keystone認證和鑒權;Role與鑒權的關系;一次鑒權過程(白屏查看image列表) =================================================================== 安全包含兩部分:Authentication(認證)和 Authorization(鑒權) Authentication 解決的是“你是誰?”的問題 Authorization 解決的是“你能干什么?”的問題 --------------------------------------------------------------------------------- Keystone 借助 Role 實現 Authorization: 1.Keystone定義Role 2.可以為 User 分配一個或多個 Role 3.Service 決定每個 Role 能做什么事情,Service 通過各自的 policy.json 文件對 Role 進行訪問控制。 [root@controller ~]# find / -name 'policy.json' /etc/nova/policy.json /etc/keystone/policy.json /etc/glance/policy.json /etc/placement/policy.json /etc/gnocchi/policy.json OpenStack 默認配置只區分 admin 和非 admin Role。 如果需要對特定的 Role 進行授權,可以修改 policy.json。 --------------------------------------------------------------------------------- 示例:一次鑒權過程(白屏查看image列表) admin已登錄,點擊compute下images,顯示image列表 1.admin將請求發送到了glance的endpoint 2.glance向keystone驗證amdin身份的有效性 3.glance查看/etc/glance/policy.json 判斷 admin 是否有查看 image 的權限 4.權限判斷通過,glance將image列表發給admin(返回完整的html頁面,而不是json數據)

Troubleshoot故障檢測與keystone日志 ======================================================================= 每個 Service 都有自己的日志文件 Keystone 主要有兩個日志:keystone.log 和 keystone_access.log, devstack安裝,Keystone的日志文件目錄為/var/log/apache2/ RDO安裝,Keystone的日志文件實際目錄為/var/log/keystone/ cat /etc/keystone/keystone.conf |grep debug #keystone開啟debug模式,日志文件才會記錄debug日志

黑屏執行openstack命令:admin-openrc.sh =================================================================================== [root@controller ~]# cat admin-openrc.sh export OS_USERNAME=admin export OS_PASSWORD=111111 export OS_PROJECT_NAME=admin export OS_USER_DOMAIN_NAME=Default export OS_PROJECT_DOMAIN_NAME=Default export OS_AUTH_URL=http://192.168.1.21:5000/v3 #配置文件/etc/keystone/keystone.conf;貌似默認端口為5000 export OS_IDENTITY_API_VERSION=3 [root@controller ~]# cat admin-openrc_unset.sh unset OS_USERNAME unset OS_PASSWORD unset OS_PROJECT_NAME unset OS_USER_DOMAIN_NAME unset OS_PROJECT_DOMAIN_NAME unset OS_AUTH_URL unset OS_IDENTITY_API_VERSION -------------------------------------------------------------- source admin-openrc.sh # openstack catalog list #查看 Endpoint openstack role list #查看keystone定義的角色