PCI-DSS 密码要求 API

bp pci-dss-password-requirements-api

PCI-DSS 工作的一部分包括强制执行密码强度要求。这些要求保存在 keystone 中,但应该可以被发现,以便其他服务可以宣传和利用它们。

问题描述

Newton 版本发布了一个强制执行本地 keystone 用户密码强度的特定要求的功能。Keystone 使用这些要求来检查新用户和现有用户的密码,这在独立模式下工作良好。但是,当用户与 horizon 交互时,由于以下两个原因,体验可能会不佳

  1. 如果用户的密码未能满足要求,horizon 无法向用户描述这些要求。典型的密码系统会告知用户所需的要求,否则用户将只能猜测随机密码组合。如果要在 OpenStack 部署中有效使用 PCI-DSS,这是最重要的用例。

  2. 客户端库无法知道 keystone 强制执行的密码要求(包括 Horizon、OSC、python-keystoneclient 绑定等)。用于强制执行密码要求的正则表达式仅在 keystone 内部使用。通过让其他服务(如 horizon)发现正则表达式,它们可以在向 keystone 发出密码请求之前执行快速密码验证。

提议的变更

我们可以通过 API 使密码要求和要求的描述可发现。这可以通过利用现有的 域配置 API 来完成。必要的变化是将 keystone.conf [security_compliance] 变成域配置 API 的白名单部分。该更改需要使 API 对这些值只读。以下是使用域配置 API 获取密码要求的示例

GET /v3/domains/default/config/security_compliance/password_regex
GET /v3/domains/default/config/security_compliance/password_regex_description

为了确保所有用户都可以获取密码强度要求,可以将它们隔离到自己的 API 中,使用自己的路由器、控制器等。

如果未启用 PCI-DSS 密码检查,则将返回 404 Not Found,表示由于未在配置中,因此没有要强制执行的要求。

备选方案

另一种选择是创建一个专门的 API,以返回 keystone.conf 中已知的密码要求。这将是一个更简单的 API,但它将不会利用任何域配置 API。这可能是一个有用的选项,具体取决于将 PCI-DSS 密码配置列入白名单的侵入性程度。如果未来 PCI-DSS 支持在每个域中可用,则必须重新设计此功能。

另一种选择是将变量通过 keystone 配置文件的副本暴露给 horizon。此选项要求 horizon 和 keystone 始终具有相同的要求。如果这两个信息源不同步,用户体验将非常糟糕,因为 horizon 将宣传错误的要求或检查过时的要求。

安全影响

如果通过现有的域配置 API 实现此功能,则存在一些关于域配置策略的安全问题。此更改需要 keystone 放宽域配置策略,以便所有用户都可以使用它,而不仅仅是管理员。如果策略未放宽,则使用域配置实现规范将仅对管理员或具有管理员角色的用户有用。我们需要注意的另一个安全问题是确保无法通过 API 修改密码要求。如果未在部署者或管理员级别处理,则通过 API 更改整个域或部署的密码要求将是一个安全问题。

如果我们将返回密码要求信息的功能隔离到自己的 API 中,我们可以为其构建一个不干扰现有策略的策略。这是上述第一种替代方案的优势。

无论如何,用于请求密码要求信息的 API 都需要受到保护。如果密码信息未受到保护,潜在的攻击者很容易获得部署的密码要求并使用这些要求定制攻击。

通知影响

无。

其他最终用户影响

这将使最终用户更容易在启用了 PCI-DSS 的部署中使用 horizon 来管理他们的密码。

性能影响

Keystone 密码管理 API 可能需要额外的调用才能获取密码要求。这并不是一个主要的性能问题,因为获取密码要求的调用非常轻量级,并且密码通常不会经常更改。

其他部署者影响

此更改不需要部署者进行任何额外工作。一旦部署者启用了 PCI-DSS,就可以从 API 中检索密码要求信息。如果部署者更改了信息,则可以通过 API 检索到新的要求。

开发人员影响

此更改需要 horizon 的后续规范或补丁来使用此更改。

实现

负责人

主要负责人

Lance Bragstad <lbragstad@gmail.com>

其他贡献者

工作项

  • 提出一个补丁,用于域配置 API,以允许查找默认配置文件,keystone.conf

  • 提出一个补丁,用于使用域配置 API 白名单 keystone.conf [security_compliance] password_regexkeystone.conf [security_compliance] password_regex_description 检索。

  • 更新策略以允许获取密码强度要求

  • 测试以确保无法通过域配置 API 修改密码要求。

  • 将开发人员信息添加到 keystone PCI-DSS 文档

依赖项

无。

文档影响

文档影响相对较小,因为它只是一个 API 调用。

参考资料

无。