策略管理器角色默认

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 更加严格。目前,它们允许 memberadmin 用户使用,但在本次更改之后,将允许 ‘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

引入