Keystone 中的联合服务提供商

bp k2k-service-providers

本规范描述了在 Juno 版本中发布的 Keystone2Keystone 联合身份验证所需的主要步骤,旨在改善用户体验并避免破坏 Keystone 的架构。

问题描述

Juno 中提供的 Keystone2Keystone 联合身份验证当前标记为 实验性,并且缺少一些重要环节。远程服务在服务目录中标记为区域,但无法使用本地身份服务颁发的令牌访问它们。除此之外,并非所有必需的 URL 都已指定,这迫使客户端必须事先知道它们。因此,需要重新设计一些方面

  • 区域 不应用于指示客户端可以爆发到的远程服务。

  • 客户端应该能够获取所有必要的信息,以便爆发到远程云 (例如 authURL 以及特定于 SAML2 身份验证流程的 URL)。

提议的变更

Keystone 应该增强一组新的对象,称为 服务 提供商 (/v3/OS-FEDERATION/service_providers/),用于配置受信任的服务提供商。存储在此对象中的信息应包括以下信息:

  • authURL - 客户端在通过 SAML2 联合协议进行身份验证后可以获取其令牌的 URL。示例:https://keystone.example.com:5000/v3/OS-FEDERATION/identity_providers/<idp>/protocols/<protocol>/auth

  • 特定 URL - 通常是用于发送断言的专用 URL。示例:https://keystone.example.com:5000/Shibboleth.sso/POST

每个 服务 提供商 应该由用户指定的系统唯一名称标识,类似于 Keystone 生态系统内已有的 身份 提供商身份 API 应该增强 5 个新的 服务 提供商 操作

  • 创建

  • 删除

  • 获取

  • 列表

  • 更新

除此之外,服务目录应该扩展一个新的条目 - service_providers。希望爆发到远程云的用户将查询服务目录中的该条目。可选地,可以添加基于每个用户的 服务 提供商 的适当过滤 (例如,userA 可以爆发到 cloud1cloud2,而 userB 可以爆发到 cloud2cloud3。这些约束应该反映在为每个用户提供的服务目录中)。

由于 Keystone2Keystone 联合身份验证在 Juno 版本中标记为实验性,因此不会提供用于将配置为 区域 的服务提供商迁移到第一类 服务 提供商 对象的脚本/过程。

备选方案

  • 继续使用区域作为用户可以爆发到的远程端点,但前提是用户至少事先知道远程服务的 authURL 以及要使用的联合协议。

  • 接受 SAML2 服务提供商元数据文件作为创建 服务 提供商 对象所需的输入。这意味着用户将在创建和更新关于 服务 提供商 的信息时,将服务提供商元数据作为请求体上传。从部署者/管理员的角度来看,这是一个重要的简化,尤其是在将配置大量的服务提供商 (100 个或更多) 时 - 管理员只需上传自动生成的文件,而不是为每个 服务 提供商 编造 URL 安全的 id。但是,这将改变 服务 提供商 对象将被标识的方式。这可能是由 Keystone 生成的 UUID 十六进制值,而不是用户指定的 id 值。为了更好地 服务 提供商 管理,HTTP GET 调用应该通过过滤器进行增强,其中将指定 URL 安全的 entityID,例如 GET /v3/OS-FEDERATION/service_providers?entityID=http%3A//sp.example.com/Shibboleth.sso/ADFS

安全影响

描述对系统造成的任何潜在安全影响。需要考虑的一些项目包括

  • 此更改是否涉及敏感数据,例如令牌、密钥或用户数据?

它会更改服务目录,但会以累积的方式更改结构,以不破坏现有消费者,也不破坏公开的数据集。

  • 此更改是否以可能影响安全性的方式更改了 API,例如访问敏感信息的新方式或登录的新方式?

否。

  • 此更改是否涉及密码学或哈希?

否。

  • 此更改是否需要使用 sudo 或任何特权?

否。

  • 此更改是否涉及使用或解析用户提供的数据?这可能是直接在 API 级别,或间接例如更改缓存层。

否。

  • 此更改是否会启用资源耗尽攻击,例如允许单个 API 交互消耗大量的服务器资源?这方面的一些例子包括为每个连接启动子进程,或 XML 中的实体扩展攻击。

否。

通知影响

请指定任何通知的更改。无论是额外的通知、对现有通知的更改,还是删除通知。

否。

其他最终用户影响

python-keystoneclient 需要增强用于管理 服务 提供商 对象的操作,正确解释服务目录的新结构,列出用户可以爆发到的所有远程云/服务,并重用现有的联合身份验证插件进行身份验证过程。

性能影响

没有性能影响。

其他部署者影响

没有额外的配置选项,新功能仅在启用 federation 扩展后才会启用。

开发人员影响

无。

实现

负责人

主要负责人

  • Marek Denis <marek-denis>

  • Rodrigo Duarte <rodrigods>

其他贡献者

工作项

  • 弃用 v3 区域 中的 url 属性

  • 添加 服务 提供商 对象以及相关的 API

  • service_providers 对象添加到服务目录

  • 记录已实现的变化

依赖项

无。

文档影响

所有更改都必须记录:* 一组新的 API * 服务目录的新结构

参考资料

Etherpad 站点:https://etherpad.openstack.org/p/keystone2keystone