资源策略评估库
rpe-lib的Python项目详细描述
资源策略评估库
资源策略评估库(rpe lib)评估给定资源是否遵循定义的策略。它还试图纠正任何违反政策的行为。
资源
这个库在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的策略语言 策略的名称空间应为 对于每个resource.type(),还需要定义一个 这假设路径中有 现在我们需要创建一个rpe实例,其中opa引擎配置为使用本地opa服务器:开放策略代理引擎
Rego
实现。<resource.type()>.policy.<policy_name>
。例如,micromanager.resources.gcp.GcpSqlInstance
资源的类型为gcp.sqladmin.instances
,因此要求启用备份的策略可能是命名空间的gcp.sqladmin.instances.policy.backups
。政策应执行以下规则:valid
:<;布尔型>;。如果提供的资源符合策略,则返回true
remediate
:<;对象>;。返回更改为遵守策略的input
资源
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/
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)
使用
推荐PyPI第三方库