本帖最后由 hochikong 于 2014-8-13 11:21 编辑
问题导读:
1.租户、角色、用户之间可以存在并集或交集吗?
2./etc/[代号]/policy.json用于什么?
3.如何配置policy.json文件?
openstack身份服务,代号为keystone,这是openstack默认的身份管理系统。当你安装完它,你可以通过/etc/keystone.conf配置它.你可以通过keystone的命令行客户端初始化身份服务的数据。
用户管理:
以下是身份服务用户管理中的一些主要概念:
用户:代表一个使用者,拥有一些相关联的信息比如用户名,密码和电邮地址。以下的例子创建了一个名为alice的用户:
- keystone user-create --name=alice --pass=mypassword123 --email=alice@example.com
复制代码
租户:一个项目,组或组织。当你向OpenStack服务发出请求时,你必须指定一个租户。比如,当你向计算服务查询运行中的实例的列表时,你会在你所指定的租户内获得这个列表。以下这个例子创建了一个名为acme的租户:
- keystone tenant-create --name=acme
复制代码
请注意:因为在计算服务更早的版本中”project“已经被替换为”tenant“,所以有些命令行工具使用--project-id代替--tenant-id或--os-tenant-id,但其实所指的还是tenant的ID。
角色:在一个给定的租户中捕获用户可以执行的操作。
以下这个例子创建了一个名为compute-user的租户:
- keystone role-create --name=compute-user
复制代码
注意:在个别服务中,比如计算和镜像服务,assign的意思就是role,在身份服务中,一个角色(role)只是一个简单的名字。
身份服务为用户分配一个租户和角色,你可能会在acme租户中把compute-user角色分配给alice用户。
- $ 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/police.json指定了对计算服务的访问策略,/etc/glance/policy.json指定了对镜像服务的的访问策略,而/etc/keystone/policy.json指定了对身份服务的访问权限。
默认的位于计算、身份和计算服务中的policy.json文件只识别admin角色:所有不需要admin角色的操作对于租户中任何用户(任意角色)都是可访问的。
如果你要限制用户执行某些操作,例如计算服务,你需要在身份服务中创建一个角色,接着修改/etc/nova/policy.json文件。实现仅有该角色才可以执行计算操作。
例如,/etc/nova/policy.json中这一行说明了对哪些用户可以创建volume没有限制的:如果用户在这个租户中有任何角色,他们都可以在这个租户中创建volume。
复制代码
如果要在某个特定的租户中限制只有那些拥有compute-user角色的用户才能创建volume,你可以添加”role:compute-user“,像这样:
- "volume:create": ["role:compute-user"],
复制代码
如我们需要对所有Compute服务的请求均需要指定的角色,你的配置文件应该会像这样:
- {
- "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"
- ],
- "compute:unlock_override": [
- "rule:admin_api"
- ],
- "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_or_owner"
- ]
- ],
- "compute_extension:admin_actions:unlock": [
- [
- "rule:admin_or_owner"
- ]
- ],
- "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:evacuate": [
- [
- "rule:admin_api"
- ]
- ],
- "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:compute-user"
- ],
- "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:compute-user"
- ],
- "compute_extension:virtual_storage_arrays": [
- "role:compute-user"
- ],
- "compute_extension:volumes": [
- "role:compute-user"
- ],
- "compute_extension:volume_attachments:index": [
- "role:compute-user"
- ],
- "compute_extension:volume_attachments:show": [
- "role:compute-user"
- ],
- "compute_extension:volume_attachments:create": [
- "role:compute-user"
- ],
- "compute_extension:volume_attachments:delete": [
- "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:compute-user"
- ],
- "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:compute-user"
- ],
- "network:get_floating_ips_by_fixed_address": [
- "role:compute-user"
- ],
- "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:compute-user"
- ],
- "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"
- ]
- }
复制代码
#########################################################
本文译自:http://docs.openstack.org/admin- ... ser-management.html
译者:hochikong
|