OpenStack J版本 policy.json限制用户action权限
首先,我们知道在keystone中有User(用户)、Project(租户)、role(角色)三个概念。
keystone命令与模型的对应关系:
1.创建租户
2.创建用户
3.创建角色
4.将角色给用户和租户
其中actor_id表示用户id,target_id表示租户id
只是这样,权限并没有限制住。。。。
其实在OpenStack中,真正限制用户action操作的是policy.json文件,每一个模块都有这样一个文件,在/ect/模块名/下
打开/etc/nova下的policy.json来看:
左侧代表左右域和域内的action,右侧代表一个策略,只有当用户通过这个策略之后,才具有左侧action的操作权限
这个策略目前包含三种:role型、rule型、generic型。
role型如:"role:admin";
rule型如:"admin_or_owner"
generic型如:"is_admin:True or project_id:%(project_id)s"
下面以创建虚拟机为例,看policy流程:
开始在/usr/lib/python2.7/site-packages/nova/compute/api.pi中
进入/usr/lib/python2.7/site-packages/nova/policy.py的
/usr/lib/python2.7/site-packages/nova/openstack/common下的policy.py下的enforce方法
接下来加载规则,找policy地址,检测policy.json是否修改过,是否重新读取policy.json文件并解析
此py中还包含Rules类以及各种Check类
实验将/etc/nova/policy.json中的"compute:create": "",改为"compute:create": "role:admin",
source demo-openrc.sh
用nova命令创建虚拟机
无法创建:权限不够
或者使用dashboard来验证
使用demo用户登录