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

  KeyStone概述

OpenStack Identity服務提供單點集成,用於管理身份驗證,受權和服務目錄。mysql

身份驗證服務一般是用戶與之交互的第一個服務。通過身份驗證後,最終用戶可使用其身份訪問其餘OpenStack服務。一樣,其餘OpenStack服務利用身份服務來確保用戶是他們所說的人,並發現部署中的其餘服務。Identity服務還能夠與某些外部用戶管理系統(例如LDAP)集成。linux

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

Identity服務包含如下組件:數據庫

服務器bootstrap

一箇中心化的服務器使用RESTful接口來提供認證和受權服務。vim

驅動程序後端

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

模塊安全

中間件模塊運行於使用身份認證服務的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.運行如下命令來安裝包

[root@controller ~]# yum install -y openstack-keystone httpd mod_wsgi

3.編輯文件/etc/keystone/keystone.conf並完成以下動做

#在[database]部分,配置數據庫訪問
[database]
# ...
connection = mysql+pymysql://keystone:123@192.168.137.51/keystone

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

4.初始化身份認證服務的數據庫

[root@controller ~]# su -s /bin/sh -c "keystone-manage db_sync" keystone

5.初始化Fernet key

[root@controller ~]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
[root@controller ~]# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone

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

[root@controller ~]# 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文件

[root@controller ~]# ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/

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

[root@controller ~]# systemctl enable httpd.service
[root@controller ~]# systemctl start httpd.service

到這裏爲止咱們基本安裝已經完成,啓動Apache服務後咱們能夠看到三個端口:80、3535七、5000,固然,咱們也能夠查看/usr/share/keystone/wsgi-keystone.conf文件使用的端口分別有哪些和指向到了什麼目錄下

10.配置admin帳戶

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

  建立域、項目、用戶和角色

Identity服務爲每一個OpenStack服務提供身份驗證服務。身份驗證服務使用域,項目,用戶和 角色的組合。

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

[root@controller ~]# 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項目
[root@controller ~]# 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用戶
[root@controller ~]# 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角色
[root@controller ~]# openstack role create user
+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | None                             |
| id        | e76183c8e18e4cba8dacf66117772162 |
| name      | user                             |
+-----------+----------------------------------+

#將user角色添加到項目demo用戶demo
[root@controller ~]# openstack role add --project demo --user demo user

  驗證操做

1.撤銷臨時環境變量OS_AUTH_URLOS_PASSWORD

[root@controller ~]# unset OS_AUTH_URL OS_PASSWORD

2.測試admin用戶

[root@controller ~]# 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用戶

[root@controller ~]# 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用戶環境腳本

[root@controller ~]# 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用戶環境腳本

[root@controller ~]# 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.測試使用

[root@controller ~]# . admin-openrc 

[root@controller ~]# 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                                                                                        |
+------------+-------------------------------------------------------------------------------------------------------------------------+
相關文章
相關標籤/搜索