策略服务角色默认

https://blueprints.launchpad.net/nova/+spec/policy-service-role-default

理想情况下,所有内部服务间 API 默认情况下都不应被管理员或最终用户访问。从策略默认设置中应该清楚哪些 API 应该由管理员或最终用户使用,哪些是用于内部服务间通信的 API。

问题描述

目前,内部服务间通信 API 的默认策略是管理员或项目角色,这意味着操作员需要将管理员或项目角色分配给他们的服务用户。服务用户拥有管理员或项目角色访问权限是一种不良的安全实践,因为他们可以执行管理员或项目级别的操作。

另一个问题是,仅供内部服务使用的 API 可以被普通用户和人工管理员调用。仅要求(并仅允许)服务角色访问这些 API 有助于避免有意和无意的滥用。

用例

作为操作员,我希望使用 service 角色用户以最小权限访问服务间 API。

提议的变更

我们需要确保所有内部服务间 API 的策略规则默认设置为 service 角色。例如

policy.DocumentedRuleDefault(
    name='os_compute_api:os-server-external-events:create',
    check_str='role:service',
    scope_types=['project']
)

Keystone 的 service 角色保留在现有的角色层次结构之外,该层次结构包括 adminmemberreader。将 service 角色保留在当前层次结构之外,确保我们遵循服务帐户的最小权限原则。

我们需要将所有适用于服务的服务间 API 默认设置为 service 角色。但我们可能有一些情况,其中 API 既打算用于服务用途,也用于管理员(或其他任何用户角色)用途。对于这些策略规则,我们也需要将它们默认设置为 service 以及 admin(或其他任何用户角色)角色。例如,‘role:admin or role:service’

由于 Nova 已经放弃了系统范围的实现,因此使用 service 角色的服务间通信将使用项目范围的令牌完成(目前在 devstack 设置中完成)。

以下 API 的策略将默认设置为 service 角色

  • os_compute_api:os-assisted-volume-snapshots:create

  • os_compute_api:os-assisted-volume-snapshots:delete

  • os_compute_api:os-volumes-attachments:swap

  • os_compute_api:os-server-external-events:create

备选方案

保持服务间 API 的默认设置不变,并期望操作员通过在 policy.yaml 中覆盖来处理 service 角色用户的访问权限。

数据模型影响

REST API 影响

以下 API 的策略将默认设置为 service 角色

  • os_compute_api:os-assisted-volume-snapshots:create

  • os_compute_api:os-assisted-volume-snapshots:delete

  • os_compute_api:os-volumes-attachments:swap

  • os_compute_api:os-server-external-events:create

安全影响

更容易理解服务间 API 的策略并将其限制为最小权限。

通知影响

其他最终用户影响

性能影响

其他部署者影响

如果管理员或最终用户使用服务间 API,请确保在 policy.yaml 中覆盖所需的权限,因为默认情况下它们将由 service 角色用户访问。

开发人员影响

新的 API 必须添加遵循新模式的策略。

升级影响

如果管理员或最终用户使用服务间 API,请确保在 policy.yaml 中覆盖所需的权限,因为默认情况下它们将由 service 角色用户访问。如果部署覆盖了这些策略,则他们需要开始考虑新的默认策略规则。

实现

负责人

主要负责人

gmann

功能联络人

功能联络人

dansmith

工作项

  • 修改服务间 API 的默认设置

  • 修改策略规则单元测试

依赖项

测试

修改或添加策略单元测试。

添加一个作业以启用新的默认设置,并运行 tempest 测试以确保现有的服务间 API 通信正常工作。如果需要,根据新的默认设置修改服务使用的令牌。

文档影响

应更新 API 参考,将所有服务间 API 放在单独的部分下,并提及 service 角色作为其默认设置。

参考资料

历史

修订版

发布名称

描述

2023.1

引入

2023.2

重新提出