Train 系列发布说明

16.0.2-9

安全问题

  • [bug 1992183] [CVE-2022-2447] 使用应用程序凭证颁发的令牌现在将对其到期时间进行验证,验证依据是应用程序凭证的到期时间。如果应用程序凭证在令牌之前到期,则令牌的到期时间将设置为与应用程序凭证相同的到期时间。否则,令牌将使用配置的值。

错误修复

  • [bug 1848342] 临时用户更新流程存在不一致之处。每次联合用户登录时,keystone 都会在 local_user 表中创建一个条目,而不是仅更新 user 和 federated_user 表中的条目,这导致在列出用户时出现重复条目。现在,keystone 在更新临时用户时将不会在 local_user 表中创建条目。

    如果您受到此错误的影响,则需要在 keystone 数据库中进行修复,因此我们建议在执行此过程之前转储用户表。

    mysql 数据库示例
    • mysqldump -h <mysql 主机> -p -P <mysql 端口> -u keystone keystone federated_user local_user user > user_tables.sql

    • mysql -h <mysql 主机> -D keystone -p -P <mysql 端口> -u keystone -e ‘delete from local_user where user_id in (select user_id from federated_user);’

    SQL
    • delete from local_user where user_id in (select user_id from federated_user);

16.0.2

安全问题

  • [bug 1901207] 应用程序凭证的策略执行已更新,以防止无效的所有权检查导致未经授权的用户能够获取和删除其他用户的应用程序凭证。

错误修复

  • [bug 1688137] 修复了向最终用户显示 AccountLocked 异常的问题,因为它提供了一些可能被恶意用户利用的信息。最终用户现在将看到 Unauthorized 而不是 AccountLocked,从而防止用户信息 oracle 漏洞利用。

  • [bug 1878938] 以前,当用户拥有系统角色分配并尝试删除相同的角色时,系统角色分配仍然存在于 system_assignment 表中。这导致 keystone 返回 HTTP 404 Not Found 错误,在列出具有名称的角色分配时(例如,–names?include_names)。

    如果您受到此错误的影响,则必须手动删除过时的角色分配。以下是一个示例 SQL 语句,您可以使用它来修复该问题,但您应该验证它是否适用于您的部署的 SQL 实现和版本。

    SQL
    • delete from system_assignment where role_id not in (select id from role);

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

  • [bug 1889936] 正确解码从 LDAP 返回的八位字节字符串或字节数组。

  • [bug 1896125] 引入了更强大的异步 LDAP 请求连接处理,以解决从页面大小较小的 LDAP 后端获取数据时的内存泄漏问题。

  • [bug 1901654] 之前,sha256.py 中的 generate_public_ID() 假定传入的参数是 str 数据类型。但是,python-ldap 3.0 或更高版本返回字节数据类型作为属性值,除了区分名、相对区分名、属性名、查询的字段。如果运行 Python3 的 keystone 与 LDAP 集成,并且 LDAP 服务器在其属性中具有 local_id 变量,由于假设和修改了 python-ldap,用户登录操作将失败。通过此修复,generate_public_ID() 正确处理参数中的字节数据类型。

16.0.1

升级说明

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

关键问题

  • [bug 1855080] 策略目标过滤中的一个错误意外地允许任何用户使用 /v3/credentials API 列出任何凭证对象,当 [oslo_policy]/enforce_scope 设置为 false(默认值)时。这个问题已得到解决:非管理员角色的项目用户可能无法列出其他用户的凭证。但是,当 [oslo_policy]/enforce_scope 为 false 时,具有项目管理员角色的用户仍然可以列出任何用户的凭证,这是由于 bug 968696 造成的。

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

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

安全问题

  • [bug 1855080] 策略目标过滤中的一个错误意外地允许任何用户使用 /v3/credentials API 列出任何凭证对象,当 [oslo_policy]/enforce_scope 设置为 false(默认值)时。这个问题已得到解决:非管理员角色的项目用户可能无法列出其他用户的凭证。但是,当 [oslo_policy]/enforce_scope 为 false 时,具有项目管理员角色的用户仍然可以列出任何用户的凭证,这是由于 bug 968696 造成的。

  • [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 1873290] [bug 1872735] 修复了令牌模型,以尊重授权 OAuth1 访问令牌的角色。此前,OAuth1 访问令牌授权的角色列表会被忽略,因此当使用访问令牌请求 keystone 令牌时,keystone 令牌将包含创建者对项目的每个角色分配。这也修复了 EC2 凭证以尊重这些角色。

错误修复

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

  • [Bug 1856904] CADF 通知的发起者对象现在将始终包含发起操作的用户的用户名。以前,发起者对象仅包含 user_id,这导致在使用基于 LDAP 的身份提供程序时映射到用户时出现问题。这也有助于使发起者对象更好地符合 OpenStack 的 CADF 标准。

  • [bug 1856962] 修复了一个问题,即如果映射的组 membership 为空,联合用户将无法进行身份验证。

  • [bug 1858012] 修复了 /v3/role_assignments 过滤中的一个错误,其中 role.id 查询参数在存在多个系统角色分配的情况下无法正确地按角色过滤角色分配。

  • [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 1873290] [bug 1872735] 修复了令牌模型,以尊重授权 OAuth1 访问令牌的角色。此前,OAuth1 访问令牌授权的角色列表会被忽略,因此当使用访问令牌请求 keystone 令牌时,keystone 令牌将包含创建者对项目的每个角色分配。这也修复了 EC2 凭证以尊重这些角色。

16.0.0

序言

[blueprint whitelist-extension-for-app-creds] 此版本添加了通过访问规则向应用程序凭证委派细粒度权限的支持。访问规则充当允许应用程序凭证使用的 API 的白名单。仍然通过 oslo.policy 强制执行常规 RBAC。有关详细信息,请参阅API 参考

此版本利用 oslo.policy 的 policy-in-code 功能来修改 keystone 所有 API 策略的默认检查字符串和范围类型。这些更改使策略比以前更精确,在以前仅提供 admin 角色和通配符规则的情况下,使用 reader、member 和 admin 角色。这些更改还利用 system、domain 和 project 范围,允许您为用户创建适当的角色分配,以执行他们需要执行的操作。最终这将允许您在 keystone 配置文件中设置 [oslo_policy]/enforce_scope=true,从而简化访问控制管理,确保 oslo.policy 在 API 请求上检查角色和范围。但是,请注意,并非所有策略都已在此版本中转换,并且一些更改仍在开发中。在过渡阶段,如果您尚未覆盖策略,则旧默认值和新默认值将进行 OR 运算。这意味着,例如,如果我们将策略规则从 'rule:admin_required' 更改为 'role:reader and system_scope:all',则两种策略规则都将生效。请在升级之前检查您当前的策略和角色分配,以确保策略不会对您的部署过于宽松。要隐藏弃用警告并选择使用较不宽松的规则,您可以覆盖策略配置以使用较新的策略规则。

新特性

  • keystone-manage bootstrap 命令现在可以幂等方式更新现有的端点,这对于与使用此命令进行 keystone 初始化和生命周期管理的配置管理工具结合使用非常有用。

  • [blueprint whitelist-extension-for-app-creds] 此版本添加了通过访问规则向应用程序凭证委派细粒度权限的支持。访问规则充当允许应用程序凭证使用的 API 的白名单。仍然通过 oslo.policy 强制执行常规 RBAC。有关详细信息,请参阅API 参考

  • [bug 1724645] 为联合协议对象添加了一个新的属性 remote_id_attribute,它允许 WebSSO 身份验证通过正确的实现转发身份验证请求,该实现基于身份验证标头中的远程 ID 属性。

  • [bug 1748027] 用户 API 现在支持 system 范围、domain 范围和 project 范围的 adminmemberreader 默认角色。

  • [bug 1750660] 项目 API 现在支持 system 范围、domain 范围和 project 范围的 adminmemberreader 默认角色。

  • [bug 1805368] [bug 1750669] 系统分配 API 现在支持 system 范围、domain 范围和 project 范围的 adminmemberreader 默认角色。授权 API 现在支持 system 范围的 adminmemberreader 默认角色。

  • [bug 1750673] 角色分配 API 现在支持 system 范围、domain 范围和 project 范围的 adminmemberreader 默认角色。

  • [bug 1750678] EC2 凭证 API 现在支持 adminmemberreader 默认角色。

  • 允许使用可选参数 explicit_domain_id 创建域,而不是从 uuid 自动创建 domain_id。

    在保持两个 Keystone 服务器同步但不使用数据库复制时,通常需要修改数据库以更新 Domain ID,以便条目匹配。Domain ID 然后用于 LDAP 映射 ID,如果它们不匹配,则用户 ID 会不同。应该能够使用显式 ID 添加域,以便两个服务器可以匹配用户 ID。变量名称不是简单的 domain_id 的原因有两个:首先是为了让人们不要认为这是一个必需的,或者至少是建议的字段。其次,是为了防止在创建新域时复制错误,其中 domain_id 将从旧域中复制,并导致虚假失败或不希望的 domain_id 匹配。

    https://specs.openstack.org/openstack/keystone-specs/specs/keystone/2025.2/explicit-domains-ids.html

  • [bug 1805363] OAuth1 消费者 API 现在支持 adminmemberreader 默认角色。

  • [bug 1805366] 域配置 API 现在支持 adminmemberreader 默认角色。

  • [bug 1805368] [bug 1750669] 授权 API 现在支持 domain 用户的 adminmemberreader 默认角色(例如,domain 范围的令牌)。

  • [bug 1805371] 隐式角色 API 现在支持 system 范围、domain 范围和 project 范围的 adminmemberreader 默认角色。

  • [bug 1805400] 域角色 API 现在支持使用 adminmemberreader 默认角色的 system 范围。

  • [bug 1805409] 策略和策略关联 API 现在支持 adminmemberreader 默认角色。

  • [bug 1818734] 端点组 API 现在支持 adminmemberreader 默认角色。

  • [bug 1818736] identity:get_limitidentity:list_limitsidentity:get_limit_model 策略现在支持 domain 范围,因此 domain 用户现在能够获取其自身 domain 的限制信息,并查看生效的限制模型。

  • [bug 1818846] 信任 API 现在支持 adminmemberreader 默认角色。系统用户现在可以使用默认策略审计和清理信任关系。

  • [bug 1823258] 添加了对项目和角色中“不可变”资源选项的支持,当启用时,可以防止意外地有害地修改或删除角色。还添加了一个新的标志 --immutable-roleskeystone-manage bootstrap 命令,以使默认角色(admin、member 和 reader)默认情况下不可变,以及 keystone-status upgrade check 命令中的检查,以检查这些角色是否已设置为不可变。在未来的版本中,这三个角色默认将是不可变的。

  • [bug 1839577] TOTP 现在默认允许将上一个时间窗口的代码视为有效作为身份验证的一部分。可以禁用此功能,或扩展最多十个先前窗口。

  • [bug 1844461] 现在允许系统读取者和 domain 读取者(除了项目管理员)列出项目子树的角色分配。

  • [bug 1844664] 项目端点 API 现在支持 adminmemberreader 默认角色。

  • [bug 1807751] Keystone 现在实现了项目和角色中资源选项的支架。功能性新的选项(例如“不可变”标志)将出现在返回的 JSON 中,位于项目、domain 和角色结构中返回的 options 字段(字典)下。在实现项目、domain 和角色的资源选项之前,options 字段将为空。

升级说明

  • keystone-manage bootstrap 命令现在将更新现有的端点,而不是跳过它们,即使它们已经存在但与提供给该命令的值不同。这对于与使用此命令进行 keystone 初始化和生命周期管理的配置管理工具结合使用非常有用。

  • [bug 1748027] 用户 API 使用新的默认策略,使其对最终用户和管理员更具安全性。请考虑这些新默认值,如果您的部署覆盖了用户策略。

  • [bug 1750660] 项目 API 使用新的默认策略,使其对最终用户和管理员更具安全性。请考虑这些新默认值,如果您的部署覆盖了项目策略。

  • [bug 1805368] [bug 1750669] 系统分配和授权 API 使用新的默认策略,以更安全的方式使其对最终用户和管理员更易于访问。如果您的部署覆盖了系统分配策略,请考虑这些新的默认设置。

  • [bug 1750673] 角色分配 API 使用新的默认策略,以更安全的方式使其对最终用户和管理员更易于访问。如果您的部署覆盖了角色分配策略,请考虑这些新的策略。

  • [bug 1750676] [bug 1818844] 令牌 API 使用新的默认策略,以更安全的方式使系统用户更容易委托功能。如果您的部署覆盖了令牌策略,请考虑这些新的策略。

  • [bug 1750678] EC2 凭证 API 使用新的默认策略,以更安全的方式使其对最终用户和管理员更易于访问。如果您的部署覆盖了 EC2 凭证消费者策略,请考虑这些新的默认设置。

  • [bug 1805363] OAuth1 消费者 API 使用新的默认策略,以更安全的方式使其对最终用户和管理员更易于访问。如果您的部署覆盖了 OAuth1 消费者策略,请考虑这些新的默认设置。

  • [bug 1805366] 域配置 API 使用新的默认策略,以更安全的方式使其对最终用户和管理员更易于访问。如果您的部署覆盖了域配置策略,请考虑这些新的默认设置。

  • [bug 1805368] [bug 1750669] 授权 API 使用新的默认策略,以更安全的方式使其对域用户更易于访问。如果您的部署覆盖了授权 API,请考虑这些新的默认设置。

  • [bug 1805371] 隐式角色 API 使用新的默认策略,以更安全的方式使其对最终用户和管理员更易于访问。如果您的部署覆盖了隐式角色策略,请考虑这些新的默认设置。

  • [bug 1805400] 域角色 API 使用新的默认策略,以更安全的方式使其对最终用户和管理员更易于访问。如果您的部署覆盖了角色策略,请考虑这些新的默认设置。

  • [bug 1805409] 策略和策略关联 API 使用新的默认策略,以更安全的方式使其对最终用户和管理员更易于访问。如果您的部署覆盖了策略和策略关联策略,请考虑这些新的默认设置。

  • [bug 1805880] 在 policy.v3cloudsample.json 中定义的限制策略已被删除。在将系统范围纳入限制 API 并实施默认角色后,这些策略现已过时。

  • [bug 1806762] [bug 1630434] 整个 policy.v3cloudsample.json 文件已被删除。如果您正在使用此策略文件来提供部署中的覆盖,则应考虑使用代码中的默认设置,并设置 keystone.conf [oslo_policy] enforce_scope=True。新的策略默认值更加灵活,经过了广泛的测试,并且解决了 policy.v3cloudsample.json 文件试图解决的所有问题。

  • [bug 1806762] 在 policy.v3cloudsample.json 中定义的用户策略已被删除。在将系统范围、域范围和项目范围纳入用户 API 并实施默认角色后,这些策略现已过时。

  • [bug 1806762] 在 policy.v3cloudsample.json 中定义的授权策略已被删除。在将系统范围和域范围纳入授权 API 并实施默认角色后,这些策略现已过时。

  • [bug 1804462] 在 policy.v3cloudsample.json 中定义的组策略已被删除。在将系统范围和域范围纳入组 API 并实施默认角色后,这些策略现已过时。

  • [bug 1818725] [bug 1750615] 应用程序凭证 API 使用新的默认策略,以更安全的方式使其对最终用户和管理员更易于访问。如果您的部署覆盖了应用程序凭证策略,请考虑这些新的默认设置。

  • [bug 1818734] 终端节点组 API 使用新的默认策略,以更安全的方式使其对最终用户和管理员更易于访问。如果您的部署覆盖了终端节点组策略,请考虑这些新的默认设置。

  • [bug 1818736] identity:get_limit 策略默认检查字符串已更改为支持域范围。由于统一的限制 API 仍被认为是实验性的,因此这些策略没有正式弃用。这些新的默认值会自动考虑域范围以及系统范围。如果您的部署覆盖了限制策略,请考虑这些新的默认设置。

  • [bug 1818846] [bug 1818850] 信任 API 使用新的默认策略,以更安全的方式使其对最终用户和管理员更易于访问。如果您的部署覆盖了信任策略,请考虑这些新的默认设置。

  • [bug 1844194] [bug 1844193] 项目标签 API 现在使用新的默认策略,以更安全的方式使其对最终用户和管理员更易于访问。如果您的部署覆盖了项目标签策略,请考虑这些新的默认设置。

  • [bug 1844461] identity:list_role_assignments_for_subtree 策略现在允许系统和域读取者列出项目子树的角色分配,并弃用了旧的 rule:admin_required 策略检查字符串。如果您的部署覆盖了角色分配策略,请考虑这些新的策略。

  • [bug 1844664] 项目终端节点 API 使用新的默认策略,以更安全的方式使其对最终用户和管理员更易于访问。如果您的部署覆盖了项目终端节点策略,请考虑这些新的默认设置。

  • [bug 1829453] 由于删除了配置选项 signing [ca_certs] 和 signing [cert_file],os-simple-cert-api 将返回 410。

弃用说明

  • [bug 1748027] 用户策略已被弃用。identity:get_user 策略现在使用 (role:reader and system_scope:all) or (role:reader and token.domain.id:%(target.user.domain_id)s) or user_id:%(target.user.id)s 而不是 rule:admin_or_owneridentity:list_users 策略现在使用 (role:reader and system_scope:all) or (role:reader and domain_id:%(target.domain_id)s) 而不是 rule:admin_requiredidentity:create_useridentity:update_useridentity:delete_user 策略现在使用 (role:admin and system_scope:all) or (role:admin and token.domain.id:%(target.user.domain_id)s) 而不是 rule:admin_required。这些新的默认值会自动包含对只读角色的支持,并允许对用户 API 进行更细粒度的访问,从而更容易让系统和域管理员安全地委托授权。如果您的部署覆盖了用户策略,请考虑这些新的默认设置。

  • [bug 1750660] 项目策略已被弃用。identity:get_project 策略现在使用 (role:reader and system_scope:all) or (role:reader and domain_id:%(target.project.domain_id)s) or project_id:%(target.project.id)s 而不是 rule:admin_required or project_id:%(target.project.id)sidentity:list_projects 策略现在使用 (role:reader and system_scope:all) or (role:reader and domain_id:%(target.domain_id)s) 而不是 rule:admin_requiredidentity:list_user_projects 策略现在使用 (role:reader and system_scope:all) or (role:reader and domain_id:%(target.user.domain_id)s) or user_id:%(target.user.id)s 而不是 rule:admin_or_owneridentity:create_project 现在使用 (role:admin and system_scope:all) or (role:admin and domain_id:%(target.project.domain_id)s) 而不是 rule:admin_required。这些新的默认值会自动包含对只读角色的支持,并允许对项目 API 进行更细粒度的访问,从而更容易让系统和域管理员安全地委托授权。如果您的部署覆盖了项目策略,请考虑这些新的默认设置。

  • [bug 1805368] [bug 1750669] 系统分配和授权策略已被弃用。identity:list_system_grants_for_useridentity:check_system_grant_for_useridentity:list_system_grants_for_groupidentity:check_system_grant_for_group 策略现在使用 role:reader and system_scope:all 而不是 rule:admin_requiredidentity:create_system_grant_for_useridentity:revoke_system_grant_for_useridentity:create_system_grant_for_groupidentity:revoke_system_grant_for_group 策略现在使用 role:admin and system_scope:all 而不是 rule:admin_requiredidentity:check_grantidentity:list_grants 策略现在使用 role:reader and system_scope:all 而不是 rule:admin_requiredidentity:create_grantidentity:revoke_grant 策略现在使用 role:admin and system_scope:all 而不是 rule:admin_required。这些新的默认值会自动包含对只读角色的支持,并允许对系统分配和授权 API 进行更细粒度的访问,从而更容易让管理员安全地委托授权。如果您的部署覆盖了系统分配 API,请考虑这些新的默认设置。

  • [bug 1750673] 角色分配 identity:list_role_assignments 策略现在使用 (role:reader and system_scope:all) or (role:reader and domain_id:%(target.domain.id)s) 而不是 rule:admin_required。这个新的默认值会自动包含对只读角色的支持,并允许对角色分配 API 进行更细粒度的访问。如果您的部署覆盖了角色分配策略,请考虑这个新的默认设置。

  • [bug 1750676] [bug 1818844] identity:check_token 策略现在使用 (role:reader and system_scope:all) or rule:token_subject 而不是 rule:admin_required or rule:token_subjectidentity:validate_token 策略现在使用 (role:reader and system_scope:all) or rule:service_role or rule:token_subject 而不是 rule:service_or_admin or rule:token_subjectidentity:revoke_token 策略现在使用 (role:admin and system_scope:all) or rule:token_subject 而不是 rule:admin_or_token_subject。这些新的默认值会自动考虑默认的只读角色,并允许更细粒度的 API 访问。如果您的部署覆盖了令牌策略,请考虑这些新的默认设置。

  • [bug 1750678] EC2 凭证策略已被弃用。 identity:ec2_get_credentials 现在使用 (role:reader and system_scope:all) user_id:%(target.credential.user_id)s,而不是 rule:admin_required,并且 identity:ec2_list_credentials 策略现在使用 role:reader and system_scope:all rule:owner,而不是 rule:admin_requiredidentity:ec2_delete_credentials 现在使用 (role:admin and system_scope:all) user_id:%(target.credential.user_id)s,而不是 rule:admin_required,并且 identity:ec2_create_credentials 策略现在使用 role:admin and system_scope:all rule:owner,而不是 rule:admin_required。这些新的默认设置会自动考虑系统范围,并支持只读角色,从而更容易让系统管理员委派部分职责,而不会损害安全性。如果您的部署覆盖了 EC2 凭证策略,请考虑这些新的默认设置。

  • [bug 1805363] oauth1 消费者策略已被弃用。 identity:get_consumeridentity:list_consumers 策略现在使用 role:reader and system_scope:all,而不是 rule:admin_requiredidentity:create_consumeridentity:update_consumeridentity:delete_consumer 策略现在使用 role:admin and system_scope:all,而不是 rule:admin_required。这些新的默认设置会自动考虑系统范围,并支持只读角色,从而更容易让系统管理员委派部分职责,而不会损害安全性。如果您的部署覆盖了 oauth1 消费者策略,请考虑这些新的默认设置。

  • [bug 1805366] 域配置 API 策略已被弃用。 identity:get_domain_config 策略现在使用 role:reader and system_scope:all,而不是 rule:admin_requiredidentity:get_domain_config_default 策略现在使用 role:reader and system_scope:all,而不是 rule:admin_requiredidentity:create_domain_config 策略现在使用 role:admin and system_scope:all,而不是 rule:admin_requiredidentity:update_domain_config 策略现在使用 role:admin and system_scope:all,而不是 rule:admin_requiredidentity:delete_domain_config 策略现在使用 role:admin and system_scope:all,而不是 rule:admin_required

    这些新的默认设置会自动考虑系统范围,并支持只读角色,从而更容易让系统管理员委派部分职责,而不会损害安全性。如果您的部署覆盖了域配置策略,请考虑这些新的默认设置。

  • [bug 1805368] [bug 1750669] 授权策略已被弃用,并替换为新的策略,这些策略将授权 API 暴露给域用户。这允许部署默认情况下将更多功能委派给域所有者。 identity:check_grantidentity:list_grants 策略现在使用 (role:reader and system_scope:all) (role:reader and domain_id:%(target.user.domain_id)s) (role:reader and domain_id:%(target.group.domain_id)s),而不是 role:reader and system_scope:allidentity:create_grantidentity:revoke_grant 策略现在使用 (role:admin and system_scope:all) (role:admin and domain_id:%(target.user.domain_id)s) (role:admin and domain_id:%(target.group.domain_id)s),而不是 role:admin and system_scope:all。这些新的默认设置会自动包含对域读取者和域管理员角色的支持,从而更容易让系统管理员将功能委派给域用户,以管理其域内的授权。如果您的部署覆盖了授权 API,请考虑这些新的默认设置。

  • [bug 1805371] 隐式角色策略已被弃用。 identity:get_implied_roleidentity:list_implied_rolesidentity:list_role_inference_rulesidentity:check_implied_role 策略现在使用 role:reader and system_scope:all,而不是 rule:admin_requiredidentity:create_implied_roleidentity:delete_implied_role 策略现在使用 role:admin and system_scope:all,而不是 rule:admin_required。这些新的默认设置会自动考虑系统范围,并支持只读角色,从而更容易让系统管理员委派部分职责,而不会损害安全性。如果您的部署覆盖了隐式角色策略,请考虑这些新的默认设置。

  • [bug 1805400] 域角色策略已被弃用。 identity:get_domain_roleidentity:list_domain_roles 策略现在使用 role:reader and system_scope:all,而不是 rule:admin_requiredidentity:create_domain_roleidentity:update_domain_roleidentity:delete_role 策略现在使用 role:admin and system_scope:all,而不是 rule:admin_required。这些新的默认设置会自动考虑系统范围,并支持只读角色,从而更容易让系统管理员委派部分职责,而不会损害安全性。如果您的部署覆盖了域角色策略,请考虑这些新的默认设置。

  • [bug 1805409] 策略和策略关联策略已被弃用。 identity:get_policy 策略现在使用 role:reader and system_scope:all,而不是 rule:admin_requiredidentity:list_policies 策略现在使用 role:reader and system_scope:all,而不是 rule:admin_requiredidentity:update_policy 策略现在使用 role:admin and system_scope:all,而不是 rule:admin_requiredidentity:create_policy 策略现在使用 role:admin and system_scope:all,而不是 rule:admin_requiredidentity:delete_policy 策略现在使用 role:admin and system_scope:all,而不是 rule:admin_requiredidentity:check_policy_association_for_endpoint 策略现在使用 role:reader and system_scope:all,而不是 rule:admin_requiredidentity:check_policy_association_for_service 策略现在使用 role:reader and system_scope:all,而不是 role:reader and system_scope:allidentity:check_policy_association_for_region_and_service 策略现在使用 role:reader and system_scope:all,而不是 rule:admin_requiredidentity:get_policy_for_endpoint 策略现在使用 role:reader and system_scope:all,而不是 rule:admin_requiredidentity:list_endpoints_for_policy 策略现在使用 role:reader and system_scope:all,而不是 rule:admin_requiredidentity:create_policy_association_for_endpoint 策略现在使用 role:admin and system_scope:all,而不是 rule:admin_requiredidentity:delete_policy_association_for_endpoint 策略现在使用 role:admin and system_scope:all,而不是 rule:admin_requiredidentity:create_policy_association_for_service 策略现在使用 role:admin and system_scope:all,而不是 rule:admin_requiredidentity:delete_policy_association_for_service 策略现在使用 role:admin and system_scope:all,而不是 rule:admin_requiredidentity:create_policy_association_for_region_and_service 策略现在使用 role:admin and system_scope:all,而不是 rule:admin_requiredidentity:delete_policy_association_for_region_and_service 策略现在使用 role:admin and system_scope:all,而不是 rule:admin_required。这些新的默认设置会自动考虑系统范围,并支持只读角色,从而更容易让系统管理员委派部分职责,而不会损害安全性。如果您的部署覆盖了策略和策略关联策略,请考虑这些新的默认设置。

  • [bug 1818725] [bug 1750615] 应用凭证策略已被弃用。 identity:get_application_credential 策略现在使用 (role:reader and system_scope:all) or user_id:%(user_id)s,而不是 rule:admin_required or user_id:%(user_id)sidentity:list_application_credentials 策略现在使用 (role:reader and system_scope:all) or user_id:%(user_id)s,而不是 rule:admin_required or user_id:%(user_id)sidentity:delete_application_credential 策略现在使用 (role:admin and system_scope:all) or user_id:%(user_id)s,而不是 rule:admin_required or user_id:%(user_id)s。 这些新的默认设置会自动考虑系统范围,并支持只读角色,从而更容易让系统管理员委派部分职责,而不会损害安全性。 如果您的部署覆盖了应用程序凭证策略,请考虑这些新的默认设置。

  • [bug 1818734] 端点组策略已被弃用。 identity:list_endpoint_groups 策略现在使用 role:reader and system_scope:all,而不是 rule:admin_requiredidentity:get_endpoint_group 策略现在使用 role:reader and system_scope:all,而不是 rule:admin_requiredidentity:update_endpoint_group 策略现在使用 role:admin and system_scope:all,而不是 rule:admin_requiredidentity:create_endpoint_group 策略现在使用 role:admin and system_scope:all,而不是 rule:admin_requiredidentity:delete_endpoint_group 策略现在使用 role:admin and system_scope:all,而不是 rule:admin_requiredidentity:list_projects_associated_with_endpoint_group 策略现在使用 role:reader and system_scope:all,而不是 rule:admin_requiredidentity:get_endpoint_group_in_project 策略现在使用 role:reader and system_scope:all,而不是 rule:admin_requiredidentity:list_endpoints_associated_with_endpoint_group 策略现在使用 role:reader and system_scope:all,而不是 rule:admin_requiredidentity:list_endpoint_groups_for_project 策略现在使用 role:reader and system_scope:all,而不是 rule:admin_requiredidentity:add_endpoint_group_to_project 策略现在使用 role:admin and system_scope:all,而不是 rule:admin_requiredidentity:remove_endpoint_group_from_project 策略现在使用 role:admin and system_scope:all,而不是 rule:admin_required。 这些新的默认设置会自动考虑系统范围,并支持只读角色,从而更容易让系统管理员委派部分职责,而不会损害安全性。 如果您的部署覆盖了端点组策略,请考虑这些新的默认设置。

  • [bug 1818845] identity:revocation_list 策略已被弃用,即将移除。 此策略实际上并没有保护撤销列表 API,因为该 API 没有被强制执行和保护。 它仅根据 Keystone 的配置返回 HTTP 410HTTP 403。 可以安全地删除此策略。

  • [bug 1818846] [bug 1818850] 信任策略已被弃用。 identity:list_trusts 策略现在使用 (role:reader and system_scope:all),而不是 rule_admin_requiredidentity:list_roles_for_trustidentity:get_role_for_trustidentity:get_trust 策略现在使用 (role:reader and system_scope:all) or user_id:%(target.trust.trustor_user_id)s or user_id:%(target.trust.trustee_user_id)s,而不是 ``user_id:%(target.trust.trustor_user_id)s or user_id:%(target.trust.trustee_user_id)s``。 identity:delete_trust 策略现在使用 (role:admin and system_scope:all) or user_id:%(target.trust.trustor_user_id)s,而不是 user_id:%(target.trust.trustor_user_id)s。 这些新的默认设置会自动考虑系统范围,并支持只读角色,从而更容易让系统管理员委派部分职责,而不会损害安全性。 如果您的部署覆盖了信任策略,请考虑这些新的默认设置。

  • [bug 1844194] [bug 1844193] 项目标签 API 策略已被弃用。 identity:get_project_tagidentity:list_project_tags 策略现在使用 (role:reader and system_scope:all) or (role:reader and domain_id:%(target.project.domain_id)s) or project_id:%(target.project.id)s,而不是 rule:admin_required or project_id:%(target.project.id)sidentity:update_project_tagsidentity:delete_project_tagsidentity:delete_project_tagidentity:create_project_tag 策略现在使用 (role:admin and system_scope:all) or (role:admin and domain_id:%(target.project.domain_id)s) or (role:admin and project_id:%(target.project.id)s),而不是 rule:admin_required

    这些新的默认设置会自动考虑系统范围,并支持只读角色,从而更容易让系统管理员委派部分职责,而不会损害安全性。 如果您的部署覆盖了项目标签策略,请考虑这些新的默认设置。

  • [bug 1844461] 角色分配 identity:list_role_assignments_for_subtree 策略现在使用 (role:reader and system_scope:all) or (role:reader and domain_id:%(target.project.domain_id)s) or (role:admin and project_id:%(target.project.id)s),而不是 rule:admin_required。 此新的默认设置会自动包含对只读角色的支持,并允许对角色分配 API 进行更细粒度的访问。 如果您的部署覆盖了角色分配策略,请考虑此新的默认设置。

  • [bug 1844664] 项目端点策略已被弃用。 identity:list_projects_for_endpoint 现在使用 (role:reader and system_scope:all)identity:check_endpoint_in_project 策略现在使用 role:reader and system_scope:all,以及 identity:list_endpoints_for_project 现在使用 (role:reader and system_scope:all),而不是 rule:admin_requiredidentity:add_endpoint_to_project 现在使用 (role:admin and system_scope:all),而不是 rule:admin_required``and ``identity:remove_endpoint_from_project 策略现在使用 role:admin and system_scope:all,而不是 rule:admin_required。 这些新的默认设置会自动考虑系统范围,并支持只读角色,从而更容易让系统管理员委派部分职责,而不会损害安全性。 如果您的部署覆盖了项目端点策略,请考虑这些新的默认设置。

  • [bug 1829454] [federation] federated_domain_name 选项已被弃用。 所有用户现在都位于身份提供商的域中,该选项不再使用。

安全问题

  • [bug 1748027] 用户 API 现在使用系统范围、域范围、项目范围和默认角色,以更安全的方式为用户提供更好的可访问性。

  • [bug 1750660] 项目 API 现在使用系统范围、域范围、项目范围和默认角色,以更安全的方式为用户提供更好的可访问性。

  • [bug 1805368] [bug 1750669] 系统分配 API 现在使用系统范围、域范围、项目范围和默认角色,以更安全的方式为用户提供更好的可访问性。 授权 API 现在使用系统范围和默认值,以便为操作员提供更好的访问权限。

  • [bug 1750673] 角色分配 API 现在使用系统范围、域范围、项目范围和默认角色,以更安全的方式为用户提供更好的可访问性。

  • [bug 1750676] [bug 1818844] 令牌 API 现在正确使用系统范围和默认角色,以便为令牌 API 提供更细粒度的访问权限。

  • [bug 1750678] EC2 凭证 API 现在使用系统范围和默认角色,以更安全的方式为用户提供更好的可访问性。

  • [bug 1805363] oauth1 消费者 API 现在使用系统范围和默认角色,以更安全的方式为用户提供更好的可访问性。

  • [bug 1805366] 域配置 API 现在使用系统范围和默认角色,以更安全的方式为用户提供更好的可访问性。

  • [bug 1805368] [bug 1750669] 授权 API 现在支持域范围的默认角色,以便为域用户提供更好的授权访问权限。

  • [bug 1805371] 隐式角色 API 现在使用系统范围和默认角色,以更安全的方式为用户提供更好的可访问性。

  • [bug 1805400] 域角色 API 现在使用系统范围和默认角色,以更安全的方式为用户提供更好的可访问性。

  • [bug 1805409] 策略和策略关联 API 现在使用系统范围和默认角色,以便以安全的方式更好地为用户提供访问权限。

  • [bug 1818725] [bug 1750615] 应用凭证 API 现在使用系统范围和默认角色,以便以安全的方式更好地为用户提供访问权限。

  • [bug 1818734] 端点组 API 现在使用系统范围和默认角色,以便以安全的方式更好地为用户提供访问权限。

  • [bug 1818846] [bug 1818850] 信任 API 现在使用系统范围和默认角色,以便以安全的方式更好地为用户提供访问权限。

  • [bug 1844194] [bug 1844193] 项目标签 API 现在使用系统范围和默认角色,以便以安全的方式更好地为用户提供访问权限。

  • [bug 1844461] 现在,列出项目子树的角色分配时使用系统范围、域范围、项目范围和默认角色,以便以安全的方式更好地为用户提供访问权限。

  • [bug 1844664] 项目端点 API 现在使用系统范围和默认角色,以便以安全的方式更好地为用户提供访问权限。

错误修复

  • 联合用户在 shadow-users 表中会得到一个条目。该条目具有唯一的 ID。它使用 UUID 生成。此修复更改为重用 LDAP 的机制,其中 ID 由域 ID + 用户本地 ID(从 IdP 唯一标识用户的属性)生成。生成器由配置文件指定。现在,LDAP 和联合 ID 的生成方式相同。这也意味着可以在两台独立的 Keystone 服务器之间保持联合 ID 的同步。

  • [bug 1724645] 修复了一个问题,即无法区分联合协议的多个实现,例如 SAML2.0 协议的 Shibboleth 和 Mellon,因为它们必须共享相同的全局配置的远程 ID 属性。现在,远程 ID 属性可以在协议对象本身上设置。

  • [bug 1754048] 现在,在验证联合令牌时会报告正确的用户域。 之前,域始终验证为“Federated”。

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

  • [bug 1779889] 添加了关于服务令牌以及配置服务以使用服务令牌进行长时间运行操作的文档。

  • [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 1805880] policy.v3cloudsample.json 策略文件中的限制策略已被删除,以支持代码中更好的默认值。 这些策略未经详尽测试,并且对用户和操作员具有误导性。

  • [bug 1806762] [bug 1630434] 整个 policy.v3cloudsample.json 文件已被删除。如果您正在使用此策略文件来提供部署中的覆盖,则应考虑使用代码中的默认设置,并设置 keystone.conf [oslo_policy] enforce_scope=True。新的策略默认值更加灵活,经过了广泛的测试,并且解决了 policy.v3cloudsample.json 文件试图解决的所有问题。

  • [bug 1806762] policy.v3cloudsample.json 策略文件中的用户策略已被删除,以支持代码中更好的默认值。 这些策略未经详尽测试,并且对用户和操作员具有误导性。

  • [bug 1806762] policy.v3cloudsample.json 策略文件中的授权策略已被删除,以支持代码中更好的默认值。 这些策略未经详尽测试,并且对用户和操作员具有误导性。

  • [bug 1804462] policy.v3cloudsample.json 策略文件中的组策略已被删除,以支持代码中更好的默认值。 这些策略未经详尽测试,并且对用户和操作员具有误导性。

  • [bug 1815771] 允许操作员缓存凭证,以避免在数据库中查找。 此操作可以通过 keystone.conf [credential] caching 的配置参数打开/关闭。

  • [bug 1817313] 如果 URL 中没有 protocol_id,则对 OS-Federation 协议创建返回 METHOD NOT ALLOWED。 纠正措施是将 LIST 与 CRUD 资源分开,以便路由正则表达式可以按预期工作。

  • [bug 1819036] 现在,处理 keystone 前面的请求的中间件会缓存每个请求的令牌,从而消除了在每个请求上验证令牌时进行不必要的往返。 此更改不需要使用任何配置选项即可生效。 此错误的修复在测试期间提高了约 20% 的性能,并影响了 keystone 的大部分 API。

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

  • [bug 1832265] 在 Python 3 下运行 Keystone 时,现在可以一致且正确地解码二进制 msgpack 有效负载类型,从而避免在尝试将二进制编码字符串转换为 UUID 时出现 TypeError。

  • [bug 1833739] 修复了 PostgreSQL 特定的问题,该问题与存储加密凭证有关。 在 Python 3 中,psycopg2 模块将字节字符串视为二进制数据。 这在使用数据库中存储加密凭证时会导致问题。 为了解决此问题,已更新凭证 sql 后端,以便在将其交给数据库之前将凭证编码为文本字符串。

  • [bug 1836568] 解决了大量策略迁移的副作用,这些副作用导致发出的弃用警告的数量过多,以至于无法提供帮助。 Keystone 服务器现在不再为单个策略规则发出警告,而是发出单个警告,指示发现存在存在问题的规则。 操作员可以使用 oslopolicy-policy-generator 和 oslopolicy-policy-upgrade 来查找和解决已弃用的策略。

  • [bug 1839133] 使 user_enabled_emulation_use_group_config 尊重 group_members_are_ids。

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

  • [bug 1841486] keystone-manage mapping_engine --engine-debug CLI 工具现在输出有关处理映射规则后从断言获得的直接映射的有用信息。

  • [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 现在在使用领域特定驱动程序时识别系统范围的令牌。

  • [bug 1844157] 在执行 keystone-manage db_sync –check 时,如果旧版 repo 从与 expand/contract/migrate repo 相同的版本号开始,则检查数据库是否在版本控制下失败,表明数据库是最新的。 这是由于函数 get_init_version 始终没有收到所查询 repo 的路径。 修复是确保始终将 repo 路径从 keystone.common.sql.upgrade.get_db_version 函数传递给 get_init_version。

  • [bug 1844207] 修复了 WebSSO 身份验证中的问题,如果无法为请求的联合协议找到远程 ID,则会引发服务器错误,现在正确地引发未经授权的客户端错误。

  • [bug 1828565] 修复了按名称列出端点组的问题。 这允许 openstackclient 命令按名称搜索端点组。

其他说明

  • [bug 1829453] 已删除过时的配置选项 infer_roles

  • [bug 1829453] 已删除过时的配置选项 admin_endpoint

  • [bug 1829453] 已删除 signing 中的过时的配置选项。