策略服务角色默认¶
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 角色保留在现有的角色层次结构之外,该层次结构包括 admin、member 和 reader。将 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 |
引入 |