Поведение телескопов 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