Pike 系列发布说明

12.0.3-9

升级说明

  • [bug 1872737] 为签名的 EC2 凭证请求添加了 15 分钟的默认 TTL,此前 EC2 签名令牌请求的有效期为无限期。这种行为的改变是为了防止重放攻击。

关键问题

  • [bug 1872733] 修复了一个关键的安全问题,即经过身份验证的用户可以通过修改有效的 EC2 凭证来提升其权限。

  • [bug 1872735] 修复了一个安全问题,即受托人或应用程序凭证用户可以创建一个 EC2 凭证或应用程序凭证,从而允许他们获得一个提升其角色分配的令牌,超出受托或应用程序凭证中委托给他们的子集。现在,一个新的属性 app_cred_id 会自动添加到 EC2 凭证的访问 blob 中,并且受托或应用程序凭证中的角色列表会得到尊重。

安全问题

  • [bug 1872733] 修复了一个关键的安全问题,即经过身份验证的用户可以通过修改有效的 EC2 凭证来提升其权限。

  • [bug 1872735] 修复了一个安全问题,即受托人或应用程序凭证用户可以创建一个 EC2 凭证或应用程序凭证,从而允许他们获得一个提升其角色分配的令牌,超出受托或应用程序凭证中委托给他们的子集。现在,一个新的属性 app_cred_id 会自动添加到 EC2 凭证的访问 blob 中,并且受托或应用程序凭证中的角色列表会得到尊重。

  • [bug 1872737] 修复了不正确的 EC2 令牌验证实现,该实现忽略了签名请求的时间戳,这使得 EC2 和 S3 令牌请求容易受到重放攻击。默认 TTL 为 15 分钟,但可以配置。

  • [bug 1872755] 为 EC2 凭证更新 API 添加了验证,以确保用户不会更改元数据标签“trust_id”和“app_cred_id”。这些标签由 keystone 用于确定凭证允许的范围,更改这些自动标签可能会使 EC2 凭证持有者提升其访问权限,超出应用程序凭证或用于创建 EC2 凭证的受托权限。

错误修复

  • [bug 1872733] 修复了一个关键的安全问题,即经过身份验证的用户可以通过修改有效的 EC2 凭证来提升其权限。

  • [bug 1872735] 修复了一个安全问题,即受托人或应用程序凭证用户可以创建一个 EC2 凭证或应用程序凭证,从而允许他们获得一个提升其角色分配的令牌,超出受托或应用程序凭证中委托给他们的子集。现在,一个新的属性 app_cred_id 会自动添加到 EC2 凭证的访问 blob 中,并且受托或应用程序凭证中的角色列表会得到尊重。

  • [bug 1872737] 修复了不正确的 EC2 令牌验证实现,该实现忽略了签名请求的时间戳,这使得 EC2 和 S3 令牌请求容易受到重放攻击。默认 TTL 为 15 分钟,但可以配置。

  • [bug 1872755] 为 EC2 凭证更新 API 添加了验证,以确保用户不会更改元数据标签“trust_id”和“app_cred_id”。这些标签由 keystone 用于确定凭证允许的范围,更改这些自动标签可能会使 EC2 凭证持有者提升其访问权限,超出应用程序凭证或用于创建 EC2 凭证的受托权限。

12.0.3

错误修复

  • [bug 1801873] 修复了一个问题,即由于 SQL 数据库中存在的影子用户,无法删除基于 LDAP 的域。

12.0.2

错误修复

12.0.1

错误修复

  • [bug 1718747] 修复了一个回归,该回归导致删除包含用户的域时出现服务器错误。此错误修复恢复了先前删除域中命名空间的用户的行为。这仅在使用 SQL Identity 后端时适用。

  • [bug 1727726] 所有用户和组都需要一个名称。 在此修复之前,Keystone 允许 LDAP 用户和组的名称只有空白字符。 现在,Keystone 将忽略 LDAP 属性的值仅包含空白字符的用户和组,Keystone 已配置使用该属性作为实体名称。

  • [bug 1740951] 添加了一个新方法,使得 oslo.policy 示例生成脚本可以与 keystone 一起使用。 oslopolicy-policy-generator 脚本现在将生成一个包含代码中注册的覆盖和默认值的策略文件。

  • [bug 1763824] keystone.common.validation中的JSON Schema实现nullable现在如果存在枚举,则会将None添加到枚举中。

其他说明

  • [bug 1718747] 作为解决身份 SQL 后端中一个回归的一部分,该回归阻止包含用户的域被删除,通知回调已更改,以便仅当身份后端为 SQL 时才删除用户。如果您的自定义身份后端不是只读的,则在 keystone 中删除域将不会删除后端中的用户,除非您的驱动程序具有评估为 true 的 is_sql 属性。

12.0.0

新特性

  • [`blueprint policy-in-code] Keystone 现在支持在代码中注册默认策略的能力。 这使得策略文件维护更容易,允许从策略文件中删除重复的默认策略。 在 Pike 之后,部署的策略文件中应该只存在策略覆盖。 请注意,默认规则不再有默认值。 仅当找不到更具体的规则时才检查该规则,并且在代码中策略中所有规则都应在代码中找到,即使它们不在策略文件中。 要生成默认值的示例策略文件,修剪现有策略文件中的默认策略,或熟悉常规策略用法,请参阅 oslo.policy 提供的用法文档

  • 添加了一个选项 --checkkeystone-manage db_sync,该选项将允许用户检查数据库中滚动升级的状态。

    • [bug 1543048] [bug 1668503] Keystone 现在支持多种密码哈希形式。 特别是 bcrypt、scrypt 和 pbkdf2_sha512。 这些选项现在位于配置文件的 [identity] 部分。 要设置算法,请使用 [identity] password_hash_algorithm。 要设置轮数(时间复杂度,以及 scrypt 的情况下的内存使用量),请使用 [identity] password_hash_roundsscryptpbkdf2_sha512 还有进一步的调整选项。 Keystone 现在默认使用 bcrypt 作为哈希算法。 所有密码将继续使用旧的 sha512_crypt 哈希,但新的密码哈希将是 bcrypt。

升级说明

  • [`blueprint policy-in-code] Keystone 现在支持在代码中注册默认策略的能力。 这使得策略文件维护更容易,允许从策略文件中删除重复的默认策略。 在 Pike 之后,部署的策略文件中应该只存在策略覆盖。 请注意,默认规则不再有默认值。 仅当找不到更具体的规则时才检查该规则,并且在代码中策略中所有规则都应在代码中找到,即使它们不在策略文件中。 要生成默认值的示例策略文件,修剪现有策略文件中的默认策略,或熟悉常规策略用法,请参阅 oslo.policy 提供的用法文档

  • 身份后端驱动程序接口已更改。 添加了一种新方法 unset_default_project_id(project_id),用于取消为给定项目 ID 设置用户的默认项目 ID。 自定义后端实现必须实现此方法。

  • [bug 1702211] 在某些版本的/部署的 MySQL 下,密码的 created_at 字段会丢失亚秒精度。 这意味着在一秒钟内更改密码时,密码可能会以错误的顺序返回(在测试中很常见)。 此更改将密码的 created_atexpires_at 存储为整数,而不是 DATETIME 数据类型。

  • [bug 1705485] 可以从基于文件的策略中删除 change_password 保护策略。 由于逻辑已移动到代码中,因此不再使用此策略来保护自助密码更改 API。 请注意,通过 update_user API 上的策略,管理密码重置功能仍然受到保护。

    • 如果执行滚动升级,请将 [identity] rolling_upgrade_password_hash_compat 设置为 True。 这将指示 keystone 继续以旧版本(Pike 之前的版本)keystone 仍然可以验证密码的方式对密码进行哈希处理。 一旦完成所有升级,请确保将此选项设置回 False

  • 如果使用 SQL Identity 后端,则无法将资源后端配置为除 SQL 以外的任何内容。 资源后端现在必须是 SQL,这允许在需要时将外键用于域/项目。 这使得管理项目关系等更加简单。 资源高度关联,应基于 SQL。

弃用说明

    • [DEFAULT] crypt_strength 已弃用,取而代之的是 [identity] password_hash_rounds。 请注意,当 [identity] rolling_upgrade_password_hash_compat 设置为 True 时,[DEFAULT] crypt_strength 仍然使用。

    • UUID 令牌提供程序 [token] provider=uuid 已弃用,取而代之的是 Fernet 令牌 [token] provider=fernet。 随着 Fernet 令牌成为默认令牌,UUID 令牌可以在 R 版本中被删除。 这也弃用了 token-bind 支持,因为它从未针对 fernet 实现。

    • 令牌持久性驱动程序/代码(SQL)已弃用,因为它是仅由 UUID 令牌提供程序使用的。

  • [blueprint deprecated-as-of-pike] v2.0 authec2 API 在 Mitaka 版本中已被标记为已弃用,但尚未确定删除版本。 这些 API 现在将在 ‘T’ 版本中删除。 应该使用 v3 API。

安全问题

  • [bug 1703369] 在以前版本的 policy.json 文件中,identity:get_identity_provider 规则存在拼写错误。 该规则的默认值与默认规则的默认值相同(限制为管理员),因此此拼写错误并不明显。 应该审查其设置并确认没有复制该拼写错误的任何自定义规则。 特别是考虑到默认规则将在 Pike 中随着策略的移动到代码中而被删除。

    • 在像 Keystone 这样的应用程序中,使用 sha512_crypt 被认为不足以进行密码哈希处理。 建议使用 bcrypt 或 scrypt 以确保在暴露哈希时防止密码破解工具。 这是由于现代硬件(CPU、GPU、ASIC、FPGA 等)对计算哈希的时间复杂度要求。 Keystone 已移动到 bcrypt 作为默认值,不再使用 sha512_crypt 对新密码(和密码更改)进行哈希处理。 建议在升级到 Pike 后更改密码。 密码更改的风险有限,但为了获得针对破解哈希的最佳保护,建议在升级后更改密码。 然后密码更改将导致使用更安全的哈希(默认情况下为 bcrypt)将密码存储在 DB 中。

错误修复

  • [bug 1523369] 删除项目现在将导致将其从用户的默认项目中删除。 如果启用了缓存,则在用户缓存条目过期之前,更改可能不可见。

  • [bug 1615014] 现在严格执行迁移顺序。 确保升级过程按照官方记录和支持的顺序进行,首先是 expand,然后是 migrate,最后是 contract

  • [bug 1689616] 在对大型数据集执行令牌刷新时,进行了重大改进。

  • [bug 1670382] ldap config group_members_are_ids 已添加到白名单选项中,允许现在在域配置 API 和 keystone-manage domain_config_upload 中使用它

  • [bug 1676497] bindep 现在正确报告 rpm 发行版中 openssl-devel 二进制依赖项,而不是 libssl-dev

  • [bug 1684994] 这捕获了在尝试使用无效用户名或密码连接到 LDAP 后端时抛出的 ldap.INVALID_CREDENTIALS 异常,并向用户发出一条消息,而不是默认的 500 错误消息。

  • [bug 1687593] 确保用于创建 OAUTH1 请求令牌时使用的 URL 也是验证请求令牌的 URL。

  • [bug 1696574] Keystone 中的所有 GET API 现在都支持 HEAD,如果尚未实现。 所有新的 HEAD API 具有与相应的 GET API 相同的响应代码和标头。 这有助于客户端处理,尤其是缓存。

  • [bug 1700852] Keystone 现在支持缓存 GET|HEAD /v3/users/{user_id}/projects API,以提高性能。

  • [bug 1701324] 令牌主体现在仅包含身份验证响应中的唯一角色。

  • [bug 1704205] 所有用户和组都需要一个名称。 在此修复之前,Keystone 没有正确地强制执行 LDAP 用户和组的此操作。 现在,Keystone 将忽略 LDAP 属性的值不包含用于该实体名称的 Keystone 已配置使用的属性的用户和组。

  • [bug 1705485] 先前的更改删除了来自基于文件的策略的自助密码 API 上的策略。 由于用户需要进行身份验证才能更改其密码,因此通过策略进行保护没有太大的意义。 此更改从代码中删除了默认策略,因为它不再需要或由服务使用。 请注意,通过单独的端点,通过策略仍然可以保护管理密码重置。

  • [bug 1674415] 修复了 keystone 错误消息的翻译问题,在身份 API 出现任何错误消息且设置了区域设置时,该问题没有发生。

  • [bug 1688188] 创建 IdP 时,如果为其生成了一个域并在数据库中有效创建 IdP 时引发了冲突,则现在将清理自动生成的域。

  • 使用 keystone-manage db_sync –check 检查数据库状态的实现已得到纠正。 这允许用户和自动化根据日志和命令状态代码确定滚动升级的下一步是什么。

其他说明

  • [blueprint removed-as-of-pike] 所有键值存储代码、选项和文档已在 Pike 版本中删除。 删除的代码包括 keystone.common.kvs 配置选项,用于 KVS 代码,单元测试以及 KVS 令牌持久性驱动程序 keystone.token.persistence.backends.kvs。 已删除所有相关的文档。

  • [blueprint removed-as-of-pike] admin_token_auth 过滤器已从所有示例管道中删除,特别是,以下部分已从 keystone-paste.ini 中删除

    [filter:admin_token_auth]
    use = egg:keystone#admin_token_auth
    

    ADMIN_TOKEN 的功能仍然存在,但已合并到主身份验证中间件 (keystone.middleware.auth.AuthContextMiddleware) 中。

  • 目录后端 endpoint_filter.sql 已删除。 它已与 sql 后端合并,因此请将 endpoint_filter.sql 目录后端替换为 sql 后端。

  • 已删除 [security_compliance] password_expires_ignore_user_ids 选项。 每个应忽略密码到期的用户都应在用户的 options 属性中将值设置为“true”(例如 user['options']['ignore_password_expiry'] = True)通过用户更新调用。

  • [blueprint removed-as-of-pike] keystone.common.ldap 模块已从代码树中移除。它在 Newton 版本中已被弃用,转而使用具有相同功能的 keystone.identity.backends.ldap.common

  • [blueprint removed-as-of-pike] keystone-manage pki_setup 命令被添加进来,旨在通过隐藏有时难以理解的 openssl 命令来帮助开发者进行设置。由于 keystone 不再支持 PKI 令牌,也无法再提供 SSL 服务,因此不再需要此命令。此命令在 Mitaka 版本中已被弃用。

  • [blueprint removed-as-of-pike] 移除了在它们 keystone 命名空间之外直接导入驱动程序的方式。例如,身份驱动程序从 keystone.identity 命名空间加载,分配驱动程序从 keystone.assignment 命名空间加载。在 Liberty 版本中,在它们的 keystone 命名空间之外加载驱动程序已被弃用。