這邊的內容是本人參考Openstack DOC加上自己的安裝心得所寫,由於本人學識尚淺若有錯誤在請留言告知~謝謝 <(_ _)>
設定Identity service
Identity Service 主要有以下幾個目的:
有關 Identity Service 必須先了解以下幾個觀念:
使用者(user):
使用 openstack 所提供服務的人,Identity Service 只會驗證使用者自己發出的
requests。使用者需 login 並分配到可獲得的 resources。如果是承租(tenant)使用者則可以直接使用特殊的承租區塊與行為。
憑證(credentials)會初始化這些使用者的帳號和密碼或是使用者名稱與 api key,針對這 些憑證 Identity Service 會發出一個認證 token 給這些使用者,讓這些用戶可以隨後提 供一連串的 requests.
當 Identity Service 提供以 token 為基礎認證的版本後,未來便把目標放在提供某些額外 的 protocols,主要目的是要成為一個整合的 services 而非完整的身份儲存與管理方 案。
在 Identity Service 中,發送給使用者的 token 本身包含使用者可以扮演的角色。使用者 透過不同的角色來執行或是獲得他們能夠存取的資源,下圖為 Identity Service 執行的 流程:
- 管理使用者: 追蹤使用者與其權限。
- Service 條列:提供並列出可獲得的 service API 給終端。
有關 Identity Service 必須先了解以下幾個觀念:
使用者(user):
憑證(credentials):
只有被經過認可的使用者才能得知的資料。舉例:使用者帳號與密碼、使用者名
稱與 api 的 Key、經過 Identity Service 認證的 token 這些都屬於 Identity Service。
認證(Authentication):
confirm 用戶身份的動作。對於 Identity Service 會 confirm 關於一群已憑證使用者
發出的 request。憑證(credentials)會初始化這些使用者的帳號和密碼或是使用者名稱與 api key,針對這 些憑證 Identity Service 會發出一個認證 token 給這些使用者,讓這些用戶可以隨後提 供一連串的 requests.
Token:
一個用來存取資源的特殊字串 bit。每一個 token 有自己的可視範圍來決定自己能
夠使用的資源。一個 token 可以隨時隨地被註銷或是可被使用於某個有限時間內。當 Identity Service 提供以 token 為基礎認證的版本後,未來便把目標放在提供某些額外 的 protocols,主要目的是要成為一個整合的 services 而非完整的身份儲存與管理方 案。
承租者(tenant):
根據不同服務提供方提供一個用來存放一群或分割出來的資源的認證物件容器,
一個承租者可以對應到客戶、帳號、組織或是計畫 project。
服務(Service):
就是 openstack 的服務。例如計算功能(Nova)、物件儲存(Swift)或是映像檔服務
(Glance) 這些提供給一到多個終端只用者能夠存取的資源與功用操作。
終端(Endpoint):
一個可以透過網路訪問的位置,通常為 URL 本身是使用者使用服務的位置。如果
使用樣板延展,你也可以創造一個終端樣板來顯示所有可使用的跨區域消耗性資源。
角色(Role):
一個使用者獨立用來執行一連串專屬的操作。一個角色擁有一些特殊權力與權
限,使用者會假定這個角色繼承他們本身的權限與權力。在 Identity Service 中,發送給使用者的 token 本身包含使用者可以扮演的角色。使用者 透過不同的角色來執行或是獲得他們能夠存取的資源,下圖為 Identity Service 執行的 流程:
安裝Identity Service
- 安裝 openstack Identity Service於controller node中並安裝python-keystonecilent,因為這兩 者有相依性。
- Identity Service 使用 database 來儲存所有資訊,所以要設定 local 端的 database 設定檔,在這份安裝手冊我們使用 MySQL 並安裝在 controller node,加入username 為 keystone 並且取代 KEYSTONE_DBPASS(我們設 12345678)為合適的密碼來當 作 database 的使用者。 增修/etc/keystone/keystone.conf 中[database]這區段
- 由於 ubuntu package 會建立一個 SQLite database,所以需要刪除 keystone.db 這個 檔案避免發生錯誤,這個檔案會被建立在/var/lib/keystone/ 這個資料夾下。
- 使用 database 的 root 帳號建立一個 keystone 的 database 使用者:(名稱就用 keystone,密碼我們這邊將 KEYSTONE_DBPASS 改為 12345678)
- 建立一個 database table 給 identity Service 使用:
- 設定授權 token 的加密方式提供給 Openstack services 與 Identity Service 溝通使 用,我們使用 openssl 設定檔來產生隨機 token 亂數字串: 螢幕會輸出一組密碼請將密碼複製下來,這就是我們的token!
- 設定 log 的存放位置: 修改/etc/keystone/keystone.conf 並且更新[DEFAULT]這一 段:
- 重起 keystone service
- 預設 Identity Service 將會無限地儲存這個過期的token,對於這些token 在作業環境下,累積這些過期的 token 雖然會增加 database 的大小並且可能會降 低 service 的效能~特別在我們有限資源的測試環境中,但是我們還是建議你使用 cron 做一個固定每小時清除這些過期 token 的任務:
# apt-get install keystone
.......
[database]
#The SQLAlchemy connection string used to connect to the database
connection =mysql://keystone:KEYSTONE_DBPASS@controller/keystone ......
[database]
#The SQLAlchemy connection string used to connect to the database
connection =mysql://keystone:KEYSTONE_DBPASS@controller/keystone ......
# rm /var/lib/keystone/keystone.db
$ mysql -u root -p
mysql> CREATE DATABASE keystone;
mysql> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \
IDENTIFIED BY 'KEYSTONE_DBPASS';
mysql> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \
IDENTIFIED BY 'KEYSTONE_DBPASS';
mysql> exit
mysql> CREATE DATABASE keystone;
mysql> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' \
IDENTIFIED BY 'KEYSTONE_DBPASS';
mysql> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' \
IDENTIFIED BY 'KEYSTONE_DBPASS';
mysql> exit
# su -s /bin/sh -c "keystone-manage db_sync" keystone
# openssl rand -hex 10
修改/etc/keystone/keystone.conf 內[DEFAULT]這一段內容,將 ADMIN_TOKEN
改為上述使用 openssl 產生的亂數字串:
[DEFAULT]
# A “shared secret” between keystione and other openstack services
admin_token = ADMIN_TOKEN
........
# A “shared secret” between keystione and other openstack services
admin_token = ADMIN_TOKEN
........
[DEFAULT]
........
log_dir = /var/log/keystone
........
log_dir = /var/log/keystone
# service keystone restart
# (crontab -l -u keystone 2>&1 | grep -q token_flush) || \
echo '@hourly /usr/bin/keystone-manage token_flush >/var/log/keystone/keystone-tokenflush.log 2>&1' >> /var/spool/cron/crontabs/keystone
echo '@hourly /usr/bin/keystone-manage token_flush >/var/log/keystone/keystone-tokenflush.log 2>&1' >> /var/spool/cron/crontabs/keystone
...........待續。
留言
張貼留言