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应该是可以创建卷的:
file
然后删除此卷。
下面设置只允许管理员角色才能创建卷,其他角色不能创建卷。

生成cinder所能用的policy.json:
[root@vms51 ~]# oslopolicy-policy-generator --namespace cinder --output-file /etc/cinder/policy.json
[root@vms51 ~]#
编辑/etc/cinder/policy.json,找到创建的位置(大概是63行),默认是:
file
如果只允许admin角色创建卷的话,修改为:
file
保存退出,这样就只有admin角色才能创建卷了,注意,保存退出即可不需要重启什么服务。下面验证tom是否还能创建卷:
file
此时已经创建不了卷了,但是不影响admin继续创建卷:
file
删除此卷。
如果允许admin和role1角色可以创建卷,则修改/etc/cinder/policy.json内容如下:
file
保存退出,这样的话,只有admin和role1两个角色才能创建卷,验证tom是否可以创建卷:
file
admin也是可以创建的:
file

相关新闻

发表回复

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

                                                                                                                                    RHCE9学习指南连载,点击阅读