策略管理器角色默认¶
https://blueprints.launchpad.net/nova/+spec/policy-manager-role-default
这是 SRBAC 目标阶段-3
项目经理可以使用项目级别的管理 API,并由在项目上具有经理角色的用户表示。它旨在对项目资源执行比项目成员更特权的操作。项目经理还可以执行项目成员或项目读取器允许的任何操作。
问题描述¶
目前,计算 API 策略默认值具有管理员(在所有项目中具有管理员权限)、项目成员和项目读取器角色。但是,许多项目级别 API 应该默认给比普通用户(成员、读取器角色用户)权限更高的用户。与其允许此类 API 给全局管理员,不如在项目中拥有权限更高的用户。
用例¶
将项目级别管理 API 保留给权限低于管理员且高于项目成员角色的用户。
提议的变更¶
Keystone 在项目级别引入了一个新的 ‘manager’ 角色。项目经理可以使用项目级别的管理 API,并旨在对项目资源执行比项目成员更特权的操作。
项目经理可以使用项目级别的管理 API,并由在项目上具有经理角色的用户表示。它旨在对项目资源执行比项目成员更特权的操作。项目经理还可以执行项目成员或项目读取器允许的任何操作(这由 keystone 角色推导处理,因此管理员角色推导经理角色,经理角色推导成员角色,成员角色推导读取器角色)。Nova 使用经理角色的一个很好的例子是在锁定和解锁实例中。
策略检查字符串中的项目经理角色
policy.RuleDefault(
name="project_manager",
check_str="role:manager and project_id:%(project_id)s",
description="Default rule for project-level management APIs."
)
在策略规则中使用它(具有管理员 + 经理权限):(因为我们希望保持遗留管理员行为不变,所以仍然需要继续授予管理员角色项目级别管理 API 的访问权限。)
policy.DocumentedRuleDefault(
name='os_compute_api:os-migrate-server:migrate
check_str='role:admin or (' + 'role:manager and project_id:%(project_id)s)',
description="Cold migrate a server without specifying a host",
operations=[
{
'method': 'POST',
'path': '/servers/{server_id}/action (migrate)'
}
],
)
以下 API 策略将默认给 PROJECT_MANAGER_OR_ADMIN 角色¶
当前默认值:ADMIN -> 新默认值:PROJECT_MANAGER_OR_ADMIN
‘os_compute_api:os-migrate-server:migrate’ (“在不指定宿主机的情况下冷迁移服务器”)
‘os_compute_api:servers:migrations:force_complete’ (“强制完成给定服务器的正在进行的实时迁移”)
‘os_compute_api:servers:migrations:delete’ (“删除(中止)正在进行的实时迁移”)
当前默认值:PROJECT_MEMBER_OR_ADMIN -> 新默认值:PROJECT_MANAGER_OR_ADMIN
注意
这将使以下 API 更加严格。目前,它们允许
member和admin用户使用,但在本次更改之后,将允许 ‘manager’ 和 ‘admin’ 用户使用(禁止 ‘member’ 用户使用)。
‘os_compute_api:os-deferred-delete:restore’ (“恢复软删除的服务器”)
‘os_compute_api:os-deferred-delete:force’ (“在延迟清理之前强制删除服务器”)
引入新的策略以允许更多操作给 ``manager`` 用户
有一些 API(如下所示)应该允许
manager用户使用,但我们只有一个策略来对特定宿主机执行操作或在 API 响应中返回宿主机信息。为了将宿主机特定的操作/信息保留给admin,将其他操作保留给admin-or-manager,我们需要引入一个单独的新策略来处理宿主机特定的内容,该策略将默认给admin(意味着宿主机特定的内容没有变化),而现有的策略将用于非宿主机内容,并将默认给admin-or-manager
实时迁移
现有策略
os_compute_api:os-migrate-server:migrate_live(实时迁移服务器)默认值更改为
ADMIN->PROJECT_MANAGER_OR_ADMIN
新策略
os_compute_api:os-migrate-server:migrate_live:host(实时迁移服务器到特定宿主机)默认值:
ADMIN
列出服务器(正在进行的实时)迁移
现有策略
os_compute_api:servers:migrations:index(列出给定服务器的正在进行的实时迁移)默认值更改为:
ADMIN->PROJECT_MANAGER_OR_ADMIN
新策略
os_compute_api:servers:migrations:index:host(列出给定服务器的正在进行的实时迁移,包含宿主机信息)默认值:
ADMIN
列出迁移
现有策略
os_compute_api:os-migrations:index(列出迁移,不包含宿主机信息)默认值更改为:
ADMIN->PROJECT_MANAGER_OR_ADMIN
新策略
os_compute_api:os-migrations:index:host(列出迁移,包含宿主机信息)默认值:
ADMIN
os_compute_api:os-migrations:index:all_projects(列出跨项目的迁移)默认值:
ADMIN这些 API 允许列出所有或跨项目的迁移。因为我们正在将当前策略
index打开给project manager用户,我们需要一个单独的新策略来控制只有admin才能访问所有或跨项目的迁移,而project manager只能访问他们自己项目的迁移。
注意
目前,项目成员可以执行以下服务器操作。可能不是一个好主意对它们添加更严格的访问控制。我们将继续允许项目成员用户执行这些操作。通过 keystone 推导的角色,项目经理也可以在他们的项目服务器上执行以下操作。
‘os_compute_api:os-lock-server:lock’ (“锁定服务器”)
‘os_compute_api:os-lock-server:unlock’ (“解锁服务器”)
‘os_compute_api:os-pause-server:pause’ (“暂停服务器”)
‘os_compute_api:os-pause-server:unpause’ (“取消暂停暂停的服务器”)
‘os_compute_api:os-rescue’ (“救援服务器”)
‘os_compute_api:os-unrescue’ (“取消救援服务器”)
‘os_compute_api:os-suspend-server:resume’ (“恢复挂起服务器”)
‘os_compute_api:os-suspend-server:suspend’ (“挂起服务器”)
‘os_compute_api:servers:resize’ (“调整服务器大小”)
‘os_compute_api:servers:confirm_resize’ (“确认服务器调整大小”)
‘os_compute_api:servers:revert_resize’ (“撤销服务器调整大小”)
‘os_compute_api:servers:reboot’ (“重启服务器”)
‘os_compute_api:servers:rebuild’ (“重建服务器”)
‘os_compute_api:servers:rebuild:trusted_certs’ (“使用受信任镜像证书 ID 重建服务器”)
备选方案¶
保持管理员或成员执行所有项目级别管理操作。
数据模型影响¶
无
REST API 影响¶
以下 API 策略默认值将被更改
当前默认值:ADMIN -> 新默认值:PROJECT_MANAGER_OR_ADMIN
‘os_compute_api:os-migrate-server:migrate’
‘os_compute_api:servers:migrations:force_complete’
‘os_compute_api:servers:migrations:delete’
‘os_compute_api:os-migrate-server:migrate_live’
‘os_compute_api:servers:migrations:index’
‘os_compute_api:os-migrations:index’
当前默认值:PROJECT_MEMBER_OR_ADMIN -> 新默认值:PROJECT_MANAGER_OR_ADMIN
‘os_compute_api:os-deferred-delete:restore’
‘os_compute_api:os-deferred-delete:force’
引入以下新策略默认值为 PROJECT_MANAGER_OR_ADMIN
‘os_compute_api:os-migrate-server:migrate_live:host’
‘os_compute_api:servers:migrations:index:host’
‘os_compute_api:os-migrations:index:host’
‘os_compute_api:os-migrations:index:all_projects’
安全影响¶
通过添加项目经理角色来处理项目资源管理活动,提供更安全的 RBAC。
通知影响¶
无
其他最终用户影响¶
以下 API 策略默认值将不允许 ‘member’ 角色用户使用,他们需要在他们的项目中具有 ‘manager’ 角色才能继续执行这些操作。
‘os_compute_api:os-deferred-delete:restore’
‘os_compute_api:os-deferred-delete:force’
性能影响¶
无
其他部署者影响¶
以下 API 策略默认值从 member 更改为 manager 角色,请确保在 policy.yaml 中覆盖所需的权限,或将部署移动到新的默认值。
‘os_compute_api:os-deferred-delete:restore’
‘os_compute_api:os-deferred-delete:force’
引入了新的策略来控制宿主机特定的操作/信息。以下策略的默认值已更改为也允许项目 ‘manager’ 角色。
‘os_compute_api:os-migrate-server:migrate_live’
‘os_compute_api:servers:migrations:index’
如果您使用其他权限覆盖了上述策略,则也需要为新策略覆盖相同的权限
‘os_compute_api:os-migrate-server:migrate_live:host’
‘os_compute_api:servers:migrations:index:host’
开发人员影响¶
新的 API 必须添加遵循新模式的策略。
升级影响¶
引入了新的策略来控制宿主机特定的操作/信息。以下策略的默认值已更改为也允许项目 ‘manager’ 角色。
‘os_compute_api:os-migrate-server:migrate_live’
‘os_compute_api:servers:migrations:index’
如果您使用其他权限覆盖了上述策略,则也需要为新策略覆盖相同的权限
‘os_compute_api:os-migrate-server:migrate_live:host’
‘os_compute_api:servers:migrations:index:host’
实现¶
负责人¶
- 主要负责人
gmaan
功能联络人¶
- 功能联络人
gmaan
工作项¶
将项目级别管理 API 的默认值修改为
manager角色修改策略规则单元测试以使用 service 和 manager 角色令牌
将已更改策略的 Tempest 测试移动到新的默认值。
依赖项¶
无
测试¶
修改或添加策略单元测试。将已更改策略的 Tempest 测试移动到新的默认值。
文档影响¶
‘manager’ 角色的 API 默认值将在策略规则文档以及策略示例文件中更新。
参考资料¶
历史¶
发布名称 |
描述 |
|---|---|
2025.2 Flamingo |
引入 |