跳转到: 导航, 搜索

OSSN/OSSN-0013

某些版本的 Glance 未按预期应用属性保护

总结

Tom Leaman 在 OpenStack 邮件列表中报告了一个影响 Glance 属性保护的问题。在 Glance 属性保护配置文件中设置的宽松属性设置将覆盖之前设置的任何更严格的设置。

受影响的服务 / 软件

Glance, Folsom, Grizzly

讨论

Glance 属性保护限制了可以对 Glance 属性执行 CRUD 操作的用户,仅限于特定角色的用户。在 Folsom 和 Grizzly OpenStack 版本中处理属性保护规则时,匹配的规则只有在授权尝试的操作时才会停止后续规则的处理。如果存在一个匹配的规则会拒绝某个操作,紧接着又有一个匹配的规则会接受该操作,那么该操作仍然会被接受,尽管可能期望它被拒绝。

在以下 policy-protections.conf 示例中,期望的结果是将任何以 'provider_' 开头的属性的 'update' 和 'delete' 权限限制为仅具有 'admin' 角色的用户。

[^provider_.*$]
create = admin
read = admin,_member_
update = admin
delete = admin

[.*]
create = _member_
read = _member_
update = _member_
delete = _member_

由于 Folsom 和 Grizzly OpenStack 版本中规则的处理方式,'provider_' 开头的属性的 admin 限制被 '.*' 权限无效化,因为它也匹配相同的属性。这导致所有具有 '_member_' 角色的用户都被允许对以 'provider_' 开头的属性执行 'create'、'update' 和 'delete' 权限,这并非预期结果。

此错误仅影响 Glance 中用户角色的使用。当使用策略来确定属性保护时,不会发生这种情况。

建议的操作

此问题已在 Havana (Glance 2013.2.2) 及后续版本中通过更改属性保护规则处理方式来解决,即使规则不允许尝试的操作,也会在第一个匹配属性的规则处停止处理。

受影响版本的用户应避免使用多个匹配相同属性的规则。特别是,除非它们是定义的限制性最强的规则,否则应避免使用通配符规则。

如果需要一个宽松的规则,旨在匹配未被其他规则匹配的所有属性,则应使用精心设计的正则表达式代替通配符,如下所示。

[^provider_.*$]
create = admin
read = admin,_member_
update = admin
delete = admin

[^((?!provider_).)*$]
create = _member_
read = _member_
update = _member_
delete = _member_

在上面的示例中,'create'、'update' 和 'delete' 操作仅允许具有 '_member_' 角色的用户对不以 'provider_' 开头的属性执行。

应测试包含多个属性保护条目的配置文件,以确保 CRUD 操作受到管理员预期的方式约束。

联系方式 / 参考文献