1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
# diagnose.rego — Diagnostic reporting entrypoint ==============================
#
# Classifies active policies (data.policies) as compliant or non-compliant
# using evaluate's deny/warn output. If a policy has both, deny wins.
# Compliant includes not-applicable policies as well as genuine passes.
# Query (structured): data.diagnose.results
# Query (console) : data.diagnose.summary
package diagnose
import data.common.policydoc as policydoc
# Policy Counter Helpers -------------------------------------------------------
policy_ids_total := {id | some id, p in data.policies; p.status == "active"}
policy_ids_non_compliant_deny := {id |
some msg in data.evaluate.deny
id := split(msg.rule_id, " ")[0]
}
policy_ids_non_compliant_warn := {id |
some msg in data.evaluate.warn
id := split(msg.rule_id, " ")[0]
} - policy_ids_non_compliant_deny
policy_ids_compliant := policy_ids_total - policy_ids_non_compliant_deny - policy_ids_non_compliant_warn
# Outputs (structured & console formatted) -------------------------------------
results := {
"policies_in_catalog": count(policy_ids_total),
"compliant": count(policy_ids_compliant),
"non_compliant_deny": count(policy_ids_non_compliant_deny),
"non_compliant_warn": count(policy_ids_non_compliant_warn),
"compliant_ids": policy_ids_compliant,
"non_compliant_deny_ids": policy_ids_non_compliant_deny,
"non_compliant_warn_ids": policy_ids_non_compliant_warn,
}
summary_message := `Catalog contains %d active policies
Found %d compliant policies: %s
Found %d non-compliant policies (deny level): %s
Found %d non-compliant policies (warn level): %s
`
summary := sprintf(summary_message, [
count(policy_ids_total),
count(policy_ids_compliant), policydoc.concat_array(sort(policy_ids_compliant), "NA"),
count(policy_ids_non_compliant_deny), policydoc.concat_array(sort(policy_ids_non_compliant_deny), "NA"),
count(policy_ids_non_compliant_warn), policydoc.concat_array(sort(policy_ids_non_compliant_warn), "NA"),
])
|