1. 程式人生 > >雲計算OpenStack:keystone身份認證服務(二)--技術流ken

雲計算OpenStack:keystone身份認證服務(二)--技術流ken

pre 查看 keys sym com col 分享圖片 lis 查詢

Keystone介紹

keystone 是OpenStack的組件之一,用於為OpenStack家族中的其它組件成員提供統一的認證服務,包括身份驗證、令牌的發放和校驗、服務列表、用戶權限的定義等等。雲環境中所有的服務之間的授權和認證都需要經過 keystone. 因此 keystone 是雲平臺中第一個即需要安裝的服務。 作為 OpenStack 的基礎支持服務,Keystone 做下面這幾件事情:
  1. 管理用戶及其權限
  2. 維護 OpenStack Services 的 Endpoint
  3. Authentication(認證)和 Authorization(鑒權)
學習 Keystone,得理解下面這些概念: 技術分享圖片 User User 指代任何使用 OpenStack 的實體,可以是真正的用戶,其他系統或者服務。 技術分享圖片 當 User 請求訪問 OpenStack 時,Keystone 會對其進行驗證。Horizon 在 Identity->Users 管理 User 技術分享圖片 除了 admin 和 demo,OpenStack 也為 nova、cinder、glance、neutron 服務創建了相應的 User。 admin 也可以管理這些 User。 技術分享圖片 Credentials Credentials 是 User 用來證明自己身份的信息,可以是: 1. 用戶名/密碼 2. Token 3. API Key 4. 其他高級方式 技術分享圖片
Authentication Authentication 是 Keystone 驗證 User 身份的過程。User 訪問 OpenStack 時向 Keystone 提交用戶名和密碼形式的 Credentials,Keystone 驗證通過後會給 User 簽發一個 Token 作為後續訪問的 Credential。 技術分享圖片 Token Token 是由數字和字母組成的字符串,User 成功 Authentication 後 Keystone 生成 Token 並分配給 User。
  1. Token 用做訪問 Service 的 Credential
  2. Service 會通過 Keystone 驗證 Token 的有效性
  3. Token 的有效期默認是 24 小時
技術分享圖片 Project Project 用於將 OpenStack 的資源(計算、存儲和網絡)進行分組和隔離。 根據 OpenStack 服務的對象不同,Project 可以是一個客戶(公有雲,也叫租戶)、部門或者項目組(私有雲)。 這裏請註意:
  1. 資源的所有權是屬於 Project 的,而不是 User。
  2. 在 OpenStack 的界面和文檔中,Tenant / Project / Account 這幾個術語是通用的,但長期看會傾向使用 Project
  3. 每個 User(包括 admin)必須掛在 Project 裏才能訪問該 Project 的資源。 一個User可以屬於多個 Project。
  4. admin 相當於 root 用戶,具有最高權限
技術分享圖片 Horizon 在 Identity->Projects 中管理 Project 技術分享圖片 通過 Manage Members 將 User 添加到 Project 技術分享圖片 技術分享圖片 Service OpenStack 的 Service 包括 Compute (Nova)、Block Storage (Cinder)、Object Storage (Swift)、Image Service (Glance) 、Networking Service (Neutron) 等。每個 Service 都會提供若幹個 Endpoint,User 通過 Endpoint 訪問資源和執行操作。 技術分享圖片 Endpoint Endpoint 是一個網絡上可訪問的地址,通常是一個 URL。Service 通過 Endpoint 暴露自己的 API。 Keystone 負責管理和維護每個 Service 的 Endpoint。 技術分享圖片 可以使用下面的命令來查看 Endpoint。
# source devstack/openrc admin admin # openstack catalog list
技術分享圖片 Role 安全包含兩部分:Authentication(認證)和 Authorization(鑒權) Authentication 解決的是“你是誰?”的問題 Authorization 解決的是“你能幹什麽?”的問題 Keystone 借助 Role 實現 Authorization:
  1. Keystone定義Role技術分享圖片
  2. 可以為 User 分配一個或多個 Role,Horizon 的菜單為: Identity->Project->ManageMembers
技術分享圖片
  1. Service 決定每個 Role 能做什麽事情 Service 通過各自的 policy.json 文件對 Role 進行訪問控制。 下面是 Nova 服務 /etc/nova/policy.json 中的示例:
技術分享圖片 上面配置的含義是:對於 create、attach_network 和 attach_volume 操作,任何Role的 User 都可以執行; 但只有 admin 這個 Role 的 User 才能執行 forced_host 操作。 OpenStack 默認配置只區分 admin 和非 admin Role。 如果需要對特定的 Role 進行授權,可以修改 policy.json。

Keystone基本架構

技術分享圖片 •Token: 用來生成和管理token •Catalog:用來存儲和管理service/endpoint •Identity:用來管理tenant/user/role和驗證 •Policy:用來管理訪問權限

通過例子認識Keystone

我們通過“查詢可用 image”這個實際操作讓大家對這些概念建立更加感性的認識。User admin 要查看 Project 中的 image

第 1 步 登錄 技術分享圖片 當點擊技術分享圖片時,OpenStack 內部發生了哪些事情?請看下面 技術分享圖片 Token 中包含了 User 的 Role 信息 第 2 步 顯示操作界面 技術分享圖片 請註意,頂部顯示 admin 可訪問的 Project 為 “admin” 和 “demo”。 其實在此之前發生了一些事情: 技術分享圖片 同時,admin 可以訪問 Intance, Volume, Image 等服務 技術分享圖片 這是因為 admin 已經從 Keystone 拿到了各 Service 的 Endpoints 技術分享圖片 第 3 步 顯示 image 列表 點擊 “Images”,會顯示 image 列表 技術分享圖片 背後發生了這些事: 首先 admin 將請求發送到 Glance 的 Endpoint 技術分享圖片 Glance 向 Keystone 詢問 admin 身份是否有效 技術分享圖片 接下來 Glance 會查看 /etc/glance/policy.json 判斷 admin 是否有查看 image 的權限 技術分享圖片 權限判定通過,Glance 將 image 列表發給 admin。

OpenStack問題排查

OpenStack 排查問題的方法主要是通過日誌。 每個 Service 都有自己的日誌文件。 Keystone 主要有兩個日誌: keystone.log 和 keystone_access.log,保存在 /var/log/apache2/ 目錄裏。 devstack 的 screen 窗口已經幫我們打開了這兩個日誌。 可以直接查看: 技術分享圖片 如果需要得到最詳細的日誌信息,可以在 /etc/keystone/keystone.conf 中打開 debug 選項 技術分享圖片 在非 devstack 安裝中,日誌可能在 /var/log/keystone/ 目錄裏。

安裝和配置keystone

第一步:數據庫創建keystone用戶

MariaDB [(none)]> CREATE DATABASE keystone;

第二步:對``keystone``數據庫授予恰當的權限

密碼設置為keystone

MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO keystone@localhost     -> IDENTIFIED BY keystone;

MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO keystone@%  IDENTIFIED BY keystone;

第三步:安裝keystone

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

第四步:編輯配置文件/etc/keystone/keystone.conf

在[database]下面添加下面的內容

在713行處

[root@ken-node1 etc]# vim /etc/keystone/keystone.conf

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

第四步:在``[token]``部分,配置Fernet UUID令牌的提供者

2832行處

[root@ken-node1 etc]# vim /etc/keystone/keystone.conf

...
2832 provider = fernet

第五步:初始化身份認證服務的數據庫

[root@ken-node1 etc]# su -s /bin/sh -c "keystone-manage db_sync" keystone

第六步:初始化Fernet keys

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

第七步:引導身份認證服務

[root@ken-node1 ~]# keystone-manage bootstrap --bootstrap-password admin \ #密碼設置為admin
>   --bootstrap-admin-url http://192.168.64.7:35357/v3/ \
>   --bootstrap-internal-url http://192.168.64.7:5000/v3/ \
>   --bootstrap-public-url http://192.168.64.7:5000/v3/ \
>   --bootstrap-region-id RegionOne

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

ServerName 192.168.64.7

第九步:創建軟連接/usr/share/keystone/wsgi-keystone.conf

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

第十步:啟動

[root@ken-node1 ~]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@ken-node1 ~]# systemctl start httpd

第十一步:配置管理賬號

新建一個文件寫入如下的內容

[root@ken-node1 ~]# cat admin
export OS_USERNAME=admin
export OS_PASSWORD=admin  #keystone-manage bootstrap的密碼
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://192.168.64.7:35357/v3
export OS_IDENTITY_API_VERSION=3

至此,keystone身份認證部署完畢,下一節開始部署glance鏡像服務!

雲計算OpenStack:keystone身份認證服務(二)--技術流ken