做爲 OpenStack 的基礎支持服務,Keystone 作下面這幾件事情:web
管理用戶及其權限json
維護 OpenStack Services 的 Endpoint安全
Authentication(認證)和 Authorization(鑑權)網絡
學習 Keystone,得理解下面這些概念:學習
User 指代任何使用 OpenStack 的實體,能夠是真正的用戶,其餘系統或者服務。spa
當 User 請求訪問 OpenStack 時,Keystone 會對其進行驗證。3d
Horizon 在 Identity->Users 管理 Userorm
除了 admin 和 demo,OpenStack 也爲 nova、cinder、glance、neutron 服務建立了相應的 User。 admin 也能夠管理這些 User。對象
Credentials 是 User 用來證實本身身份的信息,能夠是: 1. 用戶名/密碼 2. Token 3. API Key 4. 其餘高級方式blog
Authentication 是 Keystone 驗證 User 身份的過程。
User 訪問 OpenStack 時向 Keystone 提交用戶名和密碼形式的 Credentials,Keystone 驗證經過後會給 User 簽發一個 Token 做爲後續訪問的 Credential。
Token 是由數字和字母組成的字符串,User 成功 Authentication 後由 Keystone 分配給 User。
Token 用作訪問 Service 的 Credential
Service 會經過 Keystone 驗證 Token 的有效性
Token 的有效期默認是 24 小時
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 中
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。
可使用下面的命令來查看 Endpoint。
root@devstack-controller:~# source devstack/openrc admin admin
root@devstack-controller:~# openstack catalog list
安全包含兩部分:Authentication(認證)和 Authorization(鑑權) Authentication 解決的是「你是誰?」的問題 Authorization 解決的是「你能幹什麼?」的問題
Keystone 是藉助 Role 來實現 Authorization 的:
Keystone定義Role
能夠爲 User 分配一個或多個 Role Horizon 的菜單爲 Identity->Project->Manage Members
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。
下一節咱們將經過例子加深對這些概念的理解。