1. 程式人生 > >Keystone— 身份認證服務

Keystone— 身份認證服務


1.keystone

一.Keystone 做下面這幾件事情:

    1、管理使用者及其許可權

    2、維護 OpenStack Services Endpoint

    3Authentication(認證)和 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檔案,預設是

/etc/keystone/policy.json。通過配置這個檔案,Keystone Service實現了對User基於Role的許可權管理。

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 是讓客戶呼叫的,比如可以部署在外網上讓客戶可以管理自己的雲。internalopenstack內部呼叫的。三種endpoints 在網路上開放的許可權一般也不同。Admin通常只能對內網開放,public通常可以對外網開放internal通常只能對安裝有openstack對服務的機器開放。

V3新增

 

  • Tenant 重新命名為 Project
  • 添加了 Domain 的概念
  • 添加了 Group 的概念

 

 

User( 用 戶 ) :  用 於 身 份 認 證 , 一 個 用 戶 可 以 關 聯 至 刂 多 個 租 戶  Tenant( 租 戶 ) :  相 當 於 用 戶 組 的 概 念 。 一 個 租 戶 可 以 容 納 多 個 用 戶  R e ( 角 色 ) :  關 聯 到 “ 用 戶 · 租 戶 對 ” 的 元 數 據 。 可 以 關 聯 到 多 個 “ 用 戶 . 租 戶 對 ”  Token( 令 牌 ) :  用 於 驗 證 用 戶 或 者 “ 用 戶 一 租 戶 對 ” 的 請 求 是 否 合 法 。  Service( 月 及 務 ) :  服 務 類 型 和 名 稱 。  Endpoint( 端 點 ) :  服 務 的 實 例 ( URL 入 口 ) 。

1.user

2.Credentials

Authentication 是 Keystone 驗證 User 身份的過程。User 訪問 OpenStack 時向 Keystone 提交使用者名稱和密碼形式的 Credentials,Keystone 驗證通過後會給 User 簽發一個 Token 作為後續訪問的 Credential。

3.Token

Token 是由數字和字母組成的字串,User 成功 Authentication 後 Keystone 生成 Token 並分配給 User。
  1. Token 用做訪問 Service 的 Credential
  2. Service 會通過 Keystone 驗證 Token 的有效性
  3. 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/ 目錄裡。

 三 基本架構

Keystone  token  backend  •Token:  •Catalog:  •Identity:  •Polic :  Keystone Service  catalog  backend  identity  backend  policy  backend wKioL1fH_9Tz46AGAANXnjXPEPA500.png  
  1. 使用者alice登入keystone系統(password或者token的方式),獲取一個臨時的token和catalog服務目錄(v3版本登入時,如果沒有指定scope,project或者domain,獲取的臨時token沒有任何許可權,不能查詢project或者catalog)。
  2. alice通過臨時token獲取自己的所有的project列表。
  3. alice選定一個project,然後指定project重新登入,獲取一個正式的token,同時獲得服務列表的endpoint,使用者選定一個endpoint,在HTTP訊息頭中攜帶token,然後傳送請求(如果使用者知道project name或者project id可以直接第3步登入)。
  4. 訊息到達endpoint之後,由服務端(nova)的keystone中介軟體(pipeline中的filter:authtoken)向keystone傳送一個驗證token的請求。(token型別:uuid需要在keystone驗證token,pki型別的token本身是包含使用者詳細資訊的加密串,可以在服務端完成驗證)
  5. keystone驗證token成功之後,將token對應使用者的詳細資訊,例如:role,username,userid等,返回給服務端(nova)。
  6. 服務端(nova)完成請求,例如:建立虛擬機器。
  7. 服務端返回請求結果給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;">

       



來自為知筆記(Wiz)