Поведение телескопов Keystone несовместимо между nova и Cinder
Я пытался обновить нашу установку OpenStack, чтобы использовать новые параметры.enforce_new_defaults
иenforce_scope
поскольку в Валлаби для nova старые политики будут признаны устаревшими. Эта опция, похоже, присутствует во многих компонентах (nova, Cinder, Keystone, Glook и т. д.), поэтому я подумал, что было бы неплохо включить их везде. Я начал с nova и Cinder и столкнулся с интересной проблемой.
Я создал пользователяtest
без проекта по умолчанию и назначил егоadmin
разрешения в рамках системы и в одном проекте. Обе опции, упомянутые ранее, установлены на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
- НЕУДАЧА: -
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, в зависимости от того, как вы их настроили). Это действительно ожидаемо? Я что-нибудь пропустил?
Соответствующие версии:
- Краеугольное камень: 18.0.0
- Нова: 22.0.1
- Зола: 17.0.0
- Клиент OpenStack: 5.4.0
- OpenStack SDK: 0.50.0