Queens 系列发布说明

13.0.4-9

升级说明

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

  • 作为性能改进,基础映射驱动的 get_domain_mapping_list 方法现在接受一个可选的命名参数 entity_type,可用于仅获取给定实体类型的映射。由于此新的调用签名已在 identity.core 模块中使用,因此期望树外自定义映射驱动的作者/维护者相应地更新其 get_domain_mapping_list 方法的实现。

关键问题

  • [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 1773967] 修复了一个问题,即仅通过组 membership 拥有角色分配,而不是通过直接分配的用户可以创建但无法使用应用程序凭证。重要的是要注意,仅通过映射组 membership 拥有角色分配的联合用户仍然无法创建应用程序凭证。

  • [bug 1831918] 凭证现在记录 cadf 审计消息。

  • [bug 1856881] keystone-manage bootstrap 可以在升级场景中运行,其中存在名为 adminmemberreader 的预先存在的领域特定角色。

  • [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 1885753] Keystone 的 SQL 身份后端现在会重试更新用户请求,以安全地处理两个客户端同时更新用户时的陈旧数据。

13.0.3

错误修复

  • [bug 1780503] 现在通知包装器会将发起者的 id 设置为给定的用户 id。这修复了一个问题,即身份.authentication 事件会导致发起者 id 成为随机的默认 UUID,而不是用户在对 keystone 进行身份验证时的用户 id。

  • [bug 1782922] 修复了 Keystone 随意返回第一个 RDN 作为用户 ID 的问题,无论它是否与配置的“user_id_attribute”匹配。这会破坏“group_members_are_ids”设置为 False 且“user_id_attribute”不在 DN 中的部署。此补丁将在第一个 RND 与配置的“user_id_attribute”不匹配时执行按 DN 查找。

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

  • [bug 1840291] 为 delete_credential_for_user 方法添加重试,以避免在并发删除大量凭证时发生 DBDeadlocks。

  • [bug 1843609 <https://bugs.launchpad.net/keystone/+bug/1843609>] 修复了一个问题,即系统范围的令牌无法用于列出用户和组(例如,GET /v3/users 或 GET /v3/groups),如果 keystone.conf [identity] domain_specific_drivers_enabled=True 并且 API 将返回 HTTP 401 Unauthorized。这些 API 现在在使用领域特定驱动程序时识别系统范围的令牌。

13.0.2

错误修复

13.0.1

错误修复

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

13.0.0

序言

此版本增加了对应用程序凭证的支持,这是一种允许应用程序和自动化工具与 keystone 身份验证的新方法。与其在应用程序的配置文件中存储用户名和密码(这可能存在安全风险),现在可以创建应用程序凭证,以允许应用程序进行身份验证并获取预设的作用域和角色分配。这对于 LDAP 和联合用户尤其有用,他们现在可以将云管理任务委托给 keystone 特定的资源,而不是与 keystone 共享外部管理的凭证并冒着危及这些外部系统的风险。用户可以将角色分配的子集委托给应用程序凭证,从而可以策略性地限制应用程序的访问权限到所需的最低限度。与密码不同,用户可以拥有多个活动的应用程序凭证,这意味着它们可以在不导致使用它们的应用程序停机的情况下进行轮换。

新特性

  • [蓝图 unified-limit] Keystone 现在支持统一限制。添加了两个资源,称为 registered limitlimit,并支持一系列相关的 API。这些 API 现在是实验性的。这意味着它们不够稳定,并且可能会在不向后兼容的情况下进行更改。一旦统一限制功能准备好用于消费,这些 API 将被标记为稳定。

  • [蓝图 application-credentials] 用户现在可以创建应用程序凭证,这是一种新的 keystone 资源,可以为应用程序提供从 keystone 获取带有预设作用域和角色分配的令牌的手段。要使用应用程序凭证进行身份验证,应用程序可以使用带有“application_credential”身份验证方法的常规令牌 API。

  • [蓝图 system-scope] Keystone 现在支持将角色分配给系统上的用户和组。因此,具有系统角色分配的用户和组将能够请求系统范围的令牌。已向 keystone-manage bootstrap 添加了额外的逻辑,以确保管理员在项目和系统上具有角色。

  • [蓝图 project-tags] 项目具有一个新的属性,称为标签。这些标签是简单的字符串,可用于允许项目被过滤/搜索。项目标签将具有以下属性

    • 标签区分大小写

    • ‘/’ 和 ‘,’ 不允许出现在标签中

    • 每个项目最多可以有 100 个标签

    • 每个标签最多可以有 255 个字符

    请参阅 项目标签

    项目标签的实现遵循 API 工作组 制定的指南

  • token_formatter 实用程序类已从 fernet 移动到默认令牌目录。这是为了允许与其他令牌提供程序重用功能。专门使用 fernet 工具的任何部署都可能受到影响,并且需要相应地进行调整。

升级说明

  • trusts 表现在有一个 expires_at_int 列,它将过期时间表示为整数而不是 datetime 对象。这将防止与某些版本的 MySQL 中日期对象存储方式相关的舍入错误。expires_at 列仍然存在,但将在 Rocky 中删除。

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

  • 如果正在使用 SQL Identity 后端,则无法将资源后端配置为除 SQL 以外的任何内容。资源后端现在必须是 SQL,这允许在域/项目上使用外键,无论在哪里需要。这使得管理项目关系等变得更加简单。无法配置非 SQL 资源后端的问题自 Ocata 以来的 Keystone 中一直存在。这消除了复杂性,并避免了为了更好的模型而进行一些丑陋的向后移植 SQL 迁移的需要。资源高度关联,应基于 SQL。

弃用说明

  • policies API 已弃用。Keystone 不是策略管理服务。

  • /OS-FEDERATION/projects/OS-FEDERATION/domains API 已弃用,以支持 /v3/auth/projects/v3/auth/domains API。这些 API 最初在 Juno 发布周期中被标记为已弃用,但我们从未停止使用 versionutils 来自 oslo。有关此弃用的更多信息,请参见 补丁,该补丁提出了弃用。

  • [bug 1728690] member_role_idmember_role_name 配置选项用于为 keystone v2 角色分配创建默认成员角色,但随着 v2 API 的删除,不再需要创建此默认角色。此选项已弃用,将在 S 版本中删除。如果您依赖于此成员角色的可预测角色名称和 ID,则需要更新您的工具。

  • trust 功能的 enabled 配置选项已弃用,将在下一个版本中删除。Trusts 将始终启用。

错误修复

  • [bug 1749268] keystone-manage bootstrap 命令现在确保管理员具有系统角色分配。这可以防止操作员锁定自己出系统级 API。

  • [bug 1291157] 在令牌验证期间,现在将验证身份提供者信息。如果从 keystone 服务提供者中删除了身份提供者,则与该身份提供者关联的令牌将被视为无效。

  • [bug 1524030] 不会将撤销记录写入 revocation_event 表,当禁用域或项目时。这些记录仅在令牌验证过程中使用。为了撤销事件,项目或域将在令牌验证时在线验证。这减少了数据库膨胀,同时在令牌验证期间保持安全性。

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

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

  • [bug 1727099] 当用户尝试更改密码时,总数(包括新密码)不应大于或等于 unique_last_password_count 配置选项。但是,此场景的帮助和错误消息描述不清楚。现在消息已更新为更清晰。

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

  • [bug 1733754] Keystone 没有验证身份验证请求的 OS-TRUST:trust 密钥是否实际上是一个字典。这导致在应该返回 400 Bad Request 时出现 500 Internal Server Error。

  • [bug 1734244] 在角色参数中包含额外属性时创建 trust 时,返回 400 状态码而不是 500。

  • [bug 1736875] 添加了模式检查,以在授权具有 roles 参数中非 ID 属性的请求令牌时返回 400 状态码。

  • [bug 1738895] 修复了联合用户无法通过 name 过滤器列出的错误。现在,当通过 name 列出用户时,Keystone 将查询本地用户后端和影子用户后端。

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

  • [bug 1747694] trust API 参考声明支持 pageper_page 查询参数,而实际的 trust API 并不支持它们。API 参考已更新。

  • [bug 1748970] 在 Queens 中引入了一个错误,导致在查询特定角色的角色分配 API 时返回系统角色分配。该问题已修复,并且从 GET /v3/role_assignments?role.id={role_id} 返回的角色列表尊重系统角色分配。

  • [bug 1749264] 删除用户时,将删除用户系统角色分配。

  • [bug 1749267] 删除组时,将删除组系统角色分配。

  • [bug 1750415] 修复了应用程序凭证中的一个实现错误,应用程序凭证引用未填充在令牌数据中,导致在禁用缓存时令牌验证出现问题。

其他说明

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

  • Keystone 现在支持通过提供角色名称来授权请求令牌。 roles 参数中的 role 可以包含角色名称或角色 ID,但不能同时包含两者。

  • [bug 1728690] keystone-manage bootstrap 命令只会创建 admin 角色,不再创建默认成员角色。请在运行 bootstrap 后使用 openstack role create 命令创建所需的任何其他角色。

  • 删除了配置选项 rolling_upgrade_password_hash_compat。它仅用于从 Ocata 版本到 Pike 版本的滚动升级。