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版本
Tenant更改為Project,即租戶改為專案
添加了域的概念Domain(對系統資源進行限額)
添加了組的概念Group(為了更好的管理使用者,例如linux下對組授權,其組下面的使用者也有了相應的許可權)
普通使用者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_URL
和OS_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 | +------------+-------------------------------------------------------------------------------------------------------------------------+