Mitaka 系列发布说明

9.2.0

错误修复

  • [bug 1594482] 使用 list_limit 配置选项时,GET /services?name={service_name} API 首先会截断列表,然后按名称过滤。API 已修复为先按名称过滤,然后仅截断结果列表到所需的限制。

9.0.0

新特性

  • [blueprint domain-specific-roles] 角色现在可以可选地定义为特定域。特定域的角色不在策略文件中引用,而是可以用于允许域构建自己的私有推理规则和隐含角色。特定域的角色可以分配给其域内的域或项目,任何它所隐含的全局角色都将出现在作用域限定为相应域或项目中的令牌中。但是,特定域的角色本身将不会出现在令牌中。

  • [blueprint bootstrap] keystone-manage 现在支持 CLI 上的 bootstrap 命令,以便可以在无需 paste-ini 中的 admin_token 过滤器的情况下初始化 keystone 安装。

  • [blueprint url-safe-naming] 项目和域的名称可以可选地确保是 URL 安全的,以支持将来使用分层命名指定项目。

  • [bug 1490804] 审核 ID 包含在令牌撤销列表中。

  • [bug 1519210] 用户现在可以通过在 keystone.conf 中使用 notification_opt_out 选项指定事件类型列表来选择退出通知。这些事件永远不会发送到消息服务。

  • [bug 1542417] 添加了对 LDAP 驱动程序配置中 user_description_attribute 映射的支持。

  • [bug 1526462] 使用 LDAP Identity 驱动程序时,对 OpenDirectory 和 UNIX 的 posixGroups 的支持。

  • [bug 1489061] 已为基于用户 ID 和项目 ID 的目录检索添加缓存。这会影响 v2 和 v3 API。因此,这应该为基于 fernet 的部署提供性能优势。

  • Keystone 支持在目录中使用 $(project_id)s,其工作方式与 $(tenant_id)s 相同。使用 $(tenant_id)s 已被弃用,应更新目录端点以使用 $(project_id)s

  • [bug 1525317] 启用基于 idenabled 属性的身份提供商的过滤。

  • [bug 1555830] 启用基于 idenabled 属性的服务提供商的过滤。

  • [blueprint implied-roles] Keystone 现在支持创建隐含角色。现在可以添加角色推理规则,以指示分配一个角色意味着分配另一个角色。规则的形式为 prior_role 意味着 implied_role。在令牌生成时,分配了具有隐含角色的用户/组的分配将被扩展为也包含令牌中的这些角色。隐含角色的扩展受 [assignment] 部分的 keystone.conf 中的 prohibited_implied_role 选项控制。

  • [bug 968696] 已在 [resource] 部分添加一对配置选项,以指定一个特殊的 admin 项目:admin_project_domain_nameadmin_project_name。如果定义了这些选项,则为该项目发出的任何作用域令牌都将向令牌添加一个额外的标识符 is_admin_project。然后,服务中的策略规则在评估 API 的访问控制策略时可以检查此标识符。Keystone 尚未支持将充当域的项目作为管理项目。一旦代码合并了充当域的项目,就会添加此功能。

  • [bug 1515302] 已在 [ldap] 部分添加两个新的配置选项。user_enabled_emulation_use_group_configproject_enabled_emulation_use_group_config,允许部署者选择是否要覆盖默认的组 LDAP 模式选项。

  • [bug 1501698] 在使用 LDAP 作为身份后端时,支持参数 list_limit

  • [bug 1479569] 已为列出角色分配(GET /role_assignments?include_names=True)添加名称,而不是仅返回对象的内部 ID,还返回了名称。

  • 域现在表示为具有属性 is_domain 设置为 true 的顶级项目。任何以前的顶级项目都将显示为这些父项目。可以通过项目 API 或域 API(仅限 V3)创建、读取、更新和删除充当域的项目。

  • [bug 1500222] 已将用户 ID、项目 ID 和域 ID 等信息添加到日志条目中。作为此更改的副作用,用户的域 ID 和项目的域 ID 现在包含在身份验证上下文中。

  • [bug 1473042] Keystone 的 S3 兼容性支持现在可以使用 AWS Signature Version 4 进行身份验证。

  • [blueprint totp-auth] Keystone 现在支持通过基于时间的 One-time Password (TOTP) 进行身份验证。要启用此功能,请将 totp 身份验证插件添加到 keystone.conf[auth] 部分中的 methods 选项。有关使用 TOTP 的更多信息,请参阅 keystone 的开发者文档

升级说明

  • [bug 1473553] 必须更新 keystone-paste.ini,以便将 admin_token_auth 中间件放在 build_auth_context 之前。请参阅示例 keystone-paste.ini 以获取正确的 pipeline 值。将 admin_token_auth 放在 build_auth_context 之后已被弃用,并且在未来的版本中将不再支持。

  • LDAP 驱动程序现在在从 LDAP 检索用户后也会映射用户描述属性。如果您的设置不需要此行为,请将 description 添加到 LDAP 驱动程序配置设置的 user_attribute_ignore 中。描述属性的默认映射设置为 description。如果您的 LDAP 使用不同的属性名称(例如,对于基于 AD 的 LDAP,使用 displayName),请调整 LDAP 驱动程序配置设置 user_description_attribute。如果您的 user_additional_attribute_mapping 设置包含 description:description,则可以删除此映射,因为现在这是默认行为。

  • 配置选项 os_inherit 的默认设置已更改为 True。如果需要继续禁用 API 的这一部分,则通过显式将 os_inherit 选项指定为 False 来覆盖默认设置。

  • 必须更新 keystone-paste.ini 文件以删除扩展过滤器及其在 [pipeline:api_v3] 中的使用。删除以下过滤器:[filter:oauth1_extension][filter:federation_extension][filter:endpoint_filter_extension][filter:revoke_extension]。有关指导,请参阅示例 keystone-paste.ini 文件。

  • 必须更新 keystone-paste.ini 文件以删除扩展过滤器及其在 [pipeline:public_api][pipeline:admin_api] 管道中的使用。删除以下过滤器:[filter:user_crud_extension][filter:crud_extension]。有关指导,请参阅示例 keystone-paste.ini 文件。

  • 添加了一个新的配置选项 insecure_debug,用于控制是否将调试信息返回给客户端。以前由 debug 选项控制。如果您想将额外信息返回给客户端,请将值设置为 true。这些额外信息可能会帮助攻击者。

  • LDAP 连接池的配置选项 [ldap] use_pool[ldap] use_auth_pool 现在默认都已启用。仅受影响使用 LDAP 驱动程序的部署。可在 [ldap] 部分中提供其他配置选项来调整连接池大小等。

  • [bug 1541092] 仅支持来自 Kilo 及更高版本的数据库升级。

  • Keystone 现在使用 oslo.cache。更新 [cache] 部分的 keystone.conf 以指向 oslo.cache 后端:oslo_cache.memcache_pooloslo_cache.mongo。请参阅示例配置文件以获取示例。有关更多文档,请参阅 oslo.cache

弃用说明

  • [blueprint deprecated-as-of-mitaka] V8 赋值驱动程序接口已弃用。计划在 OpenStack 的 ‘O’ 版本中删除对 V8 赋值驱动程序接口的支持。

  • [blueprint deprecated-as-of-mitaka] V8 角色驱动程序接口已弃用。计划在 OpenStack 的 ‘O’ 版本中删除对 V8 角色驱动程序接口的支持。

  • V8 资源驱动程序接口已弃用。计划在 OpenStack 的 ‘O’ 版本中删除对 V8 资源驱动程序接口的支持。

  • 目录端点中使用 $(tenant_id)s 已被弃用,转而使用 $(project_id)s

  • [blueprint deprecated-as-of-mitaka] 弃用了所有 v2.0 API。Keystone 团队建议使用 v3 API。大多数 v2.0 API 将在 ‘Q’ 版本中删除。但是,身份验证 API 和 EC2 API 被无限期弃用,并且不会在 ‘Q’ 版本中删除。

  • [blueprint deprecated-as-of-mitaka] 鉴于 Mitaka 版本,PKI 和 PKIz 令牌格式已被弃用。它们将在 ‘O’ 版本中删除。由于此更改,配置文件的 [token] 部分中的 hash_algorithm 选项也已被弃用。由于此更改,keystone-manage pki_setup 命令也已被弃用。

  • [blueprint deprecated-as-of-mitaka] 鉴于 Mitaka 版本,Identity 后端的 LDAP 驱动程序的写入支持已被弃用。这包括以下操作:创建用户、创建组、删除用户、删除组、更新用户、更新组、将用户添加到组和从组中删除用户。这些操作将在 ‘O’ 版本中删除。

  • [blueprint deprecated-as-of-mitaka] 鉴于 Mitaka 版本,auth 插件 keystone.auth.plugins.saml2.Saml2 已被弃用。建议使用 keystone.auth.plugins.mapped.Mapped 代替。将在 ‘O’ 版本中删除 saml2 插件。

  • [blueprint deprecated-as-of-mitaka] 鉴于 Mitaka 版本,simple_cert_extension 已被弃用,因为它仅用于支持 PKI 和 PKIz 令牌格式。它将在 ‘O’ 版本中删除。

  • 配置选项 os_inherit 已禁用。将来,此选项将被删除,并且 API 的这一部分将始终启用。

  • [blueprint deprecated-as-of-mitaka] 文件 httpd/keystone.py 已被弃用,转而使用 keystone-wsgi-adminkeystone-wsgi-public,并且可能在 ‘O’ 版本中删除。

  • [blueprint deprecated-as-of-mitaka] keystone.common.cache.backends.memcache_poolkeystone.common.cache.backends.mongokeystone.common.cache.backends.noop 已被弃用,转而使用 oslo.cache 后端。Keystone 后端将在 ‘O’ 版本中删除。

  • V9 Federation 驱动程序接口取代了 V8 Federation 驱动程序接口。计划在 OpenStack 的 ‘O’ 版本中删除对 V8 Federation 驱动程序接口的支持。

安全问题

  • 与使用适当的用户名/密码相比,admin_token 过滤器是不安全的。从历史上看,由于 CMS 系统的工作方式,Keystone 在初始化后一直启用了 admin_token 过滤器。通过使用 keystone-manage bootstrap 进行带外初始化,将消除围绕静态共享字符串的安全问题,该字符串传达了对 keystone 和整个安装的管理员访问权限。

  • 身份验证的 admin_token 方法最初并非用于任何目的,仅用于启动安装。然而,许多部署由于限制了编辑用于配置 Web 流水线的 paste 文件,不得不启用 admin_token 方法。为了最大限度地降低此机制的风险,admin_token 配置值现在默认为 Python 的 None 值。此外,如果该值设置为 None,无论是显式设置还是隐式设置,admin_token 将不会被启用,并且尝试使用它将导致身份验证失败。

  • [bug 1490804] [CVE-2015-7546] 修复了一个错误,当使用 PKI 或 PKIZ token 提供程序时,攻击者可以避免 token 撤销。此漏洞的完整修复需要 keystonemiddleware 项目中的相应修复。

错误修复

  • [bug 1535878] 最初,要执行 GET /projects/{project_id},提供的策略文件要求用户至少具有项目管理员级别的权限。它们已更新为允许任何在项目上具有角色的用户执行此操作。

  • [bug 1516469] 当发出项目范围的 token 并且使用 endpoint_filter.sql 作为目录驱动程序时,通过 endpoint_group 项目关联过滤的 endpoints 将包含在服务目录中。

  • 现在已添加支持,以发送用户/组成员资格的通知事件。当用户被添加到或从组中移除时,将发送一个通知,其中包括用户和组的标识符。

  • [bug 1527759] 撤销了消除使用非默认域中的用户或项目获取 V2 token 的能力的变化。此更改破坏了实际部署,这些部署利用了通过 V2 API 使用非默认域中的用户或项目进行身份验证的能力。部署者正在被说服更新代码以正确处理 V3 身份验证,但此修复破坏了预期和经过测试的行为。

  • [bug 1480270] 使用 keystone REST API 的 v3 版本创建的 endpoints 现在将包含在通过 v2.0 API 列出 endpoints 时。

其他说明

  • list_project_ids_for_user()、list_domain_ids_for_user()、list_user_ids_for_project()、list_project_ids_for_groups()、list_domain_ids_for_groups()、list_role_ids_for_groups_on_project() 和 list_role_ids_for_groups_on_domain() 方法已从 Assignment 驱动程序的 V9 版本中删除。

  • [blueprint move-extensions] 如果运行任何扩展迁移,例如:keystone-manage db_sync --extension endpoint_policy,将返回一个错误。这是设计使然。要运行这些迁移,只需运行:keystone-manage db_sync。受影响的完整扩展列表是:oauth1federationendpoint_filterendpoint_policyrevoke

  • [bug 1367113] KVS 目录后端获取“实体”和“列出实体”的功能已重新实现,以使用目录模板中的数据。 之前这只会对运行时创建的临时数据起作用。现在,创建、更新和删除实体功能会引发异常。

  • keystone-manage db_sync 将不再创建默认域。该域用作使用遗留 v2.0 API 创建的任何用户的域。默认域由 keystone-manage bootstrap 创建,并在使用遗留 v2.0 API 创建用户或项目时创建。

  • 已删除对 v2.0 API 验证 trust 范围的 token 的能力,转而使用 API 的版本 3。

  • [blueprint removed-as-of-mitaka] 删除了 token 响应中的 extras。这些字段是不必要的,并且定义良好的 API 使此字段变得冗余。这在 Kilo 版本中已被弃用。

  • [blueprint removed-as-of-mitaka] 删除了 keystone 中间件中的 RequestBodySizeLimiter。keystone 团队建议使用 oslo_middleware.sizelimit.RequestBodySizeLimiter 代替。这在 Kilo 版本中已被弃用。

  • [blueprint removed-as-of-mitaka] 删除了事件类型为 identity.created.role_assignmentidentity.deleted.role_assignment 的通知。keystone 团队建议监听 identity.role_assignment.createdidentity.role_assignment.deleted 代替。这在 Kilo 版本中已被弃用。

  • [blueprint removed-as-of-mitaka] 删除了 trust 控制器中的 check_role_for_trust,确保策略文件不引用此目标。这在 Kilo 版本中已被弃用。