Keystone 中的联合服务提供商¶
本规范描述了在 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 可以爆发到 cloud1 和 cloud2,而 userB 可以爆发到 cloud2 和 cloud3。这些约束应该反映在为每个用户提供的服务目录中)。
由于 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