1、Keystone介紹:
keystone 是OpenStack的組件之一,用於爲OpenStack家族中的其它組件成員提供統一的認證服務,包括身份驗證、令牌的發放和校驗、服務列表、用戶權限的定義等等。雲環境中全部的服務之間的受權和認證都須要通過 keystone. 所以 keystone 是雲平臺中第一個即須要安裝的服務。
做爲 OpenStack 的基礎支持服務,Keystone 作下面這幾件事情:
-
管理用戶及其權限
-
維護 OpenStack Services 的 Endpoint
-
Authentication(認證)和 Authorization(鑑權)
User
User 指代任何使用 OpenStack 的實體,能夠是真正的用戶,其餘系統或者服務。
當 User 請求訪問 OpenStack 時,Keystone 會對其進行驗證。Horizon 在 Identity->Users 管理 User
除了 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。
-
Token 用作訪問 Service 的 Credential
-
Service 會經過 Keystone 驗證 Token 的有效性
-
Token 的有效期默認是 24 小時
Project
Project 用於將 OpenStack 的資源(計算、存儲和網絡)進行分組和隔離。
根據 OpenStack 服務的對象不一樣,Project 能夠是一個客戶(公有云,也叫租戶)、部門或者項目組(私有云)。
這裏請注意:
-
資源的全部權是屬於 Project 的,而不是 User。
-
在 OpenStack 的界面和文檔中,Tenant / Project / Account 這幾個術語是通用的,但長期看會傾向使用 Project
-
每一個 User(包括 admin)必須掛在 Project 裏才能訪問該 Project 的資源。 一個User能夠屬於多個 Project。
-
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:
-
Keystone定義Role
-
能夠爲 User 分配一個或多個 Role,Horizon 的菜單爲:
Identity->Project->ManageMembers
-
Service 決定每一個 Role 能作什麼事情 Service 經過各自的 policy.json 文件對 Role 進行訪問控制。 下面是 Nova 服務 /etc/nova/policy.json 中的示例:
上面配置的含義是:對於 create、attach_network 和 attach_volume 操做,任何Role的 User 均可以執行; 但只有 admin 這個 Role 的 User 才能執行 forced_host 操做。
OpenStack 默認配置只區分 admin 和非 admin Role。 若是須要對特定的 Role 進行受權,能夠修改 policy.json。
2、Keystone基本架構:
•Token: 用來生成和管理token
•Catalog:用來存儲和管理service/endpoint
•Identity:用來管理tenant/user/role和驗證
•Policy:用來管理訪問權限
3、經過例子認識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 列表
首先 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/ 目錄裏。
4、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]