Ussuri 系列发布说明¶
17.0.1-11¶
新特性¶
可以使用一个新的选项 ‘randomize_urls’ 来随机化 keystone 连接 LDAP 服务器的顺序,在 [ldap] ‘url’ 列表中。默认情况下为 false。
升级说明¶
[bug 1929066] 增加 id_mapping 表中 local_id 列的长度,以适应导致名称超过 64 个字符的 LDAP 组名。
安全问题¶
[bug 1992183] [CVE-2022-2447] 使用应用程序凭证颁发的令牌现在将对其到期时间进行验证,验证依据是应用程序凭证的到期时间。如果应用程序凭证在令牌之前到期,则令牌的到期时间将设置为与应用程序凭证相同的到期时间。否则,令牌将使用配置的值。
17.0.1¶
安全问题¶
[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() 正确处理参数中的字节数据类型。
17.0.0¶
新特性¶
[bug 1641625] 将 Keystone 配置为身份提供程序时,现在会在生成 SAML 断言时在断言中包含一个名为 openstack_groups 的附加属性。
[bug 1809116] 现在可以通过映射持久化用户通过联合身份验证携带的组成员关系,在用户使用联合身份验证后的一段时间内。这些成员关系的“生存时间”通过配置选项 [federation] default_authorization_ttl 或通过在身份提供程序上设置 authorization_ttl 来指定。每次用户携带该成员关系进行身份验证时,它都会被更新。
GET /v3/users/{user_id} 现在会返回与用户关联的联合对象(如果存在)。POST /v3/users 允许操作员添加一个与用户关联的联合对象列表。PATCH /v3/users 允许操作员更新用户关联的联合对象。
恢复了资源驱动程序的可配置性,现在可以创建自定义资源驱动程序,如果内置的 sql 驱动程序不满足业务需求。
升级说明¶
[bug 1806762] [bug 1630434] 整个
policy.v3cloudsample.json文件已被删除。如果您正在使用此策略文件来提供部署中的覆盖,则应考虑使用代码中的默认值并设置keystone.conf [oslo_policy] enforce_scope=True。新的策略默认值更加灵活,经过了广泛的测试,并且解决了policy.v3cloudsample.json文件试图解决的所有问题。
如果您对 shadow users 后端有自定义实现,则需要实现新方法:
delete_federated_object、create_federated_object、get_federated_objects。这些方法是支持通过用户 API 进行联合属性所必需的。
[bug 1823258]
keystone-manage bootstrap命令现在默认使默认角色(admin、member 和 reader)不可变。因此,如果重新在现有部署上运行 bootstrap 命令,如果之前没有使这些角色不可变,则这些角色将变为不可变。要选择退出此行为,请将--no-immutable-roles标志添加到 bootstrap 命令。
[bug 1872737] 为签名的 EC2 凭证请求添加了 15 分钟的默认 TTL,此前 EC2 签名令牌请求的有效期为无限期。这种行为的改变是为了防止重放攻击。
运行 keystone db_sync 收缩步骤时,
user.domain_id列和project.id列以及identity_provider.domain_id列和project.id列之间的外键约束将被删除。这些约束在代码中执行,不需要由数据库执行。这不应影响用户。
根据 TC 弃用时间表,OpenStack Ussuri 中将删除 Python2 支持。
关键问题¶
[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 中,并且受托或应用程序凭证中的角色列表会得到尊重。
安全问题¶
如果通过 [federation] default_authorization_ttl 配置选项或通过在身份提供程序上设置 authorization_ttl 启用用户组 membership 过期,则用户从身份提供程序中删除后,Keystone 中反映该更改之间将存在延迟。该时间量等于用户上次登录的时间 + idp ttl。
[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 1806762] [bug 1630434] 整个
policy.v3cloudsample.json文件已被删除。如果您正在使用此策略文件来提供部署中的覆盖,则应考虑使用代码中的默认值并设置keystone.conf [oslo_policy] enforce_scope=True。新的策略默认值更加灵活,经过了广泛的测试,并且解决了policy.v3cloudsample.json文件试图解决的所有问题。
[bug 1848238] 允许在使用 ldap 驱动程序的域时删除域。曾尝试删除 ldap 上的组,而该组是只读的。
[bug 1848342] 临时用户更新流程存在不一致之处。每次联合用户登录时,Keystone 都会在 local_user 表中创建一个条目,而不是仅更新 user 和 federated_user 表中的条目,这导致在列出用户时出现重复条目。现在,Keystone 在更新临时用户时不会在 local_user 表中创建条目。
如果您受到此错误影响,则需要在 keystone 数据库中进行修复,因此我们建议在执行此过程之前转储用户表。
- mysql db 示例
mysqldump -h <mysql host> -p -P <mysql port> -u keystone keystone federated_user local_user user > user_tables.sql
mysql -h <mysql host> -D keystone -p -P <mysql port> -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);
[bug 1856881]
keystone-manage bootstrap可以在升级场景中运行,其中存在名为admin、member和reader的预先存在的领域特定角色。
[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 凭证以尊重这些角色。
替换了 SQLAlchemy Inspector.from_engine() 的用法,并在多个 Alembic 迁移文件以及测试套件中使用 sqlalchemy.inspect() 调用。SQLAlchemy 将弃用前者语法,因此此更改允许与 SQLAlchemy 的下一系列兼容。