Ocata 系列发布说明¶
11.0.4¶
错误修复¶
[bug 1704205] 所有用户和组都需要一个名称。 在此修复之前,Keystone 没有正确地强制执行此规则,对于 LDAP 用户和组而言如此。 现在,Keystone 将忽略没有为其配置使用的 LDAP 属性值的用户和组名称。
[bug 1718747] 修复了一个回归,该回归导致删除包含用户的域时出现服务器错误。此错误修复恢复了先前删除域中命名空间的用户的行为。这仅在使用 SQL Identity 后端时适用。
其他说明¶
[bug 1718747] 作为解决身份 SQL 后端中一个回归的一部分,该回归阻止包含用户的域被删除,通知回调已更改,以便仅当身份后端为 SQL 时才删除用户。如果您的自定义身份后端不是只读的,则在 keystone 中删除域将不会删除后端中的用户,除非您的驱动程序具有评估为 true 的 is_sql 属性。
11.0.3¶
安全问题¶
[bug 1703369] 在之前的版本中,默认
policy.json文件中 identity:get_identity_provider 规则存在拼写错误。 该规则的默认值与默认规则的默认值(仅限管理员)相同,因此此拼写错误并不明显。 任何自定义此规则的人员都应检查其设置,并确认他们没有复制该拼写错误。 关于此回溯的更多上下文,请参阅 bug 报告。
错误修复¶
[bug 1689616] 在对大型数据集执行令牌刷新时,进行了重大改进。
[bug 1687593] 确保用于创建 OAUTH1 请求令牌时使用的 URL 也是验证请求令牌的 URL。
11.0.1¶
错误修复¶
[bug 1674415] 修复了 keystone 错误消息翻译的问题,当设置了区域设置时,来自 identity API 的任何错误消息都不会发生翻译。
11.0.0¶
序言¶
默认的令牌提供程序现在是 Fernet。
已删除 PKI 和 PKIz 令牌格式。 请参阅
其他 说明以获取更多详细信息。已删除写入 LDAP 的支持。 请参阅
其他 说明以获取更多详细信息。
新特性¶
[blueprint allow-expired] 在令牌验证调用 (
GET/HEAD /v3/auth/tokens) 中添加了一个 allow_expired 标志,允许获取已过期的令牌。 这允许在长时间运行的操作中验证令牌。
[blueprint password-expires-validation] 令牌响应现在将在
user对象中包含一个password_expires_at字段,可以简要表示为{"token": {"user": {"password_expires_at": null}}}
如果启用了 PCI 支持,通过
[security_compliance]配置选项,则password_expires_at字段将填充一个时间戳。 否则,它将默认为null,表示密码不会过期。
[blueprint pci-dss-notifications] CADF 通知现在扩展到 PCI-DSS 事件。 添加了一个
reason对象到通知中。reason对象同时包含一个reasonType(原因的简短描述)和一个reasonCode(HTTP 返回代码)。 以下事件将受到影响如果用户在 X 天内没有更改其密码。 请参阅
[security_compliance] password_expires_days。如果用户在多次身份验证失败后被锁定。 请参阅
[security_compliance] lockout_failure_attempts。如果用户提交的新密码最近被使用过。 请参阅
[security_compliance] unique_last_password_count。如果密码不符合指定的标准。 请参阅
[security_compliance] password_regex。如果用户尝试更改密码过于频繁。 请参阅
[security_compliance] minimum_password_age。
有关更多详细信息,请参阅:事件通知
[blueprint pci-dss-password-requirements-api] 添加了一个新的 API (
/v3/domains/{domain_id}/config/security_compliance) 以检索密码的正则表达式要求。 具体来说,将返回[security_compliance] password_regex和[security_compliance] password_regex_description。 请注意,只有在启用 PCI 支持时,通过各种[security_compliance]配置选项,这些选项才有意义。
- [blueprint pci-dss-query-password-expired-users] 在
/v3/users和/v3/groups/{group_id}/users中添加了一个password_expires_at查询。password_expires_at查询由两部分组成,一个operator(有效选项如下)和一个timestamp(格式为YYYY-MM-DDTHH:mm:ssZ)。 API 将根据给定的operator和timestamp过滤用户列表。 lt - 密码在时间戳之前过期
lte - 密码在或于时间戳之前过期
gt - 密码在时间戳之后过期
gte - 密码在或于时间戳之后过期
eq - 密码在时间戳时过期
neq - 密码不在时间戳时过期
- [blueprint pci-dss-query-password-expired-users] 在
[blueprint per-user-auth-plugin-reqs] 已实现每个用户的多因素身份验证规则 (MFA 规则)。 这些规则定义了可以使用哪些身份验证方法(例如,密码、TOTP),并提供了要求使用多种身份验证形式才能成功获取令牌的能力。
MFA 规则通过用户创建和更新 API (
POST/PATCH /v3/users) 调用设置;这些选项允许管理员强制用户使用特定的身份验证形式或身份验证形式的组合来获取令牌。 规则的指定方式如下user["options"]["multi_factor_auth_rules"] = [["password", "totp"], ["password", "custom-auth-method"]]
规则指定为列表的列表。 子列表的元素必须是字符串,旨在镜像所需的身份验证方法名称(例如,
password、totp等),如在keystone.conf文件中的[auth] methods选项中定义。每个方法列表指定一个规则。 如果用户提供的身份验证方法匹配(或超过)列表中的身份验证方法,则使用该规则。 找到的第一个匹配规则(规则不会按特定顺序处理)将被使用。 如果用户具有定义为
[["password", "totp"]]的规则集,则用户必须提供密码和 totp 身份验证方法(并且两种方法都必须成功)才能接收令牌。 但是,如果用户具有定义为[["password"], ["password", "totp"]]的规则集,则用户可以单独使用password方法,但如果指定了totp,则需要同时使用password和totp。未在
keystone.conf的[auth] methods选项中定义的任何身份验证方法在处理规则时将被忽略。 不允许空规则。 如果由于其中不存在有效的身份验证方法而导致规则为空,则该规则将在身份验证时被丢弃。 如果没有规则或没有有效的规则,则身份验证以默认方式发生:任何单个配置的身份验证方法都足以接收令牌。在用户应免除 MFA 规则的情况下,无论是否设置,都可以通过用户创建和更新 API (
POST/PATCH /v3/users) 调用将用户选项multi_factor_auth_enabled设置为False。 如果此选项设置为False,则 MFA 规则将对该用户被忽略。 任何其他值,除了False,都将导致处理 MFA 规则;该选项只能是布尔值 (True或False) 或“None”(这将导致默认行为(与True相同),但该选项将不再显示在user["options"]字典中。要标记用户免除 MFA 规则
user["options"]["multi_factor_auth_enabled"] = False
通常不应在任何 MFA 规则中指定
token身份验证方法。token身份验证方法将包含原始身份验证请求的所有先前身份验证方法,并将匹配适当的规则集。 这是有意的,因为token方法用于重新定义/更改活动项目。安全信息:MFA 规则仅在通过 V3 身份验证 API 进行身份验证时处理。 如果启用了 V2 Auth,如果用户可以通过 V2 Auth API 进行身份验证,则有可能绕过 MFA 规则。 建议禁用 V2 身份验证以完全执行 MFA 规则。
[blueprint shadow-mapping] 联合身份映射引擎现在支持为
federated users自动配置projects。 将为用户在指定项目上自动创建一个角色分配。 如果映射中指定的项目不存在,它将在与identity provider关联的domain中自动创建。 这种行为可以使用映射的local部分中的特定语法触发。 有关更多信息,请参阅:映射组合
[blueprint support-federated-attr] 添加了新的过滤器到 列出用户 API (
GET /v3/users) 以支持查询联合身份属性:idp_id、protocol_id和unique_id。
[bug 1638603] 添加了对 Active Directory 中嵌套组的支持。 添加了一个新的布尔选项
[ldap] group_ad_nesting,默认值为False。 在使用具有嵌套组的 Active Directory 时启用该选项。 此选项将影响list_users_in_group、list_groups_for_user和check_user_in_group操作。
[bug 1641645] 从 自助更改用户密码 API (
/v3/user/$user_id/password) 中删除了 RBAC 保护,这意味着用户现在可以在不指定X-Auth-Token标头中的令牌的情况下更改其密码。 此更改将允许密码过期的用户在不需要管理员的情况下更新其密码。
[bug 1641654] 从 oslo.middleware 的
healthcheck中间件已添加到 keystone 应用程序管道中,默认情况下。 此中间件提供了一种检查 keystone 健康状况的常用方法。 请参阅keystone-paste.ini中提供的示例粘贴,以查看如何包含healthcheck中间件。
[bug 1641816] 现在默认启用
[token] cache_on_issue选项。 除非启用全局缓存和令牌缓存,否则此选项无效。
[bug 1642348] 添加了新的选项
[security_compliance] lockout_ignored_user_ids以允许部署者指定免除 PCI 锁定规则的用户。
[Bug 1645487] 添加了一个新的 PCI-DSS 功能,该功能将要求新用户在使用后立即更改其密码,以及在管理员密码重置后更改其密码。 可以通过将 [security_compliance]
change_password_upon_first_use设置为True来启用新功能。
升级说明¶
[blueprint allow-expired] 为了允许长时间运行的操作完成,服务必须能够通过
allow_expired标志获取过期的令牌。 令牌可检索的时间长度超过其传统到期时间由[token] allow_expired_window选项管理,因此数据必须可检索此时间量。 使用 fernet 令牌时,这意味着旧令牌仍然可以解密,因此密钥轮换周期必须超过此时间,以便旧令牌仍然可以解密。 确保不要比[token] expiration+[token] allow_expired_window秒更快地轮换 fernet 密钥。
[bug 1547684] 对
policy.v3cloudsample.json示例文件进行了一些小的更改,以便示例文件可以正确加载。cloud_admin规则已更改为"role:admin and (token.is_admin_project:True or domain_id:admin_domain_id)"为正确编写的
"role:admin and (is_admin_project:True or domain_id:admin_domain_id)"根据需要调整配置工具,详情请参阅
fixes部分,了解此更改的更多信息。
[bug 1561054] 默认令牌提供程序已从 UUID 切换到 Fernet。请注意,Fernet 需要在运行 Ocata 之前建立密钥存储库,可以通过运行
keystone-manage fernet_setup来完成。此外,对于多节点部署,在升级之前必须使用密钥分发机制。密钥存储库创建后,应将其分发到部署中的所有 keystone 节点。这可确保每个 keystone 节点能够验证部署中颁发的令牌。如果您不想切换令牌格式,则需要在keystone.conf中通过设置[token] provider为uuid来显式设置每个节点中的令牌提供程序。文档可以在 fernet-tokens 找到。
[bug 1641654] 来自 oslo.middleware 的
healthcheck中间件默认已添加到 keystone 应用程序管道中。以下部分已添加到keystone-paste.ini[filter:healthcheck] use = egg:oslo.middleware#healthcheck
建议将
healthcheck中间件放在管道中第一个位置pipeline = healthcheck cors sizelimit http_proxy_to_wsgi osprofiler ...
[bug 1641660]
[DEFAULT] notification_format的默认值已从basic更改为cadf。CADF 通知包含有关发起请求的用户的更多信息。
[bug 1641660]
[DEFAULT] notification_opt_out的默认值已更改为包含:identity.authenticate.success、identity.authenticate.pending和identity.authenticate.failed。如果部署依赖于这些通知,则覆盖默认设置。
[bug 1642687] 成功升级后,所有现有的
identity providers现在都将与自动创建的域关联。在 Ocata 发布之前存在的每个identity provider现在都将具有domain_id字段。新域将具有一个id(随机 UUID)、一个name(将与identity providerID 匹配),并且默认情况下将enabled。
[与 Bug 1649446 相关]
identity:list_revoke_events规则已在两个示例策略文件中(policy.json和policy.v3cloudsample.json)中进行了更改。从"identity:list_revoke_events": ""
到
"identity:list_revoke_events": "rule:service_or_admin"
弃用说明¶
[bug 1659995] 新的配置选项
[security_compliance] password_expires_ignore_user_ids已被弃用,以支持使用通过用户创建和更新 API 调用提供的选项值。
[blueprint deprecated-as-of-ocata] 在 Ocata 发布中,目录后端
endpoint_filter.sql已被弃用,并与sql后端合并。建议将endpoint_filter.sql目录后端替换为sql后端。endpoint_filter.sql后端将在 Pike 发布中删除。
[blueprint deprecated-as-of-ocata] 各种 KVS 后端和配置选项已被弃用,将在 Pike 发布中删除。这包括
keystone.common.kvs.backends.inmemdb.MemoryBackendkeystone.common.kvs.backends.memcached.MemcachedBackendkeystone.token.persistence.backends.kvs.Token在 keystone.conf 中所有
[kvs]下的配置选项在 keystone.conf 中
[memcached] servers配置选项
关键问题¶
[bug 1561054] 如果升级到 Fernet 令牌,则必须拥有密钥存储库和密钥分发机制,否则令牌验证可能无法正常工作。有关更多详细信息,请参阅升级部分。
安全问题¶
[bug 1650676] 身份验证插件现在需要使用
AuthContext对象。这增加了安全功能,以确保诸如user_id之类的信息不会在服务器处理的身份验证方法之间发生更改。keystone.controllers.Auth.authenticate方法现在需要将参数auth_context设为实际的AuthContext对象。
错误修复¶
[bug 1524030] 在令牌验证期间,我们减少了返回的撤销事件数量,仅返回与令牌相关的事件子集。从而提高了整体令牌验证性能。
[bug 1651989] 由于
bug 1547684,在使用policy.v3cloudsample.json示例文件时,域管理员令牌被视为云管理员。由于is_admin_project功能仅支持项目范围的令牌,因此我们自动将任何域范围的令牌的属性is_admin_project设置为False。[bug 1547684]
policy.v3cloudsample.json示例文件中的一个拼写错误导致 oslo.policy 无法加载该文件。有关更多详细信息,请参阅upgrades部分。
[bug 1571878] 创建或更新联合身份验证协议时,现在需要有效的
mapping_id。如果mapping_id不存在,将返回400 - Bad Request。
[bug 1616424] 通过
/v3/OS-OAUTH1/request_token和/v3/OS-OAUTH1/access_tokenAPI 分别创建 OAuth 请求令牌和 OAuth 访问令牌时,提供更好的异常消息。
[bug 1622310] 如果项目或用户(信任人或受托人)已被删除,则信任将被失效。
[bug 1636950] 新选项
[ldap] connection_timeout允许部署者设置用于与 LDAP 服务器的OPT_NETWORK_TIMEOUT值。如果 LDAP URL 不正确或连接失败,这将允许 LDAP 服务器返回SERVER_DOWN异常。默认情况下,[ldap] connection_timeout的值为 -1,表示禁用。设置正值(以秒为单位)以启用该选项。
[bug 1642457] 处理 Fernet 令牌密钥轮换期间的磁盘写入和 IO 失败。与其创建空密钥,不如正确捕获和记录无法写入磁盘时的错误。
[bug 1642687] 通过 OS-FEDERATION API 注册
identity provider时,现在建议包含一个domain_id以与请求中的identity provider关联。使用identity provider进行身份验证的联合用户现在将与指定的domain_id关联。如果未指定domain_id,则将自动创建一个域。
[bug 1642687] 使用
identity provider进行身份验证的用户现在将具有一个domain_id属性,该属性与identity provider关联。
[bug 1642692] 删除 federation protocol 时,使用 federation protocol 进行身份验证的所有用户也将被删除。
[bug 1649138] 当使用 LDAP 作为身份后端时,初始绑定现在将在创建连接对象时发生,即在执行 LDAP 查询时尽早发生,无论绑定是经过身份验证的还是匿名的,以便可以正确且尽早地处理任何连接错误。
[Bug 1649446] 列出撤销事件的默认策略已更改。以前,任何经过身份验证的用户都可以列出撤销事件;现在,默认情况下,它仅是管理员或服务用户功能。可以通过修改 keystone 使用的策略文件来更改此设置。
[bug 1656076]
keystone.controllers.Auth.authenticate下的各种插件现在需要返回AuthContext对象。
[bug 1659995] 通过用户创建和更新 API(
POST/PATCH /v3/users)调用提供了新的选项,这些选项将允许管理员通过 API 标记用户免于某些 PCI 要求。将以下用户属性设置为
True或False在 API 请求中。要标记用户免于 PCI 密码锁定策略user['options']['ignore_lockout_failure_attempts']
要标记用户免于 PCI 密码过期策略
user['options']['ignore_password_expiry']
要标记用户免于 PCI 重置策略
user['options']['ignore_change_password_upon_first_use']
其他说明¶
[bug 1017606]
get_catalog和get_v3_catalog方法的签名keystone.catalog.backends.base.CatalogDriverBase已更新。扩展抽象类(CatalogDriverBase)的第三方扩展应根据新的参数名称进行更新。方法签名已更改为get_catalog(self, user_id, tenant_id) get_v3_catalog(self, user_id, tenant_id)
到
get_catalog(self, user_id, project_id) get_v3_catalog(self, user_id, project_id)
[bug 1524030]
list_events方法的签名keystone.revoke.backends.base.RevokeDriverBase已更新。扩展抽象类(RevokeDriverBase)的第三方扩展应根据新的参数名称更新其代码。方法签名已更改为list_events(self, last_fetch=None)
到
list_events(self, last_fetch=None, token=None)
[bug 1563101] 令牌提供程序驱动程序接口已从
keystone.token.provider.Provider移动到keystone.token.providers.base.Provider。如果实施自定义令牌提供程序,请从新位置进行子类化。
[bug 1582585] 添加了一个新的方法
get_domain_mapping_list到keystone.identity.mapping_backends.base.MappingDriverBase。 扩展抽象类 (MappingDriverBase) 的第三方扩展应该实现这个新方法。 该方法具有以下签名get_domain_mapping_list(self, domain_id)
并且将返回给定域 ID 的映射列表。
[bug 1611102] 从
keystone.endpoint_policy.backends.base.EndpointPolicyDriverBase抽象类中删除了list_endpoints_for_policy()和get_policy_for_endpoint()方法,因为它们未使用。
[bug 1622310] 在
keystone.trust.backends.base.TrustDriverBase中添加了一个新的方法delete_trusts_for_project。 扩展抽象类 (TrustDriverBase) 的第三方扩展应该根据新的参数名称进行更新。 该新方法的签名是delete_trusts_for_project(self, project_id)
[bug 1642687] 更新了
keystone.identity.shadow_backends.base.ShadowUsersDriverBase的create_federated_user方法的签名。扩展抽象类 (
ShadowUsersDriverBase) 的第三方扩展应该根据新的参数名称进行更新。该方法签名已更改为
create_federated_user(self, federated_dict)
到
create_federated_user(self, domain_id, federated_dict)
[bug 1659730] 更新了
keystone.auth.plugins.base.AuthMethodHandler的authenticate方法的签名。 扩展抽象类 (AuthMethodHandler) 的第三方扩展应该根据新的参数名称更新其代码。 该方法签名已更改为authenticate(self, context, auth_payload, auth_context)
到
authenticate(self, request, auth_payload, auth_context)
为了支持 Fernet token,已移除 PKI 和 PKIz token 格式。
为了支持只读,已移除 LDAP 的写入支持。 以下操作不再支持 LDAP
创建 用户创建 组删除 用户删除 组更新 用户更新 组将 用户 添加到 组将 用户 从 组 中移除
contrib 扩展的路由和 SQL 后端已被移除,它们已被合并到 keystone 中,不再是可选的。 这会影响
keystone/contrib/admin_crudkeystone/contrib/endpoint_filterkeystone/contrib/federationkeystone/contrib/oauth1keystone/contrib/revokekeystone/contrib/simple_certkeystone/contrib/user_crud
Keystone 缓存后端已被移除,转而使用其 oslo.cache 对等物。 这会影响
keystone/common/cache/backends/mongokeystone/common/cache/backends/memcache_poolkeystone/common/cache/backends/noop
为了使用单个方法验证 token (
validate_token),其签名是validate_token(self, token_ref),从抽象类keystone.token.providers.base.Provider中删除了几个 token 验证方法(见下文)。 如果使用自定义 token 提供程序,请相应地更新自定义提供程序。validate_v2_tokenvalidate_v3_tokenvalidate_non_persistent_token
为了使用单个方法颁发 token (
issue_token),从抽象类keystone.token.providers.base.Provider中删除了几个 token 颁发方法(见下文)。 如果使用自定义 token 提供程序,请相应地更新自定义提供程序。issue_v2_tokenissue_v3_token
为了支持严格不可变的域 ID,已移除
[DEFAULT] domain_id_immutable配置选项。
为了始终启用 endpoint policy 扩展,已移除
[endpoint_policy] enabled配置选项。
为了支持
keystone.auth.plugins.mapped.Mapped插件,已移除 auth 插件keystone.auth.plugins.saml2.Saml2。
为了使用 Fernet token(不需要持久化),已移除
memcache和memcache_pooltoken 持久化后端。
为了支持
keystone-wsgi-admin和keystone-wsgi-public脚本,已移除httpd/keystone.py文件。
已移除
keystone/service.py文件,逻辑已移动到keystone/version/service.py。
已移除来自
build_auth_context中间件的 admin token 检查。 如果您的部署需要使用 admin token,请更新keystone-paste.ini,以便admin_token_auth在 paste 管道中位于build_auth_context之前,否则完全从keystone-paste.ini中移除admin_token_auth中间件。
现在
[assignment] driver默认值为sql。 移除确定默认分配驱动程序的逻辑,如果未通过配置提供。 Keystone 仅支持一个分配驱动程序,除非您部署自定义分配驱动程序,否则不应更改它。
现在
[resource] driver默认值为sql。 移除确定默认资源驱动程序的逻辑,如果未通过配置提供。 Keystone 仅支持一个资源驱动程序,除非您部署自定义资源驱动程序,否则不应更改它。
已移除
[os_inherit] enabled配置选项,OS-INHERIT 扩展现在始终启用。
已移除
[DEFAULT] domain_id_immutable选项。 这消除了更改用户、组和项目的domain_id属性的能力。 该行为是在 Mitaka 版本中引入的,现在已被移除。