reports/sample/data.rego (122 lines of code) (raw):
package reports.data
import data.validator.gcp.lib as lib
import data.assets as assets
keys_report[{
"project_id": project_id ,
"location": location,
"key_ring": key_ring,
"key": key,
"primary_version_create_time": primary_version_create_time,
"next_rotation_time": next_rotation_time
}] {
k := assets[_]
count({k.asset_type} & {"cloudkms.googleapis.com/CryptoKey","google.cloud.kms.CryptoKey"}) == 1
name_parts := split(k.resource.data.name,"/")
project_id := name_parts[1]
location := name_parts[3]
key_ring := name_parts[5]
key := name_parts[7]
primary_version_create_time := k.resource.data.primary.createTime
next_rotation_time := lib.get_default(k.resource.data, "nextRotationTime", "")
}
keys_project_level_iam_report[{
"project_id": project_id,
"key": key ,
"iam_role": role,
"iam_member": member
}] {
k := assets[_]
count({k.asset_type} & {"cloudkms.googleapis.com/CryptoKey","google.cloud.kms.CryptoKey"}) == 1
key := k.resource.data.name
name_parts := split(k.resource.data.name,"/")
project_id := name_parts[1]
p := assets[_]
count({p.asset_type} & {"compute.googleapis.com/Project","google.compute.Project"}) == 1
p.resource.data.name == project_id
i := assets[_]
i.name == p.resource.parent
b := i.iam_policy.bindings[_]
role := b.role
member := b.members[_]
str_array := split(member, ":")
member_type := str_array[0]
re_match("(roles/owner|roles/editor|^roles/cloudkms)", role)
}
bucket_default_acl_report[{
"name": b.name,
"default_object_acl": default_object_acl_str,
"bucket_policy_enabled": bucket_policy_enabled_str
}] {
b := assets[_]
count({b.asset_type} & {"storage.googleapis.com/Bucket","google.cloud.storage.Bucket"}) == 1
default_object_acl_str := lib.is_null_str(b.resource.data.defaultObjectAcl)
iam_configuration := lib.get_default(b, "iamConfiguration", {})
bucket_policy_only := lib.get_default(iam_configuration, "bucketPolicyOnly", {})
bucket_policy_enabled := lib.get_default(bucket_policy_only, "enabled", false)
bucket_policy_enabled_str := lib.bool_to_str(bucket_policy_enabled)
}
bucket_object_lifecycle_report[{
"name": b.name,
"lifecycle_rule": lifecycle_rule_str
}] {
b := assets[_]
count({b.asset_type} & {"storage.googleapis.com/Bucket","google.cloud.storage.Bucket"}) == 1
lifecycle_rule := lib.get_default(b.resource.data.lifecycle, "rule", [])
lifecycle_rule_str := lib.is_null_str(lifecycle_rule)
}
bucket_location_report[{
"name": b.name,
"location": location
}] {
b := assets[_]
count({b.asset_type} & {"storage.googleapis.com/Bucket","google.cloud.storage.Bucket"}) == 1
location := b.resource.data.location
}
dataset_no_iam_report[{
"name": ds.name
}] {
ds := assets[_]
count({ds.asset_type} & {"bigquery.googleapis.com/Dataset","google.cloud.bigquery.Dataset"}) == 1
ds_iam := assets[_]
count({ds_iam.asset_type} & {"bigquery.googleapis.com/Dataset","google.cloud.bigquery.Dataset"}) == 1
ds_iam.iam_policy != null
count({ds.name} & cast_set(ds_iam[_].name)) == 0
}
dataset_project_level_iam_report[{
"name": ds.name,
"project": p.resource.data.name,
"iam_role": role,
"iam_member": member
}] {
ds := assets[_]
count({ds.asset_type} & {"bigquery.googleapis.com/Dataset","google.cloud.bigquery.Dataset"}) == 1
p := assets[_]
count({p.asset_type} & {"compute.googleapis.com/Project","google.compute.Project"}) == 1
p.resource.parent == ds.resource.parent
i := assets[_]
i.name == p.resource.parent
b := i.iam_policy.bindings[_]
role := b.role
member := b.members[_]
str_array := split(member, ":")
member_type := str_array[0]
re_match("(roles/owner|roles/editor|^roles/bigquery)", role)
}
cloud_sql_public_authorized_networks_report[{
"name": name
}] {
a := assets[_]
count({a.asset_type} & {"sqladmin.googleapis.com/Instance","google.cloud.sql.Instance"}) == 1
name := a.name
authorized_networks := a.resource.data.settings.ipConfiguration.authorizedNetworks[_].value
authorized_networks = "0.0.0.0/0"
}
cloud_sql_gen_report[{
"name": name,
"backend_type": backend_type
}] {
a := assets[_]
count({a.asset_type} & {"sqladmin.googleapis.com/Instance","google.cloud.sql.Instance"}) == 1
name = a.name
backend_type = a.resource.data.backendType
}