OpenStack Kolla-Ansible 2025.1域管理员权限限制问题咨询
解决OpenStack多域下仅域内管理员权限的问题
可以创建仅拥有自身域管理员权限的用户,问题出在Keystone的策略配置和Horizon的域隔离设置上,以下是具体调整步骤:
Keystone侧策略调整
默认的Keystone admin角色策略允许跨域操作,需要修改policy.yaml(Kolla-Ansible部署中路径通常为/etc/kolla/keystone/policy.yaml)中的规则,限制域管理员只能操作所属域内的资源:
- 针对域级操作,修改如下规则:
identity:list_domains: "rule:admin_required and user.domain_id:%(target.domain.id)s" identity:show_domain: "rule:admin_required and user.domain_id:%(target.domain.id)s" identity:update_domain: "rule:admin_required and user.domain_id:%(target.domain.id)s" identity:delete_domain: "rule:admin_required and user.domain_id:%(target.domain.id)s" - 针对域内用户、项目的操作,也要添加域匹配条件,比如:
identity:list_users: "rule:admin_required and user.domain_id:%(target.user.domain_id)s" identity:list_projects: "rule:admin_required and user.domain_id:%(target.project.domain_id)s"
修改完成后,重新配置Keystone服务使生效:
kolla-ansible reconfigure -i inventory --tags keystone
Horizon侧配置调整
需要修改Horizon的配置文件(路径通常为/etc/kolla/horizon/local_settings.py),启用严格的域隔离:
- 确保已开启多域支持(你已经启用,可跳过):
OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True - 指定域管理员角色,并限制域管理员的可见范围:
OPENSTACK_KEYSTONE_DOMAIN_ADMIN_ROLES = ['admin'] OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = 'Default' # 限制域管理员只能看到所属域的资源 OPENSTACK_KEYSTONE_DOMAIN_SCOPE = True - 确保Horizon使用Keystone的策略进行权限控制:
POLICY_FILES = { 'identity': '/etc/kolla/keystone/policy.yaml' }
修改完成后,重新配置Horizon服务:
kolla-ansible reconfigure -i inventory --tags horizon
验证操作
- 创建目标域的管理员用户:
openstack user create --domain your-target-domain --password your-password domain-admin-user - 给该用户分配目标域的admin角色:
openstack role add --domain your-target-domain --user domain-admin-user admin - 用该用户登录Horizon,尝试切换到默认域或操作默认域内的资源,应该会被权限拒绝,符合预期。
内容的提问来源于stack exchange,提问作者user3510945
相关产品推荐
相关产品推荐

