本節書摘來自異步社區《OpenStack云計算實戰手冊(第2版)》一書中的第1章,第1.7節,作者: 【英】Kevin Jackson , 【美】Cody Bunch 更多章節內容可以訪問云棲社區“異步社區”公眾號查看。
1.7 添加用戶
在OpenStack身份認證服務中添加用戶時,必須要有一個能容納該用戶的租戶,還需要定義一個能分配給該用戶的角色。在本節中,創建了兩個用戶。第一個用戶名為admin,它在cookbook租戶中被分配為admin角色。第二個用戶名為demo,同樣在cookbook租戶中,它被分配為Member角色。
準備工作
在開始之前,必須確認已經登錄到已經安裝了OpenStack身份認證服務的OpenStack控制節點上,或者有一個已經連接到安裝了OpenStack身份認證服務的服務器上的Ubuntu客戶端。
執行以下命令,登錄到使用Vagrant創建的OpenStack控制節點:
vagrant ssh controller
如果keystone客戶端工具尚未安裝,可以通過如下命令在Ubuntu客戶端上安裝以便管理我們的OpenStack身份認證服務:
sudo apt-get update
sudo apt-get -y install python-keystoneclient
確保已經設置了正確的環境變量,能訪問到OpenStack環境。
export ENDPOINT=172.16.0.200
export SERVICE_TOKEN=ADMIN
export SERVICE_ENDPOINT=http://${ENDPOINT}:35357/v2.0
操作步驟
要在OpenStack環境中創建用戶,需要執行如下步驟。
1.如果要在cookbook租戶中創建一個用戶,首先要獲得cookbook租戶的ID。通過keystone命令,指定tenant-list選項,就可以得到該ID,然后將其存儲在TENANT_
ID變量中,命令如下所示:
TENANT_ID=$(keystone tenant-list \ | awk '/\ cookbook\ / {print $2}')
2.現在已經得到了租戶的ID。接下來,用如下命令在cookbook租戶中創建admin用戶,注意要使用user-create選項,還需要為該用戶設置密碼:
PASSWORD=openstack
keystone user-create \ --name admin \ --tenant_id $TENANT_ID \ --pass $PASSWORD \ --email root@localhost \ --enabled true
輸出如圖1-4所示。

3.在創建admin用戶時,為了賦予它admin角色,需要先獲得admin角色的ID。和第一步中查找租戶ID的方法相似,用role-list選項取出admin角色的ID,然后將其存儲在一個變量里。
ROLE_ID=$(keystone role-list \ | awk '/\ admin\ / {print $2}')
4.為了將角色賦予admin用戶,需要用到創建admin用戶時返回的用戶ID。執行如下的keystone命令,通過usr-list選項列出所有的用戶,從而得到admin用戶的ID:
USER_ID=$(keystone user-list \ | awk '/\ admin\ / {print $2}')
5.最后,根據租戶ID、用戶ID,以及對應的角色ID,通過user-role-add選項把角色賦予對應的用戶。
keystone user-role-add \ --user $USER_ID \ --role $ROLE_ID \ --tenant_id $TENANT_ID
提示
注意,成功執行該命令之后是沒有輸出的。
6.為了管理整個環境,admin用戶也需要在admin租戶中。為此,需要獲得admin租戶的ID并使用新租戶的ID重復前面的步驟:
ADMIN_TENANT_ID=$(keystone tenant-list \ | awk '/\ admin\ / {print $2}')
keystone user-role-add \ --user $USER_ID \ --role $ROLE_ID \ --tenant_id $ADMIN_TENANT_ID
7.接下來要在cookbook租戶里創建一個demo用戶,并賦予其Member角色,類似前5步,命令如下所示:
# Get the cookbook tenant ID
TENANT_ID=$(keystone tenant-list \ | awk '/\ cookbook\ / {print $2}') # Create the user
PASSWORD=openstack
keystone user-create \ --name demo \ --tenant_id $TENANT_ID \ --pass $PASSWORD \ --email demo@localhost \ --enabled true # Get the Member role ID
ROLE_ID=$(keystone role-list \ | awk '/\ Member\ / {print $2}') # Get the demo user ID
USER_ID=$(keystone user-list \ | awk '/\ demo\ / {print $2}') # Assign the Member role to the demo user in cookbook
keystone user-role-add \ --user $USER_ID \ --role $ROLE_ID \ --tenant_id $TENANT_ID
工作原理
在向OpenStack身份認證服務里添加用戶之前,必需先創建該用戶對應的租戶和角色。創建好之后,需要取得它們的ID,通過身份認證服務的命令行客戶端程序將其和對應的用戶關聯起來。要注意同一個用戶可以同時是多個租戶的成員,并且在不同的租戶里可以被賦予不同的角色。
創建用戶的命令選項是user-create,語法如下所示:
keystone user-create \ --name user_name \ --tenant_id TENANT_ID \ --pass password \ --email email_address \ --enabled true
user_name屬性可以是任意名稱,但不能包含空格。password屬性是必需的,在之前的例子里,它們都被設為openstack。email_address屬性也是必需的。
賦予一個用戶某個角色的命令選項是user-role-add,語法如下所示:
keystone user-role-add \ --user USER_ID \ --role ROLE_ID \ --tenant_id TENANT_ID
這表示在賦予角色之前,必須先取得用戶的ID、角色的ID及租戶的ID。這些ID可以通過如下命令得到:
keystone tenant-list
keystone role-list
keystone user-list