天天看點

Keystone 認證服務

  1. 項目介紹​Keystone是Openstack架構中負責身份認證、服務管理、服務規則和服務令牌的功能,它實作了Openstack的Identity API。​Keystone是整個openstack架構的系統資料庫,其他服務通過keystone來注冊其服務的endpoint,任何服務之間互相的調用,都需要經過keystone的身份驗證來獲得目标服務的endpoint來找到目标服務。Keystone主要包含兩個主要部件:驗證、權限和服務目錄。​
  2. 基本概念​User使用者,表示擁有使用者名,密碼,郵箱等帳号資訊的個人​Tenant租戶,它是各個服務中的一些可以通路的資源集合。可以了解為一個項目,預設user是綁定在Tenant上的。​Role 角色,代表使用者可以通路的資源權限。Users可以被添加到任意一個全局的 或 租戶内的角色中。在全局的role中,使用者的role權限作用于所有的租戶,即可以對所有的租戶執行role規定的權限;在租戶内的role中,使用者僅能在目前租戶内執行role規定的權限。​Service服務,一個openstack的服務,例如nova,swift等。通常用不同的名稱來表示不同的服務。 ​Endpoint端點,一個可以通過網絡通路的位址,即服務通路的URL。具有public,private,admin三種權限。​Token 令牌,是一把特殊的鑰匙。使用者通過使用者名和密碼擷取某個租戶的令牌,可以實作單點登入。​Template 模版,一個端點集合,代表一組可用的openstack服務端點。​
  3. 認證服務的流程
  1. 使用者名通過自己的使用者名和密碼向keystone申請令牌token,keystone認證其使用者名和密碼後,若正确則傳回一個token1。​
  2. 使用者攜帶token1向keystone申請查詢其所擁有的租戶,keystone認證token1後,傳回其擁有的所有租戶的tenant資訊。​
  3. 使用者選擇一個租戶,通過使用者名和密碼向keystone申請令牌token,keystone認證使用者名,密碼和租戶後,傳回token2。(前兩步是為了查詢使用者所擁有的租戶資訊的,如果已經知道租戶資訊,則省略前兩步)。​
  4. 使用者攜帶token2向keystone發送提供服務的請求,keystone認證token2後(包括此token是否有效,是否有建立服務的權限等等),把請求下發到相應的服務,服務按照需求執行相應的操作并把執行結果傳回給使用者。​ 從上面的流程得知,使用者是從keystone擷取令牌和服務清單。并在通路某個服務的時候提供自己的token,然後此服務向keystone求證所攜帶token的合法性。​
  5. 配置認證服務所需要的資料庫首先在資料庫中建立名為keystone的資料庫:

然後授權keystone使用者對keystone庫擁有完全權限:​

Keystone 認證服務
  1. 安裝keystone軟體包

啟動memcached服務​

Keystone 認證服務

修改keystone的配置檔案/etc/keystone/keystone.conf​

a.在[DEFAULT]中,設定admin的token​

Keystone 認證服務

注:随機碼用openssl rand –hex 10 生成​

b.在[database]中,設定資料庫授權​

Keystone 認證服務

c.在[memcache]中,設定memcache-server​

Keystone 認證服務

d.在[token]中,配置UUID token和memcache driver​

Keystone 認證服務

e.在[revoke]中,配置SQL的撤銷​

Keystone 認證服務

填充認證服務資料庫​

Keystone 認證服務
  1. 配置HTTP服務修改http配置檔案/etc/httpd/conf/httpd.conf,設定服務主機名

建立/etc/httpd/conf.d/wsgi-keystone.conf檔案,并寫入以下的行:​

Keystone 認證服務

建立WSGI結構目錄​

Keystone 認證服務

切換到上面的目錄下,然後下載下傳main和admin的檔案,其實兩個檔案是一樣的。​

Keystone 認證服務

設定該目錄的權限和屬組​

Keystone 認證服務

啟動http服務和開機自啟​

Keystone 認證服務
  1. 建立服務實體和API endpoint首先建立認證token和endpoint:

為認證服務建立服務實體:​

Keystone 認證服務

Openstack為每個服務建立了三個API endpoint:admin,internal,public。Admin的endpoint預設是可以修改使用者和租戶的,而其餘的是不可以的。這樣分開也是為了安全考慮。另外,openstack為了擴充性還支援多區域,預設使用RegionOne區域。​

建立認證服務的API endpoint:​

Keystone 認證服務

注:每個openstack的服務都必須在認證服務中有一個服務的實體和API endpoint​

  1. 建立租戶、使用者、角色建立admin租戶

建立admin使用者​

Keystone 認證服務

建立admin的角色​

Keystone 認證服務

添加admin的角色到admin的租戶和使用者中​

Keystone 認證服務

建立一個service的租戶,用來存放openstack的各種服務:​

Keystone 認證服務

建立一個普通租戶demo:​

Keystone 認證服務

建立demo的使用者​

Keystone 認證服務

建立角色user​

Keystone 認證服務

添加角色user到demo租戶和使用者中:​

Keystone 認證服務
  1. 認證服務的搭建​
  2. 認證服務的驗證​

為了安全考慮,禁用臨時認證token,修改/usr/share/keystone/keystone-dist-paste.ini​

删除[pipeline:public_api],[pipeline:admin_api],[pipeline:api_v3]區域中的admin_token_auth​

取消OS_TOKEN和OS_URL的定義 OS_TOKEN OS_URL​

作為admin使用者,請求一個認證token​

Keystone 認證服務

為了支援版本3的API,要求至少包含default域或者使用ID:​

Keystone 認證服務

作為admin請求租戶清單;​

Keystone 認證服務

作為admin請求使用者清單:​

Keystone 認證服務

作為admin請求角色清單:​

Keystone 認證服務

作為demo使用者向API v3請求token:​

Keystone 認證服務

作為demo使用者不能操作admin使用者的指令。​

建立環境腳本admin-openrc.sh和demo-openrc.sh​

admin-openrc.sh​

Keystone 認證服務

Demo-openrc.sh​

Keystone 認證服務

驗證環境腳本;​

Keystone 認證服務

到此keystone服務搭建完畢。​