openstack里通过oslopolicy-policy-generator 对角色授权
介绍
openstack里是通过角色授权
openstack是由众多模块组成的,包括keystone、cinder、nova、neutron等,每个模块都是独立的通过它自己配置目录里的policy.json对角色进行授权。
比如/etc/neutron/policy.json设置哪些角色可以管理网络
再比如/etc/cinder/policy.json设置哪些角色可以管理卷等
默认cinder的配置目录里却是没有policy.json的:
[root@vms51 ~]# ls /etc/cinder/
api-paste.ini cinder.conf resource_filters.json rootwrap.conf rootwrap.d volumes
[root@vms51 ~]#
这里默认是允许所有角色都能管理卷。
如果为某个组件生成policy.json语法为:
oslopolicy-policy-generator --namespace 组件名 --output /etc/组件/policy.json
实验过程
创建一个用户tom、项目game,角色role1,然后把三者关联在一起:
[root@vms51 ~]# source keystonerc_admin
[root@vms51 ~(admin)]#
[root@vms51 ~(admin)]# openstack user create --password redhat tom
...输出...
[root@vms51 ~(admin)]# openstack project create game
...输出...
[root@vms51 ~(admin)]# openstack role add --user tom --project game role1
[root@vms51 ~(admin)]#
[root@vms51 ~(admin)]# openstack role assignment list --name | grep role1
| role1 | tom@Default | | game@Default | | | False |
[root@vms51 ~(admin)]#
这里我们创建角色role1,并没有指定此角色具备什么权限,按照刚才的解释,tom应该是可以创建卷的:
然后删除此卷。
下面设置只允许管理员角色才能创建卷,其他角色不能创建卷。
生成cinder所能用的policy.json:
[root@vms51 ~]# oslopolicy-policy-generator --namespace cinder --output-file /etc/cinder/policy.json
[root@vms51 ~]#
编辑/etc/cinder/policy.json,找到创建的位置(大概是63行),默认是:
如果只允许admin角色创建卷的话,修改为:
保存退出,这样就只有admin角色才能创建卷了,注意,保存退出即可不需要重启什么服务。下面验证tom是否还能创建卷:
此时已经创建不了卷了,但是不影响admin继续创建卷:
删除此卷。
如果允许admin和role1角色可以创建卷,则修改/etc/cinder/policy.json内容如下:
保存退出,这样的话,只有admin和role1两个角色才能创建卷,验证tom是否可以创建卷:
admin也是可以创建的: