资源策略评估库

rpe-lib的Python项目详细描述


资源策略评估库

资源策略评估库(rpe lib)评估给定资源是否遵循定义的策略。它还试图纠正任何违反政策的行为。

Build StatusPyPI version


资源

这个库在resources上工作,并且期望一个相当简单的接口来访问您希望评估策略的任何资源。它需要定义了以下函数的对象:

class MyResource:

    # Returns the body of a given resource as a dictionary
    def get(self):
        pass

    # Takes a remediation spec and attempts to remediate a resource
    def remediate(self, remediation):
        pass

    # Returns the resource type as a string
    #  Note: This should be a dotted-string that the engines will use to determine what policies are relevant
    type(self):
        pass

有些资源是随rpe lib提供的,希望它会继续增长,但不需要使用提供的资源类。

发动机

策略评估/执行由策略引擎处理

开放策略代理引擎

opa引擎使用Open Policy Agent服务器根据资源评估策略。策略需要有适当的名称空间,以便opa引擎找到它们,并正确评估策略。注意:这在策略执行比对资源主体的小修改更复杂的情况下不起作用。所有修正都用opa的策略语言Rego实现。

策略的名称空间应为<resource.type()>.policy.<policy_name>。例如,micromanager.resources.gcp.GcpSqlInstance资源的类型为gcp.sqladmin.instances,因此要求启用备份的策略可能是命名空间的gcp.sqladmin.instances.policy.backups。政策应执行以下规则:

  • valid:<;布尔型>;。如果提供的资源符合策略,则返回true
  • remediate:<;对象>;。返回更改为遵守策略的input资源

对于每个resource.type(),还需要定义一个policies规则和一个violations规则。这允许opa引擎在单个api调用中查询给定资源类型的所有冲突。除了包名之外,这些可能不需要更改,如下所示(同样使用micromanager.resources.gcp.GcpSqlInstance示例):

package gcp.sqladmin.instances

policies [policy_name] {
    policy := data.gcp.sqladmin.instances.policy[policy_name]
}

violations [policy_name] {
    policy := data.gcp.sqladmin.instances.policy[policy_name]
    policy.valid != true
}

示例

使用OPA发动机

这假设路径中有opa二进制文件

# First, start opa with our policies
opa run --server ./policy/

现在我们需要创建一个rpe实例,其中opa引擎配置为使用本地opa服务器:

from rpe import RPE

config = {
    'policy_engines': [
        {
            'type': 'opa',
            'url': 'http://localhost:8181/v1/data'
        }
    ]
}

# Create a resource object with details about the resource we want to evaluate
res = Resource.factory(
  'gcp',
  {
    'resource_name':'my-sql-instance-name',
    'project_id':'my-gcp-project',
    'resource_type':'sqladmin.instances'
  },
  credentials=<gcp-credentials>
)

rpe = RPE(config)
violations = rpe.violations(res)

for (engine, violation) in violations:
    print(engine, violation)
    engine.remediate(res, violation)

使用

  • Forseti Real-time Enforcer-forseti实时执行器使用rpe库来评估和执行google云资源的策略。它使用stackdriver日志导出到pub/sub主题来触发强制。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java我初始化“temps”的方式有什么问题?   junit有没有办法测试Java方法不会引发特定类型的异常?   java如何覆盖WebSphereCommunityEdition(WCE)2.1的默认持久性提供程序OpenJPA   Java Swing如何使JButton的边界不可见?   java如何在Eclipse中恢复已删除的文件?   java我正在努力争取到第二天某个小时的剩余时间   java将类放入哈希表   语法Java:system。出来println连接字符串中的内容(非常简单的问题)   针对多个单词的java查询文档   Java:循环泛型类型关系不允许从超类型强制转换(javac错误)   swing为第一轮Java切换生成If语句   java使用bufferedReader读取文本文件时添加了一个空格,即安卓   从html文件获取文本字段字符串输入,以便在java类中处理/使用   java如何根据条件进行正则表达式匹配?   在Java中查找字符串中最小的单词   私有void formKeyPressed(java.awt.event.KeyEvent evt)   servlet中文本文件的java读写