1、role簡介 spa
從《openstack之tenant篇》咱們知道,一個用戶能夠同時屬於多個tenant,根據openstack.org裏對role的定義,role規定了一個用戶可以實現的行爲。這個定於彷佛稍顯神祕,其實從管理用戶使用的角度來講,role是和tenant息息相關的,一個用戶想要加入另外一個tenant,必須藉助於role來完成,而因爲tenant規定了其成員的行爲規範,因此role也間接的起到了對於用戶行爲的規定。 資源
2、role基本操做 test
與user,tenant等同樣,role的操做也無怪乎建立,更新,刪除,列舉等: 登錄
列舉: 權限
# keystone role-list 密碼
建立: im
# keystone role-create
命名
刪除: word
# keystonerole-delete
openstack
... 等等,因爲太過簡單,這裏再也不說明。
3、經過role操做用戶
下面着重介紹經過role將一個用戶加入到另外一個tenant的小魔法。
首先,建立兩個tenant, 分別命名爲tenant1和tenant2(注意建立tenant,user, role的keystone命令必須有administrator權限,這裏對全部administrator操做忽略相關用戶/密碼/tenant的聲明):# keystone tenant-create --name tenant1 --enabled true
# keystone tenant-create --name tenant2 --enabled true
爲tenant1建立用戶user1, 爲tenant2建立用戶user2:
# keystone user-create --name user1 --tenant-id <tenant-id of tenant1> --pass password --enabled true
# keystone user-create --name user2 --tenant-id <tenant-id of tenant2> --pass password --enabled true
先不進行role操做,用user1用戶建立一個instance:
# nova --os-usernameuser1--os-password password --os-tenant-name tenant1 boot test --image "cb79a458-169d-413e-89d0-02bcae61569a" --flavor 1
#nova --os_username user1 --os_password password --os_tenant_nametenant1 list
+--------------------------------------+-------+--------+---------------------------+
| ID | Name | Status | Networks |
+--------------------------------------+-------+--------+---------------------------+
| 88bc939b-e29e-44ee-9f09-ec45a93ee6c4 | test | ACTIVE | nova_fixed=192.168.123.65 |
+--------------------------------------+-------+--------+---------------------------+
這時候,用user2用戶登陸,是沒法對user1用戶建立的instance進行操做的。
#nova --os_username user2 --os_password password --os_tenant_nametenant2 list
-- <NULL> --
建立role test:
keystone role-create --name test
+----------+----------------------------------+
| Property | Value |
+----------+----------------------------------+
| id | 2493283f09c1475198f2337a47aa398f |
| name | test |
+----------+----------------------------------+
經過role test將user2用戶加入到tenant1tenant中:
# keystone user-role-add --user-id 7b32f4fc92704947802d2eca95edff0d --role-id2493283f09c1475198f2337a47aa398f --tenant-id 0647347fa21d4221b0197cd282465a00
其中7b32f4fc92704947802d2eca95edff0d是user2的id,0647347fa21d4221b0197cd282465a00是tenant1的id。
這樣,就把user2用戶加入到了tenant1。
#nova --os_username user2 --os_password password --os_tenant_name tenant1 list
+--------------------------------------+-------+--------+---------------------------+
| ID | Name | Status | Networks |
+--------------------------------------+-------+--------+---------------------------+
| 88bc939b-e29e-44ee-9f09-ec45a93ee6c4 | test | ACTIVE | nova_fixed=192.168.123.65 |
+--------------------------------------+-------+--------+---------------------------+
test2用戶能夠看到tenant1下的instance。
# nova --os_username user2 --os_password password --os_tenant_name tenant1delete 88bc939b-e29e-44ee-9f09-ec45a93ee6c4
user2用戶能夠將user1用戶建立的instance刪除,由於這個instance在tenant1中。固然,對於tenant1內的資源,user2用戶也必須用tenant1內的身份去訪問,這就是咱們在上邊的命令中定義--os_tenant_name爲tenant1的緣由。
惟一例外的是admin tenant內的admin用戶,由於這是一個administrator用戶,因此用這個用戶能夠對全部tenant內的instance進行查看、更新、刪除等操做。此外,admin用戶缺省也只能看到自身tenant內的instance,若是想要看到其餘tanent內的instance,須要加上參數--all_tenants,也就是:
nova list --all_tenants
不過,略顯奇怪的是,經過命令:
# keystone user-role-list --user-id 7b32f4fc92704947802d2eca95edff0d
得不到任何用戶和role的關係輸出,這個命令到底有什麼做用,尚待研究。