security-policies/bundle/compliance/cis_gcp/rules/cis_1_8/rule.rego (26 lines of code) (raw):

package compliance.cis_gcp.rules.cis_1_8 import data.compliance.lib.common import data.compliance.policy.gcp.data_adapter import rego.v1 # a user should not have both admin and user role # this creates a set of such members, and # if the set is empty, the policy is valid members_with_both_roles contains m if { # get all members with admin role some admin in data_adapter.iam_policy.bindings admin.role == "roles/iam.serviceAccountAdmin" some m in admin.members # get all members with user role some user in data_adapter.iam_policy.bindings user.role == "roles/iam.serviceAccountUser" m in user.members } finding := result if { data_adapter.is_cloud_resource_manager_project data_adapter.has_policy no_admin_with_user_role := count(members_with_both_roles) == 0 result := common.generate_result_without_expected( common.calculate_result(no_admin_with_user_role), data_adapter.iam_policy, ) }