安全加固:PCI-DSS¶
支付卡行业数据安全标准 (PCI-DSS) v3.1 提供了一个行业标准,用于数据安全要求和程序。尽管 Keystone 处理敏感数据(主要为密码),但出于担心重新实现更成熟的身份管理解决方案,它尚未尝试为部署者提供符合 PCI 标准的工具。与此同时,部署者承担了额外的负担,要么部署那些功能齐全的身份管理解决方案来支持 Keystone,要么在 Keystone 之上重新实现这些行为,而没有社区支持。
问题描述¶
Keystone 目前无法满足至少以下安全加固指南
PCI-DSS 8.1.4:在 90 天内删除/禁用不活跃的用户帐户。
PCI-DSS 8.1.6:通过在不超过六次尝试后锁定用户 ID 来限制重复访问尝试。
PCI-DSS 8.1.7:将锁定持续时间设置为至少 30 分钟,或直到管理员启用用户 ID。
PCI-DSS 8.2.3:密码/短语必须满足以下条件:1) 要求至少七个字符的最小长度。2) 包含数字和字母字符。或者,密码/短语必须具有与上述参数至少相当的复杂性和强度。
PCI-DSS 8.2.4:至少每 90 天更改一次用户密码/短语。
PCI-DSS 8.2.5:不允许个人提交与他或她过去使用的最后四个密码/短语相同的新的密码/短语。
PCI-DSS 8.3:为从网络外部发起的远程网络访问,由人员(包括用户和管理员)和所有第三方(包括供应商访问以进行支持或维护)实施双因素身份验证。
注意
可能还有其他 Keystone 目前无法满足的指南。
提议的变更¶
影子用户将用户密码移动到它们自己的表中,这恰好为实现上述所有行为提供了一个关键的基石。
为了有可能“开箱即用”地实现每个标准,我们至少需要进行以下更改和相关行为
PCI-DSS 8.1.4:存储每个用户名的最后一次成功登录时间。如果该日期超过可配置的时间段(默认:90 天),则禁止身份验证。
PCI-DSS 8.1.6:存储每个用户名的失败登录速率限制数据。如果超过可配置的速率限制,则拒绝登录。
PCI-DSS 8.1.7:我们可以使用现有的禁用属性永久禁用身份,或者实现一个速率限制算法,用于 8.1.6,从而通过设计实现此行为。
PCI-DSS 8.2.3:提供一个可配置的正则表达式,密码必须匹配(例如,使用 JSON Schema 中的
pattern属性)。PCI-DSS 8.2.4:存储每个密码的过期日期,并且仅对未过期的密码进行用户身份验证。
PCI-DSS 8.2.5:存储每个身份多个密码。我们还可以提供一个 keystone-manage 进程来修剪超过配置的最大密码数,如果需要的话。
PCI-DSS 8.3:这将作为另一个规范的一部分实现。
注意
可能需要进行其他更改才能满足指定的指南。
备选方案¶
部署者要么不依赖 Keystone 来实现这些行为,而是将 Keystone 备份到现有的身份管理解决方案,要么在 Keystone 中间件中实现这些行为。
此规范可以防止部署者为了符合 PCI 标准而部署另一个身份解决方案,并防止多个操作员进一步重复彼此的工作。
安全影响¶
此规范根据 PCI-DSS 加强了基于密码的身份验证。
通知影响¶
无。
其他最终用户影响¶
Keystone 将能够为每个新行为提供一组新的错误消息。
暴露密码过期和最后登录时间戳对于 PCI 合规性而言并不重要,因此此更改不应产生 API 影响。
性能影响¶
身份验证需要额外的检查,尽管数据来自已经正在读取的表,因此除非系统被滥用,否则性能影响应该可以忽略不计。
其他部署者影响¶
将向 Keystone 添加几个新的配置选项,以自定义每个行为。默认值可以反映 Keystone 当前的行为(我们可以简单地记录推荐的、加固的值),或者反映默认值中的推荐 PCI 合规标准。
开发人员影响¶
无。
实现¶
负责人¶
目前还没有。
工作项¶
可以独立地追求每个 PCI 标准,但同时设计所有标准、编写单个模式迁移以添加所需的列,然后编写单独的补丁以在整个发布周期中实现每个新行为可能更容易。
依赖项¶
此规范直接依赖于 影子用户提供的后端重构。
文档影响¶
记录 Keystone 部署者在确保 PCI 合规性时需要注意的部分将非常有价值。