Keystone— 身份認證服務
1.keystone
一.Keystone 做下面這幾件事情:
1、管理使用者及其許可權
2、維護 OpenStack Services 的 Endpoint
3、Authentication(認證)和 Authorization(鑑權)
二. keystone 的概念
User:指使用Openstack service的使用者,可以是人、服務、系統,但凡使用了Openstack service的物件都可以稱為User。
Project(Tenant):可以理解為一個人、或服務所擁有的 資源集合 。在一個Project(Tenant)中可以包含多個User,每一個User都會根據許可權的劃分來使用Project(Tenant)中的資源。比如通過Nova建立虛擬機器時要指定到某個Project中,在Cinder建立卷也要指定到某個Project中。User訪問Project的資源前,必須要與該Project關聯,並且指定User在Project下的Role。
Role:用於劃分許可權。可以通過給User指定Role,使User獲得Role對應的操作許可權。Keystone返回給User的Token包含了Role列表,被訪問的Services會判斷訪問它的User和User提供的Token中所包含的Role。系統預設使用管理Role admin和成員Role _member_ 。
Policy:OpenStack對User的驗證除了OpenStack的身份驗證以外,還需要鑑別User對某個Service是否有訪問許可權。Policy機制就是用來控制User對Tenant中資源(包括Services)的操作許可權。對於Keystone service來說,Policy就是一個JSON檔案,預設是
Token:是一個字串表示,作為訪問資源的令牌。Token包含了在 指定範圍和有效時間內 可以被訪問的資源。EG. 在Nova中一個tenant可以是一些虛擬機器,在Swift和Glance中一個tenant可以是一些映象儲存,在Network中一個tenant可以是一些網路資源。Token一般被User持有。
Credentials:用於確認使用者身份的憑證
Authentication:確定使用者身份的過程
Service:Openstack service,即Openstack中執行的元件服務。
Endpoint:一個可以通過網路來訪問和定位某個Openstack service的地址,通常是一個URL。比如,當Nova需要訪問Glance服務去獲取image 時,Nova通過訪問Keystone拿到Glance的endpoint,然後通過訪問該endpoint去獲取Glance服務。我們可以通過Endpoint的region屬性去定義多個region。Endpoint 該使用物件分為三類:
- admin url –> 給admin使用者使用,Post:35357
- internal url –> OpenStack內部服務使用來跟別的服務通訊,Port:5000
- public url –> 其它使用者可以訪問的地址,Post:5000
建立完service後建立API EndPoint. 在openstack中,每一個service都有三種end points. Admin, public, internal。 Admin是用作管理用途的,如它能夠修改user/tenant(project)。 public 是讓客戶呼叫的,比如可以部署在外網上讓客戶可以管理自己的雲。internal是openstack內部呼叫的。三種endpoints 在網路上開放的許可權一般也不同。Admin通常只能對內網開放,public通常可以對外網開放internal通常只能對安裝有openstack對服務的機器開放。
V3新增
- Tenant 重新命名為 Project
- 添加了 Domain 的概念
- 添加了 Group 的概念
1.user
2.Credentials
Authentication 是 Keystone 驗證 User 身份的過程。User 訪問 OpenStack 時向 Keystone 提交使用者名稱和密碼形式的 Credentials,Keystone 驗證通過後會給 User 簽發一個 Token 作為後續訪問的 Credential。3.Token
Token 是由數字和字母組成的字串,User 成功 Authentication 後 Keystone 生成 Token 並分配給 User。- Token 用做訪問 Service 的 Credential
- Service 會通過 Keystone 驗證 Token 的有效性
- Token 的有效期預設是 24 小時
4.Project
5.service
OpenStack 的 Service 包括 Compute (Nova)、Block Storage (Cinder)、Object Storage (Swift)、Image Service (Glance) 、Networking Service (Neutron) 等。每個 Service 都會提供若干個 Endpoint,User 通過 Endpoint 訪問資源和執行操作6.Endpoint
Endpoint 是一個網路上可訪問的地址,通常是一個 URL。Service 通過 Endpoint 暴露自己的 API。 Keystone 負責管理和維護每個 Service 的 Endpoint。可以使用下面的命令來檢視 Endpoint。
source devstack/openrc admin admin # openstack catalog list
7.Role
安全包含兩部分:Authentication(認證)和 Authorization(鑑權) Authentication 解決的是“你是誰?”的問題 Authorization 解決的是“你能幹什麼?”的問題 Keystone 藉助 Role 實現 Authorization: 1. Keystone定義Role 2. 可以為 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。
8.Troubleshoot
OpenStack 排查問題的方法主要是通過日誌。 每個 Service 都有自己的日誌檔案。 Keystone 主要有兩個日誌: keystone.log 和 keystone_access.log,儲存在 /var/log/apache2/ 目錄裡。 devstack 的 screen 視窗已經幫我們打開了這兩個日誌。 可以直接檢視: 如果需要得到最詳細的日誌資訊,可以在 /etc/keystone/keystone.conf 中開啟 debug 選項 在非 devstack 安裝中,日誌可能在 /var/log/keystone/ 目錄裡。三 基本架構
- 使用者alice登入keystone系統(password或者token的方式),獲取一個臨時的token和catalog服務目錄(v3版本登入時,如果沒有指定scope,project或者domain,獲取的臨時token沒有任何許可權,不能查詢project或者catalog)。
- alice通過臨時token獲取自己的所有的project列表。
- alice選定一個project,然後指定project重新登入,獲取一個正式的token,同時獲得服務列表的endpoint,使用者選定一個endpoint,在HTTP訊息頭中攜帶token,然後傳送請求(如果使用者知道project name或者project id可以直接第3步登入)。
- 訊息到達endpoint之後,由服務端(nova)的keystone中介軟體(pipeline中的filter:authtoken)向keystone傳送一個驗證token的請求。(token型別:uuid需要在keystone驗證token,pki型別的token本身是包含使用者詳細資訊的加密串,可以在服務端完成驗證)
- keystone驗證token成功之後,將token對應使用者的詳細資訊,例如:role,username,userid等,返回給服務端(nova)。
- 服務端(nova)完成請求,例如:建立虛擬機器。
- 服務端返回請求結果給alice。
四 通過列子認識keystone 架構
我們通過“查詢可用 image”這個實際操作讓大家對這些概念建立更加感性的認識。User admin 要檢視 Project 中的 image 第 1 步 登入 當點選 時,OpenStack 內部發生了哪些事情?請看下面 第 2 步 顯示操作介面 這是因為 admin 已經從 Keystone 拿到了各 Service 的 Endpoints 第 3 步 顯示 image 列表五 kyesdone 配置檔案
vim /etc/ keystone / keystone.conf [DEFAULT] [assignment] [auth] [cache] [catalog] [cors] [cors.subdomain] [credential] [database] connection = mysql+ pymysql://keystone:[email protected]/keystone [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]<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">