diff --git a/src/tools/genpolicy/rules.rego b/src/tools/genpolicy/rules.rego index f81f74c262..76d734e0bb 100644 --- a/src/tools/genpolicy/rules.rego +++ b/src/tools/genpolicy/rules.rego @@ -52,10 +52,15 @@ default WriteStreamRequest := false default AllowRequestsFailingPolicy := false CreateContainerRequest { + # Check if the input request should be rejected even before checking the + # policy_data.containers information. + allow_create_container_input + i_oci := input.OCI i_storages := input.storages i_devices := input.devices + # Check if any element from the policy_data.containers array allows the input request. some p_container in policy_data.containers print("======== CreateContainerRequest: trying next policy container") @@ -85,6 +90,37 @@ CreateContainerRequest { print("CreateContainerRequest: true") } +allow_create_container_input { + print("allow_create_container_input: input =", input) + + count(input.shared_mounts) == 0 + is_null(input.string_user) + + i_oci := input.OCI + is_null(i_oci.Hooks) + is_null(i_oci.Solaris) + is_null(i_oci.Windows) + + i_linux := i_oci.Linux + count(i_linux.GIDMappings) == 0 + count(i_linux.MountLabel) == 0 + count(i_linux.Resources.Devices) == 0 + count(i_linux.RootfsPropagation) == 0 + count(i_linux.UIDMappings) == 0 + is_null(i_linux.IntelRdt) + is_null(i_linux.Resources.BlockIO) + is_null(i_linux.Resources.Network) + is_null(i_linux.Resources.Pids) + is_null(i_linux.Seccomp) + i_linux.Sysctl == {} + + i_process := i_oci.Process + count(i_process.SelinuxLabel) == 0 + count(i_process.User.Username) == 0 + + print("allow_create_container_input: true") +} + # Reject unexpected annotations. allow_anno(p_oci, i_oci) { print("allow_anno 1: start")