Keystone 中的原生 SAML

蓝图 native-saml

自 Icehouse 版本发布以来,Keystone 已经具备使用联合身份提供商的能力。 这通过 Apache 模块(如 mod_shibmod_auth_mellon)完成。 不幸的是,它们存在一些关键限制

  1. 没有 REST API 来管理 IdP 或其他配置

  2. 必须重启/重新加载 Apache 才能重新加载配置

这对于在引导时配置单个 IdP 的小型云来说是可以的,但在 IdP 可能更动态的大型云中则会失效。

问题描述

用例

  1. 作为公有/私有云运营商,我不想为每个域设置和管理联合配置。 我希望将此责任委派给域管理员。 然后,域管理员可以使他们的域成员使用他们想要的任何 IdP。

提议的变更

Keystone 中将进行以下更改

  1. 创建 API 来管理后端中的 IdP

  2. 创建 API 来管理后端中的 SAML 属性映射

  3. 创建一个新的端点来与 IdP 进行 SAML 协商

Keystone 团队将不会编写用于解释 SAML2 的代码。 相反,我们将使用我们 已经作为依赖项的 pysaml2 库。

备选方案

有几种替代方案

  1. 什么都不做,但这不会让任何人满意。

  2. 修复 mod_shib/mod_auth_mellon 以使其更具动态性。

    对于 C 专家来说,使模块更动态地重新加载其配置是完全可行的。 真正使其变得困难的是管理配置的 API。 Keystone 需要编写 XML 配置文件并将它们分发到所有 Keystone 节点。

安全影响

此代码将管理 Keystone 和 IdP 之间的协商。 如果我们搞错了,肯定会产生影响。 在最坏的情况下,我们正在打开一个新的攻击向量。

我们还在利用 pysaml2 库来完成繁重的工作。 我们有额外的责任确保该代码是正确的,并对处理安全问题有一个良好的流程。

我们将使用 x509 证书来验证和签名 SAML 文档。 操作员需要管理和轮换这些证书。(这与当前使用 Apache 模块进行联合的操作员没有区别。)

通知影响

我们可能对某些 IdP 交互有通知。 还没有具体内容。

其他最终用户影响

最终用户不应该能够察觉到我们正在提供联合位。 对他们来说,一切都将是透明的。

性能影响

这不应该对性能产生直接的重大影响。 签名/验证文档可能会阻止进程更长时间,但这不应该对 Keystone 产生太大影响。

其他部署者影响

  1. 安全影响 部分中记录了证书轮换。

  2. 必须使用中间件才能利用此功能。

  3. 部署过程必须使用 API 来管理 IdP 配置,而不是管理现有的 XML 文件。

开发人员影响

没有重大影响。

实现

负责人

主要负责人

dstanek (David Stanek <dstanek@dstanek.com>)

工作项

工作项记录在 提议的更改

依赖项

只是 pysaml2 库。

文档影响

  1. 我们需要更改/扩充联合文档,以显示如何设置和使用此功能。

  2. 需要对 Keystone API 文档进行更新

参考资料