Stein 系列发布说明¶
15.0.1-9¶
错误修复¶
[bug 1839133] 使 user_enabled_emulation_use_group_config 尊重 group_members_are_ids。
[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 返回的八位字节字符串或字节数组。
15.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 1773967] 修复了一个问题,即仅通过组 membership 拥有角色分配,而不是通过直接分配的用户可以创建但无法使用应用程序凭证。重要的是要注意,仅通过映射组 membership 拥有角色分配的联合用户仍然无法创建应用程序凭证。
[bug 1782922] 修复了 Keystone 随意返回第一个 RDN 作为用户 ID 的问题,无论它是否与配置的“user_id_attribute”匹配。这会破坏“group_members_are_ids”设置为 False 且“user_id_attribute”不在 DN 中的部署。此补丁将在第一个 RND 与配置的“user_id_attribute”不匹配时执行按 DN 查找。
[bug 1831918] 凭证现在记录 cadf 审计消息。
[bug 1832265] 在 Python 3 下运行 Keystone 时,二进制 msgpack payload 类型现在可以一致且正确地解码,避免在尝试将二进制编码字符串转换为 UUID 时出现 TypeError。
[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 现在在使用领域特定驱动程序时识别系统范围的令牌。
[bug 1856881]
keystone-manage bootstrap可以在升级场景中运行,其中存在名为admin、member和reader的预先存在的领域特定角色。
[Bug 1856904] CADF 通知的发起者对象现在将始终包含发起操作的用户的用户名。以前,发起者对象仅包含 user_id,这导致在使用基于 LDAP 的身份提供程序时映射到用户时出现问题。这也有助于使发起者对象更好地符合 OpenStack 的 CADF 标准。
[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 凭证以尊重这些角色。
15.0.0¶
序言¶
此版本利用 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',则两种策略规则都将生效。 请在升级之前检查您当前的策略和角色分配,以确保策略不会对您的部署过于宽松。 要隐藏弃用警告并选择使用较不宽松的规则,您可以覆盖策略配置以使用较新的策略规则。
新特性¶
[bug 1669080] 为 V3 Identity Roles 添加了
description属性的支持,有关详细信息,请参阅 API 文档。
[blueprint json-web-tokens] Keystone 现在支持 JSON Web Signature (JWS) token 提供程序,除了 fernet token 之外。 Fernet token 仍然是默认的 token 提供程序。 详细信息请参阅 规范。
[blueprint mfa-auth-receipt] 添加了对 auth receipts 的支持。 允许为配置了 MFA 规则的用户进行多步骤身份验证。 使用成功的身份验证方法进行部分身份验证将返回一个 auth receipt,该 receipt 可以在后续的身份验证尝试中与缺失的身份验证方法一起使用,以完成身份验证并提供有效的 token。
[Community Goal] 已添加对开发人员编写升级前检查的支持。 操作员可以使用
keystone-status upgrade check运行这些检查。 这使操作员能够在升级部署时更有信心,因为他们拥有一个可以自动执行针对部署配置或数据集的编程检查的工具。
[bug 1748027] 用户 API 现在支持 system-scope、domain-scope 和 project-scope 中的
admin、member和reader默认角色。
[bug 1750660] 项目 API 现在支持 system-scope、domain-scope 和 project-scope 中的
admin、member和reader默认角色。
[bug 1805368] [bug 1750669] 系统分配 API 现在支持 system-scope、domain-scope 和 project-scope 中的
admin、member和reader默认角色。 grant API 现在支持 system-scope 的admin、member和reader默认角色。
[bug 1750673] 角色分配 API 现在支持 system-scope、domain-scope 和 project-scope 中的
admin、member和reader默认角色。
[bug 1794376] 域 API 现在支持
admin、member和reader默认角色。
[bug 1801095] 请求 ID 和全局请求 ID 已添加到基本通知和 CADF 通知中。
[bug 1804446] 区域 API 现在支持
admin、member和reader默认角色。
[bug 1804463] 服务 API 现在支持
admin、member和reader默认角色。
[bug 1804483] 端点 API 现在支持
admin、member和reader默认角色。
[bug 1804516] 联合身份提供程序 API 现在支持
admin、member和reader默认角色。
[bug 1804521] 联合映射 API 现在支持
admin、member和reader默认角色。
[bug 1804522] 联合服务提供程序 API 现在支持
admin、member和reader默认角色。
[bug 1804523] 联合协议 API 现在支持
admin、member和reader默认角色。
[bug 1805369] 组 API 现在支持
admin、member和reader默认角色。
[bug 1808859] 组 API 现在支持使用
domain范围类型来对组和组成员资格执行特定于域的操作。
[bug 1805372] 已注册的限制和限制 API 现在支持 system-scope、domain-scope 和 project-scope 中的
admin、member和reader默认角色。
[bug 1805402] 角色 API 现在支持 system-scope、domain-scope 和 project-scope 中的
admin、member和reader默认角色。
[bug 1805403] 项目 API 现在支持
admin、member和reader默认角色。
[bug 1805406] 用户 API 现在支持
admin、member和reader默认角色。
[blueprint domain-level-limit] Keystone 现在支持域级别统一限制。 在创建限制时,用户可以指定
domain_id而不是project_id。 对于 flat 模型,域限制仍然是非分层的。 对于 strict-two-level 模型,域限制现在被视为第一层,因此项目限制是第二层,项目不能包含任何子项目。
升级说明¶
[blueprint mfa-auth-receipt] Auth receipts 与 token 共享相同的 fernet 机制,默认情况下将与 token 共享密钥并开箱即用。 如果您的 fernet 密钥目录不是默认目录,则需要配置 receipt 密钥目录,但它们都可以指向同一位置,从而允许密钥轮换安全地影响两者。 如果需要,可以拆分 receipt 和 token 密钥并分别运行轮换。
[bug 1748027] 用户 API 使用新的默认策略,使之对最终用户和管理员更具可访问性和安全性。 如果您的部署覆盖用户策略,请考虑这些新默认值。
[bug 1750660] 项目 API 使用新的默认策略,使之对最终用户和管理员更具可访问性和安全性。 如果您的部署覆盖项目策略,请考虑这些新默认值。
[bug 1805368] [bug 1750669] 系统分配和 grant API 使用新的默认策略,使之对最终用户和管理员更具可访问性和安全性。 如果您的部署覆盖系统分配策略,请考虑这些新默认值。
[bug 1750673] 角色分配 API 使用新的默认策略,使之对最终用户和管理员更具可访问性和安全性。 如果您的部署覆盖角色分配策略,请考虑这些新策略。
[bug 1787874] 请注意,在配置文件中设置 unique_last_password_count = 1 的部署应将值更新为 0,以保持与以前相同的行为。
[bug 1788415] [bug 968696] 保护
/v3/credentialsAPI 的策略已更改默认值,以便使凭据 API 对所有用户(而不仅仅是操作员或系统管理员)更具可访问性。 请考虑这些更新,因为使用此版本的 Keystone 可能会影响您的部署中的 API 行为,尤其是在使用自定义策略文件时。
[bug 1794376] 域 API 使用新的默认策略,使之对最终用户和管理员更具可访问性和安全性。 如果您的部署覆盖域策略,请考虑这些新默认值。
[bug 1794864] [bug 1794376] 保护域 API 的默认策略已被弃用,以支持更安全和自助服务的策略。 如果您正在维护自定义策略,请确保将域策略解析为与新默认值一起工作,方法是添加适当的角色分配,或继续维护自定义覆盖。 新默认值允许在向域和项目中的用户授予 admin 角色时更好地保护域 API。
[bug 1804292] 在
policy.v3cloudsample.json中定义的区域策略已被删除。 在将 system-scope 纳入区域 API 并实施默认角色后,这些策略现已过时。
[bug 1804446] 区域 API 使用新的默认策略,使之对最终用户和管理员更具可访问性和安全性。 如果您的部署覆盖区域策略,请考虑这些新默认值。
[bug 1804462] 在
policy.v3cloudsample.json中定义的服务策略已被删除。 在将 system-scope 纳入服务 API 并实施默认角色后,这些策略现已过时。
[bug 1804463] 服务 API 使用新的默认策略,使之对最终用户和管理员更具可访问性和安全性。 如果您的部署覆盖服务策略,请考虑这些新默认值。
[bug 1804482] 在
policy.v3cloudsample.json中定义的端点策略已被删除。 在将 system-scope 纳入端点 API 并实施默认角色后,这些策略现已过时。
[bug 1804483] 端点 API 使用新的默认策略,使之对最终用户和管理员更具可访问性和安全性。 如果您的部署覆盖端点策略,请考虑这些新默认值。
[bug 1804516] 联合身份提供程序 API 使用新的默认策略,使之对最终用户和管理员更具可访问性和安全性。 如果您的部署覆盖联合身份提供程序策略,请考虑这些新默认值。
[bug 1804517] 在
policy.v3cloudsample.json中定义的联合身份提供程序策略已被删除。 在将 system-scope 纳入身份提供程序 API 并实施默认角色后,这些策略现已过时。
[bug 1804519] 在
policy.v3cloudsample.json中定义的联合映射策略已被删除。 在将 system-scope 纳入映射 API 并实施默认角色后,这些策略现已过时。
[bug 1804520] 在
policy.v3cloudsample.json中定义的联合服务提供商策略已被移除。在将系统范围纳入服务提供商 API 并实施默认角色后,这些策略现已过时。
[bug 1804521] 联合映射 API 使用新的默认策略,使其以安全的方式更容易被最终用户和管理员访问。如果您的部署覆盖了联合映射策略,请考虑这些新的默认设置。
[bug 1804522] 联合服务提供商 API 使用新的默认策略,使其以安全的方式更容易被最终用户和管理员访问。如果您的部署覆盖了联合服务提供商策略,请考虑这些新的默认设置。
[bug 1804523] 联合协议 API 使用新的默认策略,使其以安全的方式更容易被最终用户和管理员访问。如果您的部署覆盖了联合协议策略,请考虑这些新的默认设置。
[bug 1805369] 组 API 使用新的默认策略,使其以安全的方式更容易被最终用户和管理员访问。如果您的部署覆盖了组策略,请考虑这些新的默认设置。
[bug 1805372] 多个已注册的限制和限制策略已被弃用。以下策略现在使用
role:admin 和 system_scope:all代替rule:admin_requiredidentity:create_registered_limitsidentity:update_registered_limitidentity:delete_registered_limitidentity:create_limitsidentity:update_limitidentity:delete_limit
这些策略并未正式弃用,因为统一的限制 API 仍然被认为是实验性的。这些新的默认设置会自动考虑系统范围。如果您的部署覆盖了已注册的限制或限制策略,请考虑这些新的默认设置。
[bug 1805402] 角色 API 使用新的默认策略,使其以安全的方式更容易被最终用户和管理员访问。如果您的部署覆盖了角色策略,请考虑这些新的默认设置。
[bug 1805403] 项目 API 使用新的默认策略,使其以安全的方式更容易被最终用户和管理员访问。如果您的部署覆盖了项目策略,请考虑这些新的默认设置。
[bug 1805406]
GET /v3/users/{user_idAPI 现在正确返回HTTP 403 Forbidden而不是HTTP 404 Not Found,如果调用用户没有调用 API 的授权。这为 API 实施了一致的授权策略检查。用户 API 使用新的默认策略,使其以安全的方式更容易被最终用户和管理员访问。如果您的部署覆盖了用户策略,请考虑这些新的默认设置。
[bug 1805880] 在
policy.v3cloudsample.json中定义的已注册限制策略已被移除。在将系统范围纳入已注册限制 API 并实施默认角色后,这些策略现已过时。
[bug 1806713] 在
policy.v3cloudsample.json中定义的角色策略已被移除。在将系统范围纳入角色 API 并实施默认角色后,这些策略现已过时。
[bug 1806762] 在
policy.v3cloudsample.json中定义的的用户策略已被移除。在将系统范围、域范围和项目范围纳入用户 API 并实施默认角色后,这些策略现已过时。
[bug 1804462] 在
policy.v3cloudsample.json中定义的组策略已被移除。在将系统范围和域范围纳入组 API 并实施默认角色后,这些策略现已过时。
[bug 1806762] 在
policy.v3cloudsample.json中定义的域策略已被移除。在将系统范围纳入域 API 并实施默认角色后,这些策略现已过时。此外,policy.v3cloudsample.json中的identity:get_domain策略已略微放宽,允许对域具有角色分配的所有用户检索该域,而不仅仅允许具有admin角色的用户访问该策略。所有与代码中的默认设置冗余的
policy.v3cloudsample.json中的策略已被移除。这提高了可维护性,并使policy.v3cloudsample.json策略文件仅包含覆盖。这些覆盖最终将被移动到代码或 keystone 中的新默认设置。如果您正在使用从policy.v3cloudsample.json移除的策略,请检查是否可以迁移到新的默认设置,或者继续将策略作为覆盖进行维护。
[bug 1806762] [bug 1804518] 在
policy.v3cloudsample.json策略文件中定义的协议策略已被移除。在将系统范围纳入联合协议 API 并实施默认角色后,这些策略现已过时。
分配驱动程序接口已更改为使用命名参数 ‘project_id’ 代替 ‘tenant_id’。
弃用说明¶
[bug 1748027] 用户策略已被弃用。
identity:get_user策略现在使用(role:reader 和 system_scope:all) 或 (role:reader 和 token.domain.id:%(target.user.domain_id)s) 或 user_id:%(target.user.id)s代替rule:admin_or_owner。identity:list_users策略现在使用(role:reader 和 system_scope:all) 或 (role:reader 和 domain_id:%(target.domain_id)s)代替rule:admin_required。identity:create_user、identity:update_user和identity:delete_user策略现在使用(role:admin 和 system_scope:all) 或 (role:admin 和 token.domain.id:%(target.user.domain_id)s)代替rule:admin_required。这些新的默认设置会自动包含对只读角色的支持,并允许对用户 API 进行更细粒度的访问,从而更容易让系统和域管理员安全地委派授权。如果您的部署覆盖了用户策略,请考虑这些新的默认设置。
[bug 1750660] 项目策略已被弃用。
identity:get_project策略现在使用(role:reader 和 system_scope:all) 或 (role:reader 和 domain_id:%(target.project.domain_id)s) 或 project_id:%(target.project.id)s代替rule:admin_required 或 project_id:%(target.project.id)s。identity:list_projects策略现在使用(role:reader 和 system_scope:all) 或 (role:reader 和 domain_id:%(target.domain_id)s)代替rule:admin_required。identity:list_user_projects策略现在使用(role:reader 和 system_scope:all) 或 (role:reader 和 domain_id:%(target.user.domain_id)s) 或 user_id:%(target.user.id)s代替rule:admin_or_owner。identity:create_project现在使用(role:admin 和 system_scope:all) 或 (role:admin 和 domain_id:%(target.project.domain_id)s)代替rule:admin_required。这些新的默认设置会自动包含对只读角色的支持,并允许对项目 API 进行更细粒度的访问,从而更容易让系统和域管理员安全地委派授权。如果您的部署覆盖了项目策略,请考虑这些新的默认设置。
[bug 1805368] [bug 1750669] 系统分配和授权策略已被弃用。
identity:list_system_grants_for_user、identity:check_system_grant_for_user、identity:list_system_grants_for_group和identity:check_system_grant_for_group策略现在使用role:reader 和 system_scope:all代替rule:admin_required。identity:create_system_grant_for_user、identity:revoke_system_grant_for_user、identity:create_system_grant_for_group和identity:revoke_system_grant_for_group策略现在使用role:admin 和 system_scope:all代替rule:admin_required。identity:check_grant和identity:list_grants策略现在使用role:reader 和 system_scope:all代替rule:admin_required。identity:create_grant和identity:revoke_grant策略现在使用role:admin 和 system_scope:all代替rule:admin_required。这些新的默认设置会自动包含对只读角色的支持,并允许对系统分配和授权 API 进行更细粒度的访问,从而更容易让管理员安全地委派授权。如果您的部署覆盖了系统分配 API,请考虑这些新的默认设置。
[bug 1750673] 角色分配
identity:list_role_assignments策略现在使用(role:reader 和 system_scope:all) 或 (role:reader 和 domain_id:%(target.domain.id)s)代替rule:admin_required。这个新的默认设置会自动包含对只读角色的支持,并允许对角色分配 API 进行更细粒度的访问。如果您的部署覆盖了角色分配策略,请考虑这个新的默认设置。
[bug 1794376] 以下域策略检查字符串已被弃用,以支持更清晰简洁的默认设置
identity:get_domainidentity:list_domainsidentity:create_domainidentity:update_domainidenttity:delete_domain
请考虑这些新的默认设置,如果您的部署覆盖了域策略。
[bug 1794864] [bug 1794376] 保护域 API 的默认策略已被弃用,以支持更安全和自助服务的策略。 如果您正在维护自定义策略,请确保将域策略解析为与新默认值一起工作,方法是添加适当的角色分配,或继续维护自定义覆盖。 新默认值允许在向域和项目中的用户授予 admin 角色时更好地保护域 API。
[bug 1804446]
identity:create_region、identity:update_region和identity:delete_region策略现在使用role:admin 和 system_scope:all,而不是rule:admin_required。这些新的默认设置会自动考虑系统范围,并支持只读角色,从而更容易让系统管理员委派部分职责,而不会损害安全性。如果您的部署覆盖了区域策略,请考虑这些新的默认设置。
[bug 1804463] 服务策略已被弃用。
identity:get_service和identity:list_services策略现在使用(role:reader 和 system_scope:all),而不是rule:admin_required。identity:create_service、identity:update_service和identity:delete_service策略现在使用(role:admin 和 system_scope:all),而不是rule:admin_required。这些新的默认设置会自动考虑系统范围,并支持只读角色,从而更容易让系统管理员委派部分职责,而不会损害安全性。如果您的部署覆盖了服务策略,请考虑这些新的默认设置。
[bug 1804483] 端点策略已被弃用。
identity:list_endpoints和identity:get_endpoint策略现在使用role:reader 和 system_scope:all,而不是rule:admin_required。identity:create_endpoint、identity:update_endpoint和identity:delete_endpoint策略现在使用role:admin 和 system_scope:all,而不是rule:admin_required。这些新的默认设置会自动考虑系统范围,并支持只读角色,从而更容易让系统管理员委派部分职责,而不会损害安全性。如果您的部署覆盖了端点策略,请考虑这些新的默认设置。
[bug 1804516] 联合身份提供商策略已被弃用。
identity:list_identity_providers和identity:get_identity_provider策略现在使用role:reader 和 system_scope:all,而不是rule:admin_required。identity:create_identity_provider、identity:update_identity_provider、identity:delete_identity_provider策略现在使用role:admin 和 system_scope:all,而不是rule:admin_required。这些新的默认设置会自动考虑系统范围,并支持只读角色,从而更容易让系统管理员委派部分职责,而不会损害安全性。如果您的部署覆盖了联合身份提供商策略,请考虑这些新的默认设置。
[bug 1804521] 联合映射策略已被弃用。
identity:list_mappings和identity:get_mapping策略现在使用role:reader 和 system_scope:all,而不是rule:admin_required。identity:create_mapping、identity:update_mapping和identity:delete_mapping策略现在使用role:admin 和 system_scope:all,而不是rule:admin_required。这些新的默认设置会自动考虑系统范围,并支持只读角色,从而更容易让系统管理员委派部分职责,而不会损害安全性。如果您的部署覆盖了联合映射策略,请考虑这些新的默认设置。
[bug 1804522] 联合服务提供商策略已被弃用。
identity:get_service_provider和identity:list_service_providers策略现在使用role:reader 和 system_scope:all,而不是rule:admin_required。identity:create_service_provider、identity:update_service_provider和identity:delete_service_provider策略现在使用role:admin 和 system_scope:all,而不是rule:admin_required。这些新的默认设置会自动包含对只读角色的支持,并允许对服务提供商 API 进行更细粒度的访问,从而更容易让系统管理员委派授权。如果您的部署覆盖了联合服务提供商策略,请考虑这些新的默认设置。
[bug 1804523] 联合协议策略已被弃用。
identity:get_protocol和identity:list_protocols现在使用role:reader 和 system_scope:all,而不是rule:admin_required。identity:create_protocol、identity:update_protocol和identity:delete_protocol策略现在使用role:admin 和 system_scope:all,而不是rule:admin_required。这些新的默认设置会自动考虑系统范围,并支持只读角色,从而更容易让系统管理员委派部分职责,而不会损害安全性。如果您的部署覆盖了联合协议策略,请考虑这些新的默认设置。
[bug 1805369] 组策略已被弃用。
identity:get_group、identity:list_groups、identity:list_users_in_group和identity:check_user_in_group策略现在使用role:reader 和 system_scope:all 或 (role:reader 和 domain_id:%(target.group.domain_id)s),而不是rule:admin_required。identity:list_groups_for_user策略现在使用(role:reader 和 system_scope:all) 或 (role:reader 和 domain_id:%(target.user.domain_id)s) 或 or user_id:%(user_id)s,而不是rule:admin_or_owner。identity:create_group、identity:update_group、identity:delete_group、identity:remove_user_from_group和identity:add_user_to_group策略现在使用role:admin 和 system_scope:all 或 (role:admin 和 domain_id:%(target.group.domain_id)s),而不是rule:admin_required。这些新的默认设置会自动考虑系统范围和域范围,并支持只读角色,从而更容易让系统管理员委派部分职责,而不会损害安全性。如果您的部署覆盖了组策略,请考虑这些新的默认设置。
[bug 1805402] 角色策略已被弃用。
identity:get_role和identity:list_roles策略现在使用role:reader 和 system_scope:all,而不是rule:admin_required。identity:create_role、identity:update_role和identity:delete_role策略现在使用role:admin 和 system_scope:all,而不是rule:admin_required。这些新的默认设置会自动考虑系统范围,并支持只读角色,从而更容易让系统管理员委派部分职责,而不会损害安全性。如果您的部署覆盖了角色策略,请考虑这些新的默认设置。
[bug 1805403] 项目策略已被弃用。
identity:get_project策略现在使用(role:reader 和 system_scope:all) 或 project_id:%(target.project.id)s,而不是rule:admin_required 或 project_id:%(target.project.id)s。identity:list_projects策略现在使用role:reader 和 system_scope:all,而不是rule:admin_required。identity:create_project、identity:update_project和identity:delete_project策略现在使用role:admin 和 system_scope:all,而不是rule:admin_required。identity:list_user_projects策略现在使用(role:admin 和 system_scope:all) 或 user_id:%(target.user.id)s,而不是rule:admin_or_owner。这些新的默认设置会自动考虑系统范围,并支持只读角色,从而更容易让系统管理员委派部分职责,而不会损害安全性。如果您的部署覆盖了项目策略,请考虑这些新的默认设置。
[bug 1805406] 用户策略已被弃用。
identity:get_user现在使用(role:reader 和 system_scope:all) 或 (role:reader 和 token.domain.id:%(target.user.domain_id)s) 或 user_id:%(target.user.id)s,而不是rule:admin_or_owner。identity:list_users策略现在使用(role:reader 和 system_scope:all) 或 (role:reader 和 domain_id:%(target.domain_id)s),而不是rule:admin_required。identity:create_user、identity:update_user和identity:delete_user策略现在使用(role:admin 和 system_scope:all) 或 (role:admin 和 token.domain.id:%(target.user.domain_id)s),而不是rule:admin_required。这些新的默认设置会自动考虑系统范围、域范围,并支持只读角色,从而更容易让系统和域管理员委派部分职责,而不会损害安全性。如果您的部署覆盖了用户策略,请考虑这些新的默认设置。
命令行选项 standard-threads, `pydev-debug-host 和 pydev-debug-port 仅在 Newton 版本的 Keystone 事件循环模型中使用。现在它们已被弃用,将在下一个版本中删除。
安全问题¶
[bug 1748027] 用户 API 现在使用系统范围、域范围、项目范围和默认角色,以更安全的方式为用户提供更好的可访问性。
[bug 1750660] 项目 API 现在使用系统范围、域范围、项目范围和默认角色,以更安全的方式为用户提供更好的可访问性。
[bug 1805368] [bug 1750669] 系统分配 API 现在使用系统范围、域范围、项目范围和默认角色,以更安全的方式为用户提供更好的可访问性。授权 API 现在使用系统范围和默认值,以便为操作员提供更好的可访问性。
[bug 1750673] 角色分配 API 现在使用系统范围、域范围、项目范围和默认角色,以更安全的方式为用户提供更好的可访问性。
[bug 1788415] [bug 968696] 为了使凭据 API 更加自助服务,已应用更细粒度的策略检查。默认情况下,最终用户现在将能够管理他们的凭据。
[bug 1794376] 域 API 现在使用系统范围和默认角色,以便以安全的方式更好地为用户提供可访问性。
[bug 1794864] [bug 1794376] 保护域 API 的默认策略已被弃用,转而采用更安全、更易于自助服务的策略。
[bug 1804446] 区域 API 现在使用系统范围和默认角色,以便以安全的方式更好地为用户提供可访问性。
[bug 1804463] 服务 API 现在使用系统范围和默认角色,以便以安全的方式更好地为用户提供可访问性。
[bug 1804483] 端点 API 现在使用系统范围和默认角色,以便以安全的方式更好地为用户提供可访问性。
[bug 1804516] 联合身份提供商 API 现在使用系统范围和默认角色,以便以安全的方式更好地为用户提供可访问性。
[bug 1804521] 联合映射 API 现在使用系统范围和默认角色,以便以安全的方式更好地为用户提供可访问性。
[bug 1804522] 联合服务提供商 API 现在使用系统范围和默认角色,以便以安全的方式更好地为用户提供可访问性。
[bug 1804523] 联合协议 API 现在使用系统范围和默认角色,以便以安全的方式更好地为用户提供可访问性。
[bug 1805369] 组 API 现在使用系统范围和默认角色,以便以安全的方式更好地为用户提供可访问性。
[bug 1808859] 组 API 现在支持使用
domain范围来设置 reader、member 和 admin 角色,以便以安全的方式更好地为用户提供可访问性。
[bug 1805372] 已注册的限制和限制 API 现在使用系统范围和默认角色,以便以安全的方式更好地为用户提供可访问性。
[bug 1805402] 角色 API 现在使用系统范围和默认角色,以便以安全的方式更好地为用户提供可访问性。
[bug 1805403] 项目 API 现在使用系统范围和默认角色,以便以安全的方式更好地为用户提供可访问性。
[bug 1805406] 用户 API 现在使用系统范围和默认角色,以便以安全的方式更好地为用户提供可访问性。
错误修复¶
[bug 1729933] 区域更新 API 现在可以正确更新额外值。 之前,通过更新 API 向区域添加任何额外值都会丢弃添加的值,除了默认值之外。 现在,所有额外值都会被正确添加和返回。 此修复是为了与其他使用“extra”的 Keystone API 保持一致,并且强烈不建议在 Keystone 中使用“extra”。
[bug 1734244] 如果 Keystone 使用 Sqlalchemy < 1.1.0,用户无法设置超过 128 个字符的密码。 将 Sqlalchemy 更新到更高版本可以解决此问题。 [相关 Sqlalchemy 变更日志]。
[bug 1744195] Keystone 单元测试现在启用了 SQL 外键。 这不会对最终用户产生影响。 但对于下游团队,请注意您的私有测试代码更改。
[‘bug 1753585 <https://bugs.launchpad.net/keystone/+bug/1753585>’_] LDAP 属性名称现在以不区分大小写的方式匹配,以符合 LDAP 实现。
[bug 1757151] 已添加关于授权和令牌范围的更全面的文档,这有助于用户和开发人员了解范围的目的以及为什么它可以成为资源隔离和 API 保护的有用工具。
[bug 1780503] 现在通知包装器会将发起者的 id 设置为给定的用户 id。这修复了一个问题,即身份.authentication 事件会导致发起者 id 成为随机的默认 UUID,而不是用户在对 keystone 进行身份验证时的用户 id。
[bug 1784536] Keystone 现在在颁发项目范围令牌但输入项目 ID 是域 ID 时,会正确返回 401 Unauthorized。
[bug 1787874] 配置选项 unique_last_password_count 的默认值已从 1 更改为 0。 现在 unique_last_password_count = 0 表示禁用密码历史记录检查。 unique_last_password_count = 1 表示更改密码时,新密码应与当前密码不同。
[bug 1788415] [bug 968696] 凭证 API 中已实现改进的自助服务支持。 这意味着最终用户能够管理自己的凭证,而不是提交工单让部署管理员为用户管理凭证。
[bug 1788694] 系统范围令牌现在支持扩展角色分配,以在令牌创建和验证响应中包含隐式角色。
[bug 1789450] 当找到 Keystone 中不存在的映射组时,Keystone 不再抛出 500 错误,而是会记录该实例并继续。 这是预期行为,因为外部 IdP 可能会指定 Keystone 中不存在的组。
[bug 1792026] 已向管理员指南和 API 参考添加用户资源选项的正式文档。 此文档有助于描述如何使用用户选项来改善用户体验,特别是对于希望提供围绕 PCI-DSS 安全要求的灵活性的部署而言。
[bug 1794864] [bug 1794376] 保护域 API 的默认策略已被弃用,转而采用更安全、更易于自助服务的策略。 具有域和项目上角色的用户现在可以使用针对该域或该域内的项目范围的令牌来调用
GET /v3/domains/{domain_id}API。 系统用户可以以与旧版 admin 用户相同的方式访问域 API。 这可以更好地保护域 API,从而为域和项目上的用户提供 admin 角色。
[bug 1796887] 添加了信任角色验证的缓存,以提高性能。 严重依赖信任的服务会受到影响,因为信任会针对数据库进行验证。 这会添加缓存以提高性能
[bug 1801873] 修复了一个问题,即由于 SQL 数据库中存在的影子用户,无法删除基于 LDAP 的域。
[bug 1804292]
policy.v3cloudsample.json策略文件中的区域策略已被删除,转而采用代码中更好的默认设置。 这些策略未经详尽测试,并且对用户和操作员具有误导性。
[bug 1804462]
policy.v3cloudsample.json策略文件中的服务策略已被删除,转而采用代码中更好的默认设置。 这些策略未经详尽测试,并且对用户和操作员具有误导性。
[bug 1804482]
policy.v3cloudsample.json策略文件中的端点策略已被删除,转而采用代码中更好的默认设置。 这些策略未经详尽测试,并且对用户和操作员具有误导性。
[bug 1804517]
policy.v3cloudsample.json策略文件中的联合身份提供商策略已被删除,转而采用代码中更好的默认设置。 这些策略未经详尽测试,并且对用户和操作员具有误导性。
[bug 1804519]
policy.v3cloudsample.json策略文件中的联合映射策略已被删除,转而采用代码中更好的默认设置。 这些策略未经详尽测试,并且对用户和操作员具有误导性。
[bug 1804520]
policy.v3cloudsample.json策略文件中的联合服务提供商策略已被删除,转而采用代码中更好的默认设置。 这些策略未经详尽测试,并且对用户和操作员具有误导性。
[bug 1805880]
policy.v3cloudsample.json策略文件中的已注册限制策略已被删除,转而采用代码中更好的默认设置。 这些策略未经详尽测试,并且对用户和操作员具有误导性。
[bug 1806713]
policy.v3cloudsample.json策略文件中的角色策略已被删除,转而采用代码中更好的默认设置。 这些策略未经详尽测试,并且对用户和操作员具有误导性。
[bug 1806762]
policy.v3cloudsample.json策略文件中的用户策略已被删除,转而采用代码中更好的默认设置。 这些策略未经详尽测试,并且对用户和操作员具有误导性。
[bug 1804462]
policy.v3cloudsample.json策略文件中的组策略已被删除,转而采用代码中更好的默认设置。 这些策略未经详尽测试,并且对用户和操作员具有误导性。
[bug 1806762]
policy.v3cloudsample.json策略文件中的域策略已被删除,转而采用代码中更好的默认设置。 这些策略未经详尽测试,并且对用户和操作员具有误导性。
[bug 1806762] [bug 1804518]
policy.v3cloudsample.json策略文件中的联合协议策略已被删除,转而采用代码中更好的默认设置。 这些策略未经详尽测试,并且对用户和操作员具有误导性。
[bug 1810393] 现在,当删除身份提供商协议时,相关联合用户的缓存信息也会被失效。
[bug 1811605] 修复了 X.509 无令牌身份验证,方法是正确地将必要的凭证信息填充到 Keystone 请求上下文中。 自 Stein 版本发布以来,RBAC 一直使用来自 Keystone 请求上下文而不是身份验证上下文的凭证信息。 因此,我们需要将必要的凭证信息从 X.509 无令牌身份验证上下文填充到请求上下文中。
[bug 1813085 <https://bugs.launchpad.net/keystone/+bug/1813085>] 验证范围限定到
default域的联合令牌不再因 Python 3 中 msgpack 的字节字符串转换问题而导致HTTP 404 Domain Not Found。
[bug 1814589] 修复了传递到 keystone.federation.utils.transform_to_group_ids() 的不正确参数,导致 HTTP 500 内部错误。
[bug 1816927] 发现 Fernet 密钥轮换后 Fernet 密钥的分配顺序会影响 Keystone 服务。 建议所有操作员确保在 Fernet 密钥分发期间,首先分发新的主 Fernet 密钥(具有最大编号)。
[bug 1817313] 如果 URL 中没有 protocol_id,则现在会为 OS-Federation 协议创建引发 METHOD NOT ALLOWED。 纠正措施是将 LIST 与 CRUD 资源分开,以便路由正则表达式可以按预期工作。
[bug 1819036] 现在,处理 Keystone 前面的请求的中间件会为每个请求缓存令牌,从而消除了在每次请求验证令牌时进行不必要的往返。 此更改不需要使用任何配置选项即可生效。 此错误的修复在测试期间提高了约 20% 的性能,并影响了 Keystone 的大部分 API。
[bug 1798184] [bug 1820333] 在 Python 3 中,python-ldap 不允许某些字段(DN、RDN、属性名称、查询)使用字节。 相反,文本值表示为 str,即 Unicode 文本类型。 通过设置 bytes_mode=False [1] 提供对 Python 2 的兼容性支持。
Keystone 的 LDAP 后端已更新,以遵循此行为,通过在 Python 2 中使用 bytes_mode=False,并移除现在在 python-ldap 中表示为文本的 UTF-8 编码和解码字段。
[1] 关于 python-ldap 中 byte/str 用法的更多详细信息,请参阅:http://www.python-ldap.org/en/2025.2/bytes_mode.html#bytes-mode
请注意,至少需要 python-ldappool 2.3.1。
统一限制 API 的一些错误已得到修复,包括
[bug 1798716] 注册限制的 region_id 现在可以更新为 None。
[bug 1798495] 统一限制的 resource_name 的长度现在限制为 1 到 255 (字符串)。
[bug 1797876] 注册限制的 default_limit 和限制的 resource_limit 现在限制为 -1 到 2147483647 (整数)。-1 表示无限制。2147483647 是 SQL 中整数的默认最大值 (4 字节)。
其他说明¶
[bug 1473292] 如果您依赖于信任后端的自定义实现,请确保在升级之前实现新方法。
Keystone 已完全转换为在 flask 下运行。所有 API 现在都原生地在 flask 下分发。
此更改包括移除一个名为 openstack.params 的遗留 WSGI 环境数据持有者。该数据持有者仅用于在 paste-deploy 下将数据传递到链中。 openstack.params 中的数据通常以一种奇怪的方式“标准化”,并且在 openstack 代码库的其余部分中未被引用。
JSON Home 文档进行了一些小的更改,以使其与我们的约定保持一致(技术上是一种 API 合同破坏),但这是 Keystone flask 代码在设置 JSON Home 值时采取更严格视图所必需的。特别是,“application_credentials” 现在有一个适当的条目,用于列出和创建新的应用程序凭据。
JSON 正文和 URL 规范化中间件已移动到 flask 原生模型。
Keystone 树中定义的任何中间件不再通过 stevedore 加载,并且相应地删除了入口点。
原始 WSGI 框架(自定义、自研、基于 WEBOB)已从代码库中移除。
[blueprint removed-as-of-stein] 在 Queens 中已弃用且仅用于 V2 的选项
member_role_id和member_role_name现在已被移除。
[blueprint removed-as-of-stein] 已弃用的 token_flush 现在已被移除。
[blueprint removed-as-of-stein] 已弃用的配置选项 bind 现在已被移除。
[blueprint removed-as-of-stein] 已弃用的选项 crypt_strength 现在已被移除。它仅对 sha512_crypt 密码哈希有用,而后者已被更安全的哈希实现所取代。
[blueprint removed-as-of-stein]
keystone.conf [DEFAULT] secure_proxy_ssl_header配置选项原定于 Pike 中移除,现在已正式移除。请使用oslo.middleware.http_proxy_to_wsgi代替。
[blueprint removed-as-of-stein] token formatter payload 中的接口
create_arguments_apply已被移除。token payload 现在不再需要强制排序。