security-policies/bundle/compliance/cis_gcp/rules/cis_2_1/rule.rego (28 lines of code) (raw):
package compliance.cis_gcp.rules.cis_2_1
import data.compliance.lib.common
import data.compliance.policy.gcp.data_adapter
import future.keywords.if
import future.keywords.in
finding := result if {
data_adapter.is_policies_resource
result := common.generate_result_without_expected(
common.calculate_result(cloud_logging_is_configured),
input.resource,
)
}
cloud_logging_is_configured if {
policy := input.resource[_].iam_policy
has_read_write_logs(policy)
not has_exempted_members(policy)
} else := false
has_read_write_logs(policy) if {
log_types := {t | t = policy.audit_configs[i].audit_log_configs[j].log_type}
1 in log_types # "ADMIN_READ"
2 in log_types # "DATA_WRITE"
3 in log_types # "DATA_READ"
policy.audit_configs[_].service == "allServices"
} else := false
has_exempted_members(policy) if {
configs := policy.audit_configs[_].audit_log_configs[_]
count(configs.exempted_members) > 0
} else := false