在Ubuntu 12.10 上安装部署Openstack(3)

身份验证用户管理的三个主要的概念是:

用户

租户

角色

一个用户代表一个人,有象(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一起工作。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/7b2758400875a8a5eca7f9b207274bf9.html