身份验证用户管理的三个主要的概念是:
用户
租户
角色
一个用户代表一个人,有象(such as)用户名称,密码以及email等有关的资料,下面的例子创建一个名叫"alice"的用户:
$ keystone user-create –name=alice –pass=mypassword123 –email=alice@example.com
一个租户被认为作为一个项目,组,或组织。无论何时,你对openstack发出请求,你必须指定一个租户。例如,如果你查询正在运行实例的列表的计算服务,你将会接收到一个所有正在运行实例的列表。这个列表是在你的查询中指定的租户里。下面的例子创建一个名为acme的租户:
$ keystone tenate-create –name=acme
注:因为在早期的OpenStack Compute中,用术语project用于代替tenant,有些命令行工具用—project_id代替 –tenant-id或 –os-tenatn-id来引用一个tenatn ID。
一个角色捕获操作,这个操作是在给定的租户里,一个用户准许执行的操作。这个例子是创建一个名称为"compute-user"的角色。
$ keystone role-create –name=compute-user
注:
与一个拥有租户及角色的用户有关联的身份验证服务,继续我们以前的例子,我们可能希望在"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文件控制了用户被允许去做些什么为了给出的服务。例如,/etc/nova/policy.json指明了对于计算服务进行访问的策略。/etc/keystone/policy.json指出了对于身份验证服务指定了访问策略。
在计算服务,身份验证服务,以及镜象服务里,缺省的policy.json只识别admin角色:不请求admin角色的所有操作对于一个租户里的任何角色的用户都是可用的。
如果你希望限制一个用户的执行操作,也就是说,在Compute服务里。你需要在身份验证服务里创建一个角色,然后修改/etc/nova/policy.json文件,以便这个角色对于计算服务操作是需要的。
例如,在/etc/nova/policy.json文件中的这一行,指定了用户在创建圈的时候没有任何限制:如果用户在租户里有任何的角色。他们在租户里能够创建圈。
"volume:create": [],
如果我们限制在特别的租户里具有compute-user角色的用户创建圈,我们将增加"role:compute-user",象这样的:
"volume:create":["role:compute-user"],
如果我们希望限制所有的计算服务请求来请求这个角色,该结果文件将会象下面的一样:
{
"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"]
}
服务管理
身份验证服务管理的两个主要的概念是:
服务(Services);
端点(Endpoints);
身份验证服务也保持一个用户与每个服务一致。(例如,一个用户名称为:nova,对于compute服务),以及一个专门的服务租户,它也被服务调用。
创建服务的命令以及终端的描述在以后的章节中进行。
安装与配置身份验证服务
在任何与其它可访问的服务器有关的服务器上安装身份验证服务,你打算用于OpenStack服务。以root身份:
# apt-get install keystone。
在安装完之后,你必须删除在安装过程中创建的sqlite数据库,然后改变配置,指向MySQL数据库。这个配置使得缩放脚本很容易,自从当你需要的时候,你能够创建多个keystone前端,以及配置它们,使得它们全部指向同样的数据库。加上一个已经嵌入了数据复制特征的数据库后端,以及与高可用性有紧密关联的文档,以及数据冗余配置。
删除在/var/lib/keystone目录下的keystone.db文件。
# rm /var/lib/keystone/keystone.db
与其配置已经准备好的后端数据存储,还不如使用缺省支持的分类有能力去备份该服务以及终端数据。这个例子表示了MySQL.
以root用户安装MySQL:
# apt-get install python-mysqldb mysql-server
在安装期间,你将会被提示为了mysql的root用户设置密码。输入一个密码并且确认。
使用sed命令修改/etc/mysql/my.cnf文件,更改bind-address地址,由主机地址(localhost:127.0.0.1)更改至任意地址(0.0.0.0),然后重启mysql服务,用root用户:
# sed –I 's/127.0.0.1/0.0.0.0/g' /etc/mysql/my.cnf
# service mysql restart
下列命令序列将创建一个名称为"keystone"的数据库,以及一个名称为"keystone"的MySQL用户。它拥有访问"keystone"MySQL数据库的所有权限。
为了手动创建数据库,通过运行下面的命令行启动MySQL数据库
$ mysql –u root –p
当出现提示符时输入mysql的root用户密码。
为了配置MySQL数据库,创建keystone数据库。
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
提示:
记得在这个文档中假设(assumes)了云控制节点有一个IP地址:192.168.206.130。
一旦keystone安装了,通过一个主要的配置文件(/etc/keystone/keystone.conf)来配置它。用命令行客户端来初始化数据到keystone数据库中。缺省地,Keystone的数据存储是sqlite。为了数据存储到mysql,在文件/etc/keystone/keystone.conf中更改定义"connection"项,象下这面的一样:
Connection = mysql://keystone:[YOUR_KEYSTONEDB_PASSWORD]@192.168.206.130/keystone
同样,适当的服务token被使用于该keystone.conf文件,在附录里(in appendix)提供了一个例子,或者你可以产生一个随机字符。作为例 子的token如下:
Admin_token= 012345SECRET99TOKEN012345
下一步,重启keystone服务,以便keystone启动(picks up)新的数据库配置。
# sudo service keystone restart
最后,初始化最新的keystone数据库,用 root用户
# keystone-manage db_sync
配置服务与keystone一起工作(Configuring Services to work with keystone)
一旦keystone 安装和运行,你就可以准备(set up)用户和租户,以及服务,配置后与keystone一起工作。