1. 程式人生 > >OpenStack雲端計算與虛擬化—認證篇

OpenStack雲端計算與虛擬化—認證篇

  KeyStone概述

OpenStack Identity服務提供單點整合,用於管理身份驗證,授權和服務目錄。

身份驗證服務通常是使用者與之互動的第一個服務。經過身份驗證後,終端使用者可以使用其身份訪問其他OpenStack服務。同樣,其他OpenStack服務利用身份服務來確保使用者是他們所說的人,並發現部署中的其他服務。Identity服務還可以與某些外部使用者管理系統(例如LDAP)整合。

使用者和服務可以使用由Identity服務管理的服務目錄來查詢其他服務。顧名思義,服務目錄是OpenStack部署中可用服務的集合。每個服務可以有一個或多個端點,每個端點可以是以下三種類型之一:admin,internal或public。在生產環境中,出於安全原因,不同的端點型別可能駐留在暴露給不同型別使用者的不同網路上。例如,公共API網路可能從Internet上可見,因此客戶可以管理他們的雲。管理API網路可能僅限於管理雲基礎架構的組織內的運營商。內部API網路可能僅限於包含OpenStack服務的主機。此外,OpenStack支援多個區域以實現可伸縮性。RegionOne區域。在身份服務中建立的區域,服務和端點一起構成部署的服務目錄。部署中的每個OpenStack服務都需要一個服務條目,並在Identity服務中儲存相應的端點。這可以在安裝和配置Identity服務之後完成。

Identity服務包含以下元件:

伺服器

一箇中心化的伺服器使用RESTful介面來提供認證和授權服務。

驅動程式

驅動或服務後端被整合進集中式伺服器中。它們被用來訪問OpenStack外部倉庫的身份資訊,並且它們可能已經存在於OpenStack被部署在的基礎設施(例如,SQL資料庫或LDAP伺服器)中。

模組

中介軟體模組運行於使用身份認證服務的OpenStack元件的地址空間中。這些模組攔截服務請求,取出使用者憑據,並將它們送入中央是伺服器尋求授權。中介軟體模組和OpenStack元件間的整合使用Python Web伺服器閘道器介面。

  KeyStone術語

  • User:使用者,它是用一個數字代表使用OpenStack雲服務的一個人、系統或者服務,身份驗證服務將會驗證傳入的由使用者申明呼叫的請求。

  • Project:專案,它是一個人或服務所擁有的資源集合。不同的專案之間資源是隔離的,資源可以設定配額,專案中可以有多個使用者,每一個使用者會根據許可權的劃分來使用專案中的資源,使用者在使用專案的資源前,必須要與這個專案關聯,並且制定使用者在專案下的角色,一個assignment(關聯) 即:Project-User-Role。

  • Token:令牌,它是一串數字字串,當用戶訪問資源時需要使用的東西,在keystone中主要是引入令牌機制來保護使用者對資源的訪問,同時引入PKI、PKIZ、fernet、UUID其中一個隨機加密產生一串數字,對令牌加以保護,token並不是長久有效的,是有時效性的,在有效的時間內可以訪問資源。

  • Role:角色,它是一堆ACL集合,主要用於許可權的劃分,例如Nova中的虛擬機器、Glance中的映象,可以給User指定Role,是user獲得role對應的操作許可權,系統預設使用管理Role的角色 管理員使用者admin,在老版本中普通使用者是member,而新版本則是user。

  • Service:服務,它是一個通訊簿,一個服務可以確認當前使用者是否具有訪問其資源的許可權,但是當一個使用者嘗試著訪問其專案內的服務時,他必須知道這個服務是否存在,以及如何聯絡。

  • Endpoint:端點,它是用來通過訪問和定位某個openstack service的地址,通常是一個URL,我們也可以理解為它是一個暴露出來的訪問點,如果需要訪問一個服務,則必須知道他的端點,端點的每一個Url都對應一個服務例項的訪問地址,並且具有public、private和admin這三種許可權,public url可以被全域性訪問,預設埠為5000,private url只能被區域網訪問,預設埠為5000,admin url可以被從常規的訪問中分離,預設埠為35357。

  V3版本

  1. Tenant更改為Project,即租戶改為專案

  2. 添加了域的概念Domain(對系統資源進行限額)

  3. 添加了組的概念Group(為了更好的管理使用者,例如linux下對組授權,其組下面的使用者也有了相應的許可權)

  4. 普通使用者member更改為user

  KeyStone認證流程

使用者通過api介面想建立一個例項,首先會將自己的相關資訊發給keystone。認證成功後,keystone會頒給使用者一個臨時的令牌(Token)和一個訪問服務的地址(Endpoint)。使用者把臨時令牌(Token)提交給keystone,keystone並返回一個專案(Project),使用者向keystone傳送帶有特定專案憑證,告訴keystone使用者在哪個專案中,keystone收到請求後,會發送一個專案的token到使用者,使用者拿著令牌(Token)和一個訪問服務的地址(Endpoint)找到可訪問服務,服務向keystone進行認證,令牌(Token)是否合法,它允許訪問使用該服務(判斷使用者中角色(Role)許可權),keystone向服務提供額外的資訊。使用者是允許方法服務,這個令牌(Token)匹配請求,這個令牌(Token)是使用者的,服務執行使用者發起的請求,建立例項,服務會將狀態報告給使用者,最後返回結果,例項已經建立。

  安裝和配置

1.在安裝和配置Identity服務之前,必須建立資料庫

MariaDB [(none)]> CREATE DATABASE keystone;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY '123';
MariaDB [(none)]> flush privileges;

2.執行以下命令來安裝包

[[email protected] ~]# yum install -y openstack-keystone httpd mod_wsgi

3.編輯檔案/etc/keystone/keystone.conf並完成如下動作

#在[database]部分,配置資料庫訪問
[database]
# ...
connection = mysql+pymysql://keystone:[email protected]/keystone

#在[token]部分,配置Fernet UUID令牌的提供者
[token]
# ...
provider = fernet

4.初始化身份認證服務的資料庫

[[email protected] ~]# su -s /bin/sh -c "keystone-manage db_sync" keystone

5.初始化Fernet key

[[email protected] ~]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
[[email protected] ~]# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone

6.建立管理員賬戶與引導身份服務

[[email protected] ~]# keystone-manage bootstrap --bootstrap-password 123 --bootstrap-admin-url http://192.168.137.51:35357/v3/ --bootstrap-internal-url http://192.168.137.51:5000/v3/ --bootstrap-public-url http://192.168.137.51:5000/v3/ --bootstrap-region-id RegionOne

7.編輯/etc/httpd/conf/httpd.conf檔案,配置ServerName選項為控制節點

ServerName 192.168.137.51:80

8.建立一個連結到/usr/share/keystone/wsgi-keystone.conf檔案

[[email protected] ~]# ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/

9.啟動 Apache HTTP 服務並配置其隨系統啟動

[[email protected] ~]# systemctl enable httpd.service
[[email protected] ~]# systemctl start httpd.service

到這裡為止我們基本安裝已經完成,啟動Apache服務後我們可以看到三個埠:80、35357、5000,當然,我們也可以檢視/usr/share/keystone/wsgi-keystone.conf檔案使用的埠分別有哪些和指向到了什麼目錄下

10.配置admin賬戶

[[email protected] ~]# export OS_USERNAME=admin
[[email protected] ~]# export OS_PASSWORD=123
[[email protected] ~]# export OS_PROJECT_NAME=admin
[[email protected] ~]# export OS_USER_DOMAIN_NAME=Default
[[email protected] ~]# export OS_PROJECT_DOMAIN_NAME=Default
[[email protected] ~]# export OS_AUTH_URL=http://192.168.137.51:35357/v3
[[email protected] ~]# export OS_IDENTITY_API_VERSION=3

  建立域、專案、使用者和角色

Identity服務為每個OpenStack服務提供身份驗證服務。身份驗證服務使用域,專案,使用者和 角色的組合。

1.建立Service Project,後續服務都加入到這個專案中

[[email protected] ~]# openstack project create --domain default --description "Service Project" service
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Service Project                  |
| domain_id   | default                          |
| enabled     | True                             |
| id          | a6306dfc6ac944b48fdaed30fdc0daf1 |
| is_domain   | False                            |
| name        | service                          |
| parent_id   | default                          |
+-------------+----------------------------------+

2.常規(非管理)任務應該使用無特權的專案和使用者,作為展示建立demo專案和使用者

#建立demo專案
[[email protected] ~]# openstack project create --domain default --description "Demo Project" demo
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Demo Project                     |
| domain_id   | default                          |
| enabled     | True                             |
| id          | 243522d50796454f9909333176175676 |
| is_domain   | False                            |
| name        | demo                             |
| parent_id   | default                          |
+-------------+----------------------------------+

#建立demo使用者
[[email protected] ~]# openstack user create --domain default --password-prompt demo
User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | default                          |
| enabled             | True                             |
| id                  | e375ef47b2ab49b3b73374cd5790fb19 |
| name                | demo                             |
| options             | {}                               |
| password_expires_at | None                             |
+---------------------+----------------------------------+

#建立user角色
[[email protected] ~]# openstack role create user
+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | None                             |
| id        | e76183c8e18e4cba8dacf66117772162 |
| name      | user                             |
+-----------+----------------------------------+

#將user角色新增到專案demo使用者demo
[[email protected] ~]# openstack role add --project demo --user demo user

  驗證操作

1.撤銷臨時環境變數OS_AUTH_URLOS_PASSWORD

[[email protected] ~]# unset OS_AUTH_URL OS_PASSWORD

2.測試admin使用者

[[email protected] ~]# openstack --os-auth-url http://192.168.137.51:35357/v3 --os-project-domain-name default --os-user-domain-name default --os-project-name admin --os-username admin token issue
+------------+-------------------------------------------------------------------------------------------------------------------------+
| Field      | Value                                                                                                                   |
+------------+-------------------------------------------------------------------------------------------------------------------------+
| expires    | 2018-11-26T00:10:11+0000                                                                                                |
| id         | gAAAAABb-yvTfoMZaD72e5NwuiwRSeppwjBYVs3n8UKFGwCyTD0LXRm2nCAUDeAnfmL39d1gmPCAAYsUXVuxI1OXLTscT-                          |
|            | JOwnYWFty0W3KbhvShrufSxr45OhYMKIL88gNu__wLxKq9K_YBRmLF7VyRvoJ_0kVxo7HFUlKvmLKvtU5XdnEPTKA                               |
| project_id | 2013d449ba6d4cd8a3d69cee893e6ab9                                                                                        |
| user_id    | b0bed0d065a54f23b9de7f2332a8be45                                                                                        |
+------------+-------------------------------------------------------------------------------------------------------------------------+

3.測試demo使用者

[[email protected] ~]# openstack --os-auth-url http://192.168.137.51:5000/v3 --os-project-domain-name default --os-user-domain-name default --os-project-name demo --os-username demo token issue
+------------+-------------------------------------------------------------------------------------------------------------------------+
| Field      | Value                                                                                                                   |
+------------+-------------------------------------------------------------------------------------------------------------------------+
| expires    | 2018-11-26T00:11:36+0000                                                                                                |
| id         | gAAAAABb-ywoYRmxBMTuAQeBqoA7gmdXA8i-i4vpULGy4Mwe-_2tJEq4237eEq6z67aIrAXbDpBlpRTyGv5XitBhFfw7CR9jfCR1eHDcpMaKvOoyIpMIaAB |
|            | sehsPGUQbZivTx9vtpa4jgOR_7bTRyaMB2GfWtj43XxodYBso_dTfRRm0TFu2YJE                                                        |
| project_id | 243522d50796454f9909333176175676                                                                                        |
| user_id    | e375ef47b2ab49b3b73374cd5790fb19                                                                                        |
+------------+-------------------------------------------------------------------------------------------------------------------------+

  建立OpenStack客戶端環境指令碼

1.建立admin使用者環境指令碼

[[email protected] ~]# vim admin-openrc
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=123
export OS_AUTH_URL=http://192.168.137.51:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

2.建立demo使用者環境指令碼

[[email protected] ~]# vim demo-openrc
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=demo
export OS_USERNAME=demo
export OS_PASSWORD=123
export OS_AUTH_URL=http://192.168.137.51:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

3.測試使用

[[email protected] ~]# . admin-openrc 

[[email protected] ~]# openstack token issue
+------------+-------------------------------------------------------------------------------------------------------------------------+
| Field      | Value                                                                                                                   |
+------------+-------------------------------------------------------------------------------------------------------------------------+
| expires    | 2018-11-26T00:16:31+0000                                                                                                |
| id         | gAAAAABb-y1PSG-I6pxr7zJLN5MfFZkvENLgFCjVSWIDJp4_9e7uyiUurdAiB3Z32K5ANiZCEZr5ZfHxBixZKUshAAs-                            |
|            | 35qKInUc3M1a37zgUPlkjaxbP3NUk4zZYYFkdKRFr_c8Dbn45vrKHWuSDVnpJNrmkTILcnj72PMgkUuM5IRgcXho87w                             |
| project_id | 2013d449ba6d4cd8a3d69cee893e6ab9                                                                                        |
| user_id    | b0bed0d065a54f23b9de7f2332a8be45                                                                                        |
+------------+-------------------------------------------------------------------------------------------------------------------------+