Keystone Federation¶
- 日期:
2015-06-22 08:00
- 标签:
联合身份验证,可扩展性
本规范旨在为 openstack-ansible 添加 Keystone 联合身份验证的支持。
Launchpad 蓝图: https://blueprints.launchpad.net/openstack-ansible/+spec/keystone-federation
私有云的运营商通常需要额外的容量或服务,这些容量或服务存在于其他私有和公有云中。OpenStack 通过 Keystone 身份联合身份验证来适应这种用例,允许来自一个云的身份凭据在另一个云中作为授权。
主要用例是私有云充当身份提供者 (IdP) 到其他云,通常是公有云。这允许在私有云数据库中找到的用户进行身份验证,以便使用由其他服务提供者 (SP) 云提供的资源。
次要用例是私有云充当 SP 到另一个私有云或充当 IdP 的外部提供者。
问题描述¶
作为用户,为了利用我的 Keystone 身份来使用其他 Keystone 支持的服务提供商的资源,我应该能够仅使用我的 Keystone 身份凭据通过服务提供商的命令行界面 (CLI) 有效地进行身份验证。
作为管理员,为了允许我的用户使用他们的 Keystone 身份与其他服务提供商一起使用,我应该能够通过 CLI 在我的 Keystone 和服务提供商 Keystone 之间建立信任关系。
作为多个云的管理员,为了在我的多个云之间提供身份联合身份验证,我应该能够在我Keystone 身份提供者云和我的 Keystone 服务提供者云之间建立信任关系。
作为管理员,为了有效地将身份提供商组和用户映射到服务提供商角色,我应该能够简单地为给定的组定义到服务提供商项目、域和角色的映射。
作为部署者,为了防止停机或中断,我应该能够以很少或没有数据平面中断的方式将我的云设置为身份提供者或服务提供者。
作为用户,为了了解可供我使用的资源,我应该能够检索信任我的身份提供商的服务提供商列表以及这些服务提供商提供的服务的服务目录。
作为管理员,为了在我的安全网络私有云和其他公共服务提供商之间使用身份联合身份验证,我应该能够轻松地在两者之间建立信任关系,而不会损害我的网络安全。
提议的变更¶
启用并配置 Keystone 联合身份验证,以一种对部署者来说简单且需要很少或没有数据平面停机的方式实现 IdP/SP 配置。最初的 SP 配置将使用基于 SAML 的身份验证和 Apache mod_shib。后续扩展支持的选项将包括基于 SAML 的 Apache mod_auth_mellon、基于 OpenID 的 Apache mod_auth_openidc、基于 Kerberos 的 Apache mod_auth_kerb/mod_auth_identity。
改进 Keystone SSL 端点的配置,以确保 IdP 和 SP 公共接口都可以通过 SSL 使用提供的服务器密钥、服务器证书、证书颁发机构证书和(可选)中间证书来提供服务。
将 Keystone 和 Utility 容器更改为使用 python-openstackclient 代替 python-keystoneclient,以确保可以使用 Keystone v3 API。这是管理联合身份验证 IdP 和 SP 配置实体的必需条件。
更改 Horizon 配置以允许它使用 Keystone v3 API。
自动化将受信任的 IdP 注册到 SP。
自动化将受信任的 SP 列表注册到 IdP。
记录并尽可能自动化将外部身份注册和映射到指定的域、项目、角色和用户。
备选方案¶
无
Playbook/Role 影响¶
os_keystone 角色需要更改任务和模板,以便促进 IdP、SP、openstackclient 和 SSL 的配置。
os_horizon 配置需要更改模板,以便促进更改为使用 Keystone v3 API。
openstack_openrc 角色可能需要更改,以便将不同的 openrc 文件放入 keystone 和 utility 容器中。
外部身份注册和映射到特定域、项目、角色和用户的自动化可以在新的 playbook/role 中完成,也可以在现有的 keystone playbook/role 中完成。
os_keystone 角色需要包含将相同的 SP 签名证书从第一个 Keystone 容器复制到所有其他容器的功能。
升级影响¶
Horizon 将被重新配置为使用 Keystone v3 API。
安全影响¶
Keystone 必须使用 SSL 实现其公共端点,以便加密和保护在 IdP 和 SP 之间通信的身份验证和身份信息。
SP 签名密钥和证书必须在拥有它的每个服务器上得到妥善保护。
性能影响¶
待定
最终用户影响¶
通过 v3 API 管理 keystone 将意味着从使用“keystone”CLI 切换到使用“openstack”CLI。
部署者影响¶
部署者将能够为 Keystone 公共端点实施指定的 SSL 证书。
开发人员影响¶
keystone Ansible 模块将被更新为使用 keystone v3 API。
依赖项¶
Keystone IdP 需要以下内容:* xmlsec1: http://packages.ubuntu.com/search?keywords=xmlsec1 * python-openstackclient: https://pypi.python.org/pypi/python-openstackclient
Keystone SP 需要以下内容:* xmlsec1: http://packages.ubuntu.com/search?keywords=xmlsec1 * libapache2-mod-shib2: http://packages.ubuntu.com/search?keywords=libapache2-mod-shib2 * python-openstackclient: https://pypi.python.org/pypi/python-openstackclient
Keystone 映射文档:* https://review.openstack.org/192850
Keystone SP 现在必须使用 uuid 令牌 * https://bugs.launchpad.net/keystone/+bug/1471289
实现¶
负责人¶
- 主要负责人
https://launchpad.net/~miguelgrinberg (miguelgrinberg)
- 其他贡献者
https://launchpad.net/~hughsaunders (hughsaunders) https://launchpad.net/~icordasc (sigmavirus24) https://launchpad.net/~jesse-pretorius (odyssey4me)
工作项¶
将现有的 Keystone Ansible 模块转换为使用 v3 API
将联合身份验证命令添加到 Keystone Ansible 模块
Keystone 公共端点 SSL 配置
Keystone/Utility 容器实现 python-openstackclient
Keystone IdP 软件部署、配置和 SP 注册
Keystone SP 软件部署、配置和 IdP 注册
记录并尽可能自动化将外部身份注册和映射到指定的域、项目、角色和用户。
测试¶
由于此功能需要两个独立的安装,因此将不会对其进行特定的门控测试。
作为这项工作实施的所有角色/playbook 中的更改都需要以确保现有的门控检查继续通过的方式进行。
文档影响¶
升级影响需要在发布说明中注明。
需要描述实施 IdP/SP 所需的 user_variables 的方法。
需要记录将外部身份注册和映射到域、项目、角色和用户的具体细节。
参考资料¶
https://docs.openstack.org/developer/keystone/configure_federation.html
https://docs.openstack.org/developer/keystone/extensions/federation.html
https://docs.openstack.org/developer/keystone/extensions/shibboleth.html
http://blog.rodrigods.com/it-is-time-to-play-with-keystone-to-keystone-federation-in-kilo/
https://zenodo.org/record/11982/files/CERN_openlab_Luca_Tartarini.pdf