- 用戶管理
- 身份驗證用戶管理的三個主要的概念是:
- 用戶
- 租戶
- 角色
- 一個用戶代表一個人,有象(such as)用戶名稱,密碼以及email等有關(guān)的資料,下面的例子創(chuàng)建一個名叫"alice"的用戶:
- $ keystone user-create –name=alice –pass=mypassword123 –email=alice@example.com
- 一個租戶被認為作為一個項目,組,或組織。無論何時,你對openstack發(fā)出請求,你必須指定一個租戶。例如,如果你查詢正在運行實例的列表的計算服務(wù),你將會接收到一個所有正在運行實例的列表。這個列表是在你的查詢中指定的租戶里。下面的例子創(chuàng)建一個名為acme的租戶:
- $ keystone tenate-create –name=acme
- 注:因為在早期的OpenStack Compute中,用術(shù)語project用于代替tenant,有些命令行工具用—project_id代替 –tenant-id或 –os-tenatn-id來引用一個tenatn ID。
- 一個角色捕獲操作,這個操作是在給定的租戶里,一個用戶準許執(zhí)行的操作。這個例子是創(chuàng)建一個名稱為"compute-user"的角色。
- $ keystone role-create –name=compute-user
- 注:
- 與一個擁有租戶及角色的用戶有關(guān)聯(lián)的身份驗證服務(wù),繼續(xù)我們以前的例子,我們可能希望在"acme"租戶里分配給"alice"這個用戶"Compute-user"角色:
$ keystone user-list
+--------+---------+-------------------+--------+
| id | enabled | email | name |
+--------+---------+-------------------+--------+
| 892585 | True | alice@example.com | alice |
+--------+---------+-------------------+--------+
$ keystone role-list
+--------+--------------+
| id | name |
+--------+--------------+
| 9a764e | compute-user |
+--------+--------------+
$ keystone tenant-list
+--------+------+---------+
| id | name | enabled |
+--------+------+---------+
| 6b8fd2 | acme | True |
+--------+------+---------+
$ keystone user-role-add --user=892585 --role=9a764e --tenant-id=6b8fd2
一個用戶可能在不同的租戶里分配不事的角色,例如,Alice在"Cyberdyne"租戶里也有"admin"角色。一個用戶在同樣的租戶里也可以分配多個角色。
/etc/[SERVICE_CODENAME]/policy.json文件控制了用戶被允許去做些什么為了給出的服務(wù)。例如,/etc/nova/policy.json指明了對于計算服務(wù)進行訪問的策略。/etc/keystone/policy.json指出了對于身份驗證服務(wù)指定了訪問策略。
在計算服務(wù),身份驗證服務(wù),以及鏡象服務(wù)里,缺省的policy.json只識別admin角色:不請求admin角色的所有操作對于一個租戶里的任何角色的用戶都是可用的。
如果你希望限制一個用戶的執(zhí)行操作,也就是說,在Compute服務(wù)里。你需要在身份驗證服務(wù)里創(chuàng)建一個角色,然后修改/etc/nova/policy.json文件,以便這個角色對于計算服務(wù)操作是需要的。
例如,在/etc/nova/policy.json文件中的這一行,指定了用戶在創(chuàng)建圈的時候沒有任何限制:如果用戶在租戶里有任何的角色。他們在租戶里能夠創(chuàng)建圈。
"volume:create": [],
如果我們限制在特別的租戶里具有compute-user角色的用戶創(chuàng)建圈,我們將增加"role:compute-user",象這樣的:
"volume:create":["role:compute-user"],
如果我們希望限制所有的計算服務(wù)請求來請求這個角色,該結(jié)果文件將會象下面的一樣:
{
"admin_or_owner": [["role:admin"], ["project_id:
%(project_id)s"]],
"default": [["rule:admin_or_owner"]],
"compute:create": ["role":"compute-user"],
"compute:create:attach_network": ["role":"compute-user"],
"compute:create:attach_volume": ["role":"compute-user"],
"compute:get_all": ["role":"compute-user"],
"admin_api": [["role:admin"]],
"compute_extension:accounts": [["rule:admin_api"]],
"compute_extension:admin_actions": [["rule:admin_api"]],
"compute_extension:admin_actions:pause":
[["rule:admin_or_owner"]],
"compute_extension:admin_actions:unpause":
[["rule:admin_or_owner"]],
"compute_extension:admin_actions:suspend":
[["rule:admin_or_owner"]],
"compute_extension:admin_actions:resume":
[["rule:admin_or_owner"]],
"compute_extension:admin_actions:lock": [["rule:admin_api"]],
"compute_extension:admin_actions:unlock":
[["rule:admin_api"]],
"compute_extension:admin_actions:resetNetwork":
[["rule:admin_api"]],
"compute_extension:admin_actions:injectNetworkInfo":
[["rule:admin_api"]],
"compute_extension:admin_actions:createBackup":
[["rule:admin_or_owner"]],
"compute_extension:admin_actions:migrateLive":
[["rule:admin_api"]],
"compute_extension:admin_actions:migrate":
[["rule:admin_api"]],
"compute_extension:aggregates": [["rule:admin_api"]],
"compute_extension:certificates": ["role":"compute-user"],
"compute_extension:cloudpipe": [["rule:admin_api"]],
"compute_extension:console_output": ["role":"compute-user"],
"compute_extension:consoles": ["role":"compute-user"],
"compute_extension:createserverext": ["role":"compute-user"],
"compute_extension:deferred_delete": ["role":"compute-user"],
"compute_extension:disk_config": ["role":"compute-user"],
"compute_extension:extended_server_attributes":
[["rule:admin_api"]],
"compute_extension:extended_status": ["role":"compute-user"],
"compute_extension:flavorextradata": ["role":"compute-user"],
"compute_extension:flavorextraspecs": ["role":"compute-user"],
"compute_extension:flavormanage": [["rule:admin_api"]],
"compute_extension:floating_ip_dns": ["role":"compute-user"],
"compute_extension:floating_ip_pools": ["role":"computeuser"],
"compute_extension:floating_ips": ["role":"compute-user"],
"compute_extension:hosts": [["rule:admin_api"]],
"compute_extension:keypairs": ["role":"compute-user"],
"compute_extension:multinic": ["role":"compute-user"],
"compute_extension:networks": [["rule:admin_api"]],
"compute_extension:quotas": ["role":"compute-user"],
"compute_extension:rescue": ["role":"compute-user"],
"compute_extension:security_groups": ["role":"compute-user"],
"compute_extension:server_action_list": [["rule:admin_api"]],
"compute_extension:server_diagnostics": [["rule:admin_api"]],
"compute_extension:simple_tenant_usage:show":
[["rule:admin_or_owner"]],
"compute_extension:simple_tenant_usage:list":
[["rule:admin_api"]],
"compute_extension:users": [["rule:admin_api"]],
"compute_extension:virtual_interfaces": ["role":"computeuser"],
"compute_extension:virtual_storage_arrays": ["role":"computeuser"],
"compute_extension:volumes": ["role":"compute-user"],
"compute_extension:volumetypes": ["role":"compute-user"],
"volume:create": ["role":"compute-user"],
"volume:get_all": ["role":"compute-user"],
"volume:get_volume_metadata": ["role":"compute-user"],
"volume:get_snapshot": ["role":"compute-user"],
"volume:get_all_snapshots": ["role":"compute-user"],
"network:get_all_networks": ["role":"compute-user"],
"network:get_network": ["role":"compute-user"],
"network:delete_network": ["role":"compute-user"],
"network:disassociate_network": ["role":"compute-user"],
"network:get_vifs_by_instance": ["role":"compute-user"],
"network:allocate_for_instance": ["role":"compute-user"],
"network:deallocate_for_instance": ["role":"compute-user"],
"network:validate_networks": ["role":"compute-user"],
"network:get_instance_uuids_by_ip_filter": ["role":"computeuser"],
"network:get_floating_ip": ["role":"compute-user"],
"network:get_floating_ip_pools": ["role":"compute-user"],
"network:get_floating_ip_by_address": ["role":"compute-user"],
"network:get_floating_ips_by_project": ["role":"computeuser"],
"network:get_floating_ips_by_fixed_address": ["role":"computeuser"],
"network:allocate_floating_ip": ["role":"compute-user"],
"network:deallocate_floating_ip": ["role":"compute-user"],
"network:associate_floating_ip": ["role":"compute-user"],
"network:disassociate_floating_ip": ["role":"compute-user"],
"network:get_fixed_ip": ["role":"compute-user"],
"network:add_fixed_ip_to_instance": ["role":"compute-user"],
"network:remove_fixed_ip_from_instance": ["role":"computeuser"],
"network:add_network_to_project": ["role":"compute-user"],
"network:get_instance_nw_info": ["role":"compute-user"],
"network:get_dns_domains": ["role":"compute-user"],
"network:add_dns_entry": ["role":"compute-user"],
"network:modify_dns_entry": ["role":"compute-user"],
"network:delete_dns_entry": ["role":"compute-user"],
"network:get_dns_entries_by_address": ["role":"compute-user"],
"network:get_dns_entries_by_name": ["role":"compute-user"],
"network:create_private_dns_domain": ["role":"compute-user"],
"network:create_public_dns_domain": ["role":"compute-user"],
"network:delete_dns_domain": ["role":"compute-user"]
}
服務(wù)管理
身份驗證服務(wù)管理的兩個主要的概念是:
服務(wù)(Services);
端點(Endpoints);
身份驗證服務(wù)也保持一個用戶與每個服務(wù)一致。(例如,一個用戶名稱為:nova,對于compute服務(wù)),以及一個專門的服務(wù)租戶,它也被服務(wù)調(diào)用。
創(chuàng)建服務(wù)的命令以及終端的描述在以后的章節(jié)中進行。
安裝與配置身份驗證服務(wù)
在任何與其它可訪問的服務(wù)器有關(guān)的服務(wù)器上安裝身份驗證服務(wù),你打算用于OpenStack服務(wù)。以root身份:
# apt-get install keystone。
在安裝完之后,你必須刪除在安裝過程中創(chuàng)建的sqlite數(shù)據(jù)庫,然后改變配置,指向MySQL數(shù)據(jù)庫。這個配置使得縮放腳本很容易,自從當(dāng)你需要的時候,你能夠創(chuàng)建多個keystone前端,以及配置它們,使得它們?nèi)恐赶蛲瑯拥臄?shù)據(jù)庫。加上一個已經(jīng)嵌入了數(shù)據(jù)復(fù)制特征的數(shù)據(jù)庫后端,以及與高可用性有緊密關(guān)聯(lián)的文檔,以及數(shù)據(jù)冗余配置。
刪除在/var/lib/keystone目錄下的keystone.db文件。
# rm /var/lib/keystone/keystone.db
與其配置已經(jīng)準備好的后端數(shù)據(jù)存儲,還不如使用缺省支持的分類有能力去備份該服務(wù)以及終端數(shù)據(jù)。這個例子表示了MySQL.
以root用戶安裝MySQL:
# apt-get install python-mysqldb mysql-server
在安裝期間,你將會被提示為了mysql的root用戶設(shè)置密碼。輸入一個密碼并且確認。
使用sed命令修改/etc/mysql/my.cnf文件,更改bind-address地址,由主機地址(localhost:127.0.0.1)更改至任意地址(0.0.0.0),然后重啟mysql服務(wù),用root用戶:
# sed –I 's/127.0.0.1/0.0.0.0/g' /etc/mysql/my.cnf
# service mysql restart
下列命令序列將創(chuàng)建一個名稱為"keystone"的數(shù)據(jù)庫,以及一個名稱為"keystone"的MySQL用戶。它擁有訪問"keystone"MySQL數(shù)據(jù)庫的所有權(quán)限。
為了手動創(chuàng)建數(shù)據(jù)庫,通過運行下面的命令行啟動MySQL數(shù)據(jù)庫
$ mysql –u root –p
當(dāng)出現(xiàn)提示符時輸入mysql的root用戶密碼。
為了配置MySQL數(shù)據(jù)庫,創(chuàng)建keystone數(shù)據(jù)庫。
Mysql> CREATE DATABASE keystone;
注意:
為keystone用戶選擇一個安全的密碼,然后用這處命令替換所有的參考[YOUR_KEYSTONEDB_PASSWORD]
Mysql> GRANT ALL ON keystone.* TO 'keystone'@'%' IDENTIFIED BY '[YOUR_KEYSTONEDB_PASSWORD]';
在mysql>提示符處鍵入quit退出MySQL。
Mysql>quit
提示:
記得在這個文檔中假設(shè)(assumes)了云控制節(jié)點有一個IP地址:192.168.206.130。
一旦keystone安裝了,通過一個主要的配置文件(/etc/keystone/keystone.conf)來配置它。用命令行客戶端來初始化數(shù)據(jù)到keystone數(shù)據(jù)庫中。缺省地,Keystone的數(shù)據(jù)存儲是sqlite。為了數(shù)據(jù)存儲到mysql,在文件/etc/keystone/keystone.conf中更改定義"connection"項,象下這面的一樣:
Connection = mysql://keystone:[YOUR_KEYSTONEDB_PASSWORD]@192.168.206.130/keystone
同樣,適當(dāng)???服務(wù)token被使用于該keystone.conf文件,在附錄里(in appendix)提供了一個例子,或者你可以產(chǎn)生一個隨機字符。作為例 子的token如下:
Admin_token= 012345SECRET99TOKEN012345
下一步,重啟keystone服務(wù),以便keystone啟動(picks up)新的數(shù)據(jù)庫配置。
# sudo service keystone restart
最后,初始化最新的keystone數(shù)據(jù)庫,用 root用戶
# keystone-manage db_sync
配置服務(wù)與keystone一起工作(Configuring Services to work with keystone)
一旦keystone 安裝和運行,你就可以準備(set up)用戶和租戶,以及服務(wù),配置后與keystone一起工作。
|