我一直在尝试更新我们的 OpenStack 安装以使用新选项enforce_new_defaults
,enforce_scope
因为在 Wallaby 中,nova 的旧策略将被弃用。这些选项似乎存在于许多组件中(nova、cinder、keystone、glance 等),所以我认为在所有组件中启用它们是个好主意。我从 nova 和 cinder 开始,遇到了有趣的问题。
我创建了test
没有默认项目的用户,并为其分配了admin
系统范围和一个项目中的权限。之前提到的两个选项均在 nova 和 cinder 中设置true
。策略文件不存在(因为我想测试默认值)。
进行基本测试(https://docs.openstack.org/keystone/latest//admin/tokens-overview.html#authorization-scopes):
openstack token issue
给了我无范围的令牌openstack --os-system-scope=all token issue
给了我系统范围的令牌openstack --project-name=NAX.Prod token issue
给了我项目范围的令牌
到目前为止一切顺利。现在开始好玩了:
openstack volume service list
- 失败:The service catalog is empty.
openstack --os-system-scope=all volume service list
- 失败:public endpoint for volumev3 service not found
openstack --os-project-name=NAX.Prod volume service list
- 好的
系统范围的请求没有通过,因为volumev3
服务/v3/%(project_id)s
在端点 URL 中使用(仔细检查文档),因此似乎如果不对某些项目进行身份验证它就无法工作。
查看生成的策略,它似乎不支持此请求的范围:
# List all services.
# GET /os-services
#"volume_extension:services:index": "rule:admin_api"
好的,现在是新星:
openstack compute service list
- 失败:The service catalog is empty.
openstack --os-system-scope=all compute service list
- 好的openstack --os-project-name=NAX.Prod compute service list
- 失败:Policy doesn't allow os_compute_api:os-services:list to be performed.
相关政策:
# List all running Compute services in a region.
# GET /os-services
# Intended scope(s): system
#"os_compute_api:os-services:list": "rule:system_reader_api"
因此它确实看上去如预期那样工作。
也就是说,如果您想管理 OpenStack 对不同组件(列出服务)执行相同的操作,则必须使用不同的范围(不同的 OS_CLOUD 或 CLI 参数,具体取决于您的设置方式)。这真的是预期的吗?我遗漏了什么吗?
相关版本:
- Keystone:18.0.0
- 新星:22.0.1
- 煤渣:17.0.0
- OpenStack客户端:5.4.0
- OpenStack SDK:0.50.0