1. 程式人生 > >Openstack之路(二)認證服務Keystone

Openstack之路(二)認證服務Keystone

yum 依賴 配置環境變量 wap iad admin dom 校驗 server

Keystone的概述

Keystone是Openstack的組件之一,用於為Openstack家族中的其它組件成員提供統一的認證服務,包括身份驗證,令牌的發放和校驗,服務列表,用戶權限的定義等。Openstack中任何組件均依賴與Keystone提供的服務。

Keystone的功能

用戶與認證

用戶權限與用戶行為追蹤。

服務目錄

為每個組件服務提供一個可用的服務目錄和相應的API入口端點。

Keystone基本概念

User

顧名思義就是使用服務(Openstack Service)的用戶,可以是人、服務或者是系統,只要是使用了Openstack服務的對象都可以稱為用戶。

Project

租戶,可以理解為一個人、項目或者組織擁有的資源的合集。在一個租戶中可以擁有很多個用戶,這些用戶可以根據權限的劃分使用租戶中的資源。

Token

指的是一串比特值或者字符串,用來作為訪問資源的令牌。Token中含有可訪問資源的範圍和有效時間。

Role

角色,用於分配操作的權限。角色可以被指定給用戶,使得該用戶獲得角色對應的操作權限。

Service

Openstack Service,即Openstack中運行的組件服務。

Endpoint

一個可以通過網絡來訪問和定位某個Openstack Service的地址,通常是一個URL。例如,Nova需要訪問Glance服務去獲取Image時,Nova通過訪問Keystone拿到Glance的Endpoint,然後通過訪問該Endpoint去獲取Glance服務,我們可以通過Endpoint的region屬性去定義多個region。Endpoint該使用對象分為三類:

  1. Admin URL:給admin用戶使用,被從常規的訪問中分離。
  2. Internal URL:Openstack內部服務使用來跟別的服務通信,只能被局域網訪問。
  3. Public URL:其它用戶可以訪問的地址,可以被全局訪問。

Credentials

用於確認用戶身份的憑證。

Authentication

確定用戶身份的過程。

Keystone形象比喻

如果把賓館比作為Openstack,那麽賓館的中央管理系統就是Keystone,入住賓館的人就是User 。在賓館中擁有很多不同的房間,房間提供了不同的服務(Service)。

在入住賓館前,User需要給出×××(Credential),中央管理系統(Keystone)在確認User的身份後(Authenticaiton),會給你一個房卡(Token)和導航地圖(Endpoint)。

不同VIP(Role)級別的User,擁有不同權限的房卡(Token),如果你的VIP(Role)等級高,你可以享受到豪華的總統套房。

User拿著房卡(Token)和地圖(Endpoint),就可以進入特定的房間去享受不同的Services。每一個服務(Services)中都擁有著一些特定資源(Project),例如,×××中可以使用的精油種類和數量。User可以根據自己的權限來使用這些資源。

Keystone與其它服務的交互

技術分享圖片

Keystone安裝配置

Keystone的安裝

  • 創建一個數據庫和管理員令牌
MariaDB [(none)]> create database keystone;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| keystone           |
| mysql              |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)

MariaDB [(none)]> grant all on keystone.* to ‘keystone‘@‘localhost‘ identified by ‘keystone‘;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> grant all on keystone.* to ‘keystone‘@‘%‘ identified by ‘keystone‘;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> exit
Bye
  • 安裝Keystone相關軟件包
[root@linux-node1 ~]# yum -y install openstack-keystone httpd mod_wsgi
[root@linux-node1 ~]# rpm -qa openstack-keystone httpd mod_wsgi
mod_wsgi-3.4-12.el7_0.x86_64
openstack-keystone-10.0.3-1.el7.noarch
httpd-2.4.6-67.el7.centos.6.x86_64

Keystone的配置

  • 編輯/etc/keystone/keystone.conf文件,並完成如下更改
[root@linux-node1 ~]# cp -a /etc/keystone/keystone.conf /etc/keystone/keystone.conf_$(date +%F)
[root@linux-node1 ~]# vim /etc/keystone/keystone.conf

[database]部分,配置數據庫訪問

[database]
......
640 connection = mysql+pymysql://keystone:[email protected]/keystone

[memcache]部分,配置緩存服務

[memcache]
......
1476 servers = 192.168.56.11:11211

[token]部分,配置Fernet UUID令牌的提供者

[token]
.....
2659 provider = fernet
2669 driver = memcache
  • 初始化身份認證服務的數據庫
[root@linux-node1 ~]# su -s /bin/sh -c "keystone-manage db_sync" keystone
[root@linux-node1 ~]# mysql -ukeystone -pkeystone -e "use keystone;show tables"
  • 初始化Fernet key
[root@linux-node1 ~]# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
[root@linux-node1 ~]# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
  • 創建身份服務API端點
[root@linux-node1 ~]# keystone-manage bootstrap --bootstrap-password admin --bootstrap-admin-url http://192.168.56.11:35357/v3/ --bootstrap-internal-url http://192.168.56.11:35357/v3/ --bootstrap-public-url http://192.168.56.11:5000/v3/ --bootstrap-region-id RegionOne
  • 配置Apache HTTP服務器

編輯/etc/httpd/conf/httpd.conf文件,配置ServerName選項為控制節點

[root@linux-node1 ~]# vim /etc/httpd/conf/httpd.conf
95 ServerName 192.168.56.11:80

創建一個鏈接到/usr/share/keystone/wsgi-keystone.conf文件

[root@linux-node1 ~]# ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
[root@linux-node1 ~]# ls -l /etc/httpd/conf.d/wsgi-keystone.conf
lrwxrwxrwx 1 root root 38 Jan 11 15:55 /etc/httpd/conf.d/wsgi-keystone.conf -> /usr/share/keystone/wsgi-keystone.conf

啟動httpd,並配置為開機自啟

[root@linux-node1 ~]# systemctl enable httpd.service
[root@linux-node1 ~]# systemctl start httpd.service
[root@linux-node1 ~]# systemctl status httpd.service
  • 配置admin賬戶,配置環境變量,臨時生效
[root@linux-node1 ~]# export OS_USERNAME=admin
[root@linux-node1 ~]# export OS_PASSWORD=admin
[root@linux-node1 ~]# export OS_PROJECT_NAME=admin
[root@linux-node1 ~]# export OS_USER_DOMAIN_NAME=Default
[root@linux-node1 ~]# export OS_PROJECT_DOMAIN_NAME=Default
[root@linux-node1 ~]# export OS_AUTH_URL=http://192.168.56.11:35357/v3
[root@linux-node1 ~]# export OS_IDENTITY_API_VERSION=3
  • 創建項目、域、用戶和角色

創建service項目

[root@linux-node1 ~]# openstack project create --domain default --description "Service Project" service
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Service Project                  |
| domain_id   | default                          |
| enabled     | True                             |
| id          | afc19f08df4948989710d453c4ee45d0 |
| is_domain   | False                            |
| name        | service                          |
| parent_id   | default                          |
+-------------+----------------------------------+

常規(非管理)任務應該使用無特權的項目和用戶,創建demo項目和用戶

[root@linux-node1 ~]# openstack project create --domain default --description "Demo Project" demo
+-------------+----------------------------------+
| Field       | Value                            |
+-------------+----------------------------------+
| description | Demo Project                     |
| domain_id   | default                          |
| enabled     | True                             |
| id          | e10068ee83dc464683ff232494d30d39 |
| is_domain   | False                            |
| name        | demo                             |
| parent_id   | default                          |
+-------------+----------------------------------+

[root@linux-node1 ~]# openstack user create --domain default --password-prompt demo
User Password:
Repeat User Password:
+---------------------+----------------------------------+
| Field               | Value                            |
+---------------------+----------------------------------+
| domain_id           | default                          |
| enabled             | True                             |
| id                  | 903b9cf22cd248729fb770feb56a71c5 |
| name                | demo                             |
| password_expires_at | None                             |
+---------------------+----------------------------------+

創建user角色

[root@linux-node1 ~]# openstack role create user
+-----------+----------------------------------+
| Field     | Value                            |
+-----------+----------------------------------+
| domain_id | None                             |
| id        | 145f27cc922b449694d0bf6e1b8b85c7 |
| name      | user                             |
+-----------+----------------------------------+

添加user角色到demo項目和用戶

[root@linux-node1 ~]# openstack role add --project demo --user demo user

Keystone驗證操作

  • 因為安全性的原因,關閉臨時認證令牌機制,撤銷臨時環境變量OS_AUTH_URL和OS_PASSWORD
[root@linux-node1 ~]# unset OS_AUTH_URL OS_PASSWORD
  • 作為admin用戶,請求認證令牌
[root@linux-node1 ~]# openstack --os-auth-url http://192.168.56.11:35357/v3 --os-project-domain-name Default --os-user-domain-name Default --os-project-name admin --os-username admin token issue
Password:
+------------+------------------------------------------------------------------------------------+
| Field      | Value                                                                              |
+------------+------------------------------------------------------------------------------------+
| expires    | 2018-01-11 10:22:42+00:00                                                          |
| id         | gAAAAABaVyziT1-asUKbU77tMkmfxqEW2zjEUmAYbLVMP5IKhiSbIJfcz0hCLITQjUA_em52ME0aedkKwm |
|            | _G3ab_ts0H45rt3Jq72-1Rt_ldRaTdXGDwuuKxs_Dr4SaocAfjcqAf3mWQwiRVb7vctxfd-            |
|            | vYzFCt_IhEoCQXHEuARRGOdZ_T1GtU                                                     |
| project_id | 71c9b608e79546f4b90f710fea475de3                                                   |
| user_id    | fa4237d31d5145f78b87a29fbcc7ec0c                                                   |
+------------+------------------------------------------------------------------------------------+
  • 作為demo用戶,請求認證令牌
[root@linux-node1 ~]# openstack --os-auth-url http://192.168.56.11:5000/v3 --os-project-domain-name Default --os-user-domain-name Default --os-project-name demo --os-username demo token issue
Password: 
+------------+------------------------------------------------------------------------------------+
| Field      | Value                                                                              |
+------------+------------------------------------------------------------------------------------+
| expires    | 2018-01-11 10:24:22+00:00                                                          |
| id         | gAAAAABaVy1G0siKGf2BRNHd98ZBK55nf0Z3Iu1SitjV7WAvzKJ0y2NekH_1yid_AMoFCThaEnVwSldRf_ |
|            | K9jAuvvc3sy1kQE0zlgZShn6vY-k6qaS_xyN0U0WnCHJst4eDLEQDNZzFDY-                       |
|            | 6XmdwxdwicBQwyIIlrXrmIfVPvpDn5VVxOyCG3ZKo                                          |
| project_id | e10068ee83dc464683ff232494d30d39                                                   |
| user_id    | 903b9cf22cd248729fb770feb56a71c5                                                   |
+------------+------------------------------------------------------------------------------------+

Openstack客戶端環境腳本

  • 創建腳本

編輯admin-openrc文件並且增加以下內容

[root@linux-node1 ~]# 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=admin
export OS_AUTH_URL=http://192.168.56.11:35357/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2

編輯文件demo-openrc並添加如下內容

[root@linux-node1 ~]# 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=demo
export OS_AUTH_URL=http://192.168.56.11:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
  • 使用腳本

加載admin-openrc文件來身份認證服務的環境變量位置和admin項目和用戶證書

[root@linux-node1 ~]# source admin-openrc

請求認證令牌

[root@linux-node1 ~]# openstack token issue
+------------+------------------------------------------------------------------------------------+
| Field      | Value                                                                              |
+------------+------------------------------------------------------------------------------------+
| expires    | 2018-01-15 05:09:39+00:00                                                          |
| id         | gAAAAABaXCmDx9x7k_ZU0gCh2qCnfEv0Z4P8MoGWEkUeC19cNKBEEVviW9DV3OM3O53gm3OzJZ_4Wf8OJx |
|            | Q8ErmFV3qUF7GMzfVbCkwaPJAIPQWveopglMWdhKuT4IYNWBQV_frC69agmGKw1NIGSeNgQgdlGkrn7kzQ |
|            | 2u-ThWPFQPXzfAFZq24                                                                |
| project_id | 71c9b608e79546f4b90f710fea475de3                                                   |
| user_id    | fa4237d31d5145f78b87a29fbcc7ec0c                                                   |
+------------+------------------------------------------------------------------------------------+

Openstack之路(二)認證服務Keystone