我们正在使用conftest来验证我们的 terraform 变更集是否适用于某些规则和合规性。我们要验证的一件事是我们的 AWS 资源是否根据 AWS 标记约定进行标记,该约定指定要使用的某些标签(例如 Owner、ApplicationRole、Project)并指定所有标签和值都在 CamelCase 中。
在 terraform 中,变更集在以下(简化的)json 输出中描述:
{
"resource_changes":{
"provider_name":"aws",
"change":{
"before":{
},
"after":{
"tags":{
"ApplicationRole":"SomeValue",
"Owner":"SomeValue",
"Project":"SomeValue"
}
}
}
}
}
我现在要做的是验证以下内容:
- 检查是否设置了标签。
- 验证键和值是否都是驼峰式。
- 检查密钥是否至少包含集合(ApplicationRole、Owner、Project)。
但是,我无法在 Rego 中定义它(我对 OPA 很陌生)。
有没有办法“循环”对象的键和值,并验证它们的格式是否正确?
在伪代码中:
for key, value in tags {
re_match(`([A-Z][a-z0-9]+)+`, key)
re_match(`([A-Z][a-z0-9]+)+`, value)
}
我尝试了以下方法:
tags_camel_case(tags) {
some key
val := tags[key]
re_match(`^([A-Z][a-z0-9]+)+`, key) # why is key not evaluated?
re_match(`^([A-Z][a-z0-9]+)+`, val)
}
但是,在针对以下测试 json 进行评估时:
{
"AppRole": "SomeValue",
"appRole": "SomeValue"
}
规则返回 true,即使我同时检查键和值与正则表达式