Horizon 中的抽象策略定义¶
https://blueprints.launchpad.net/congress/+spec/horizon-policy-abstraction
Congress 旨在为任何云服务提供一个可扩展的开源框架,用于治理和法规遵从性。用户可以通过纯粹的 Datalog 在 Congress 中定义策略。但是,Datalog 与数据表一起使用,对于策略来说是一个非常困难和复杂的描述。用户可能在理解和部署 Datalog 策略时遇到一些问题。因此,本规范为策略提供了一个抽象,并在 Horizon 中以抽象形式展示它,这将有助于用户表达他们的策略。
问题描述¶
即使对于不熟悉 Datalog 的用户来说,Datalog 也不是直观易用的,并且由于复杂的逻辑,在将实际意图转换为 Datalog 时,可能会导致一些误解。
提议的变更¶
Congress 通过定义违规状态和违规行为使整个云环境符合规范。
Congress 中的策略可以用 BNF 表示如下:
Congress Policy ::= violation condition, "do" action for violation
因此,策略抽象化是为了抽象违规状态和相应的操作,使策略更直观、更易于使用。
通过分析典型场景,违规主要可以分为两部分。一部分是对象属性的约束,另一部分是多个对象属性之间的关系的约束。所有对象和约束不仅仅是简单的数据源表集合,而是可以根据其功能和关系划分为一些类别。因此,用户只需要选择他们关心的对象,而无需担心它们位于哪个表中。
违规条件可以用 BNF 表示如下:
violation condition ::=object attribute constraint (value | object attribute)
object attribute::=object "." attribute
对于任何违规状态,Congress 将采取一些行动,例如监控、主动和被动。虽然 Congress 已经实现了违规监控,但改变云状态以使云环境符合规范也是 Congress 的一个重要功能。因此,策略抽象将为不同的对象提供一些可选的被动操作来解决违规行为。
违规状态的动作可以用 BNF 表示如下:
action ::= ("monitor"| "proactive"| "reactive") data
因此,Congress 中的策略可以抽象为“名称”、“对象”、“违规条件”、“操作”和“数据”。
其中,“名称”元素定义了策略的标记,用于作为策略的唯一标识。
“对象”元素定义了此策略关注的所有对象。它们不仅仅是数据源表的简单显示,而是一个组织好的集合,包含不同对象之间的关系,例如,“服务器”、“网络”、“主机”、“子网”等。例如,“统计”表不会作为对象出现,而是会成为其他对象的属性,例如,“服务器”、“网络”。另一个例子是用户可以选择“服务器”和“网络”,而无需关心将它们连接在一起的内容(实际上是“端口”)。
“违规条件”元素定义了对象属性的状态,这些状态可能产生违规,并且约束将包括比较、算术运算和一些预定义的关联/函数,例如,“same_group”。
“操作”元素定义了需要为该策略采取的行动,并且操作将包括“主动”、“监控”和一些特定的操作,例如,“删除”、“移除”。所有这些操作都取决于底层组件的能力。
“数据”元素定义了执行操作时获取或需要的信息,例如,当监控服务器违规时,用户可以将“数据”定义为服务器名称作为返回参数。
也就是说,Congress UI 将提供许多策略元素作为下拉列表,这些元素的组合将形成各种策略。所有这些元素都来自典型场景的总结和底层组件的能力。用户需要选择哪些元素可以满足他们的需求。然后 UI 将将 UI 中的信息转换为 Datalog。
备选方案¶
N/A
策略¶
这里有一个例子,以抽象形式在 Horizon 中表达典型的策略。
示例:连接到 VM 的每个网络必须是公共网络,或者由与 VM 位于同一组中的某人拥有。
对于这个例子,用户关心“服务器”和“网络”,因此用户将从下拉列表中选择这两个对象。在用户确定对象后,将确定相应的可选违规状态,其中包括这两个对象的属性和一些预定义的关联,因此用户可以选择“not same_group”并选择不在同一组中的人。所有这些选择也将显示为下拉列表。并且用户需要选择此违规的动作和数据。例如,用户选择“监控”,服务器和网络的属性将出现在“数据”中。
在这个策略中,用户可以创建如下策略:
name |
对象 |
违规状态 |
操作 |
数据 |
policy_1 |
servers networks |
not equal(networks.share, public) not same_group(servers.tenant, networks.tenant) |
monitoring |
servers.name |
策略操作¶
该操作可以是监控、主动或一些可以使云环境符合规范的执行操作。
数据源¶
N/A
数据模型影响¶
N/A
REST API 影响¶
N/A
安全影响¶
用户输入的所有参数都需要满足预定义的标准,例如,如果“违规条件”中输入的值在合理范围内(例如,CPU 利用率的 0-100%)。
通知影响¶
N/A
其他最终用户影响¶
最终用户能够在 Horizon 中编写策略,并使用一些下拉列表和一些简单的输入来创建策略。然后 Horizon 将将 UI 中的信息转换为 Datalog,Datalog 将在 Congress 中处理。
性能影响¶
N/A
其他部署者影响¶
N/A
开发者影响¶
N/A
实现¶
负责人¶
- 主要负责人
张亚丽
- 其他贡献者
徐 Jim; 夏引本
工作项¶
以抽象形式编写策略规则和操作。
建立抽象形式与 Datalog 之间的映射关系,以便用户可以在 UI 中而不是 Datalog 中编写策略。
将信息从 Horizon 传递到 Congress 以完成策略创建。
依赖项¶
N/A
测试¶
需要用各种场景进行测试。
文档影响¶
在 UI 中添加策略抽象说明。
参考资料¶
N/A