每一个平台、系统都会对于用户的权限进行严格的管理与控制。
openstack是一个开源的项目,我们可以直接下载其源码,进行更改以达到我们的要求。
这里只是针对于用户的权限进行管理,以keystone:
keystone是使用policy.json定义权限,其它openstack组件也是一样的,都是存在文件policy.json(在这文件中保证的是该组件对于用户身份的管理 权限的控制):
/etc/nova/policy.json
/etc/keystone/policy.json
/etc/glance/policy.json
/etc/neutron/policy.json
/etc/cinder/policy.json
keystone的policy.json文件位于:
/etc/keystone/policy.json
其内容如下:
1 {
2 "admin_required": "role:admin or is_admin:1",34 "identity:get_project": "rule:admin_required",
35 "identity:list_projects": "rule:admin_required",
36 "identity:list_user_projects": "rule:admin_or_owner",
37 "identity:create_project": "rule:admin_required",
38 "identity:update_project": "rule:admin_required",
39 "identity:delete_project": "rule:admin_required",41 "identity:get_user": "rule:admin_required",
42 "identity:list_users": "rule:admin_required",
43 "identity:create_user": "rule:admin_required",
44 "identity:update_user": "rule:admin_required",
45 "identity:delete_user": "rule:admin_required",
46 "identity:change_password": "rule:admin_or_owner",
此文件的格式为 ------------ identity:行为名 : rule:规则
每一个规则在这个文件的前面几行有规则的书写:
如34行:34 "identity:get_project": "rule:admin_required",
获取项目:rule:admin_required。这个规则在文本第二行有书写:2 "admin_required": "role:admin or is_admin:1",
如果满足这个规则,就说明这个用户可以进行前面的行为。
就34行来说:就是如果用户是管理员或者是管理员身份,他就可以进行get_project这个操作.
我们如果需要对这个行为进行一个自定义的控制的话,我们可以自行的修改policy.json文件,
并且这个文件在openstack中,是动态运行的,所以在修改之后,我们不需要去重新启动openstack。
下面是我自己做的修改:
"keystone01_role":"role:keystone01_role",
在此之前,我已经新建了一个role,名字是keystone01_role。
同时,我做了以下的修改:
"identity:create_project": "rule:keystone01_role",
我将创建项目的权限只给了keystone01_role这个角色。
这时候,我们就会发现,就算是admin管理员,他也是无法创建项目了的。
只有是keystone01_role角色的用户,才存在创建项目的权限。
要是要对其他的组件的权限进行修改的话,办法是一样的。
作者:红雨