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]
[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;">






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM