Skip to content

Commit

Permalink
Merge pull request #41 from kcl-lang/psp-fsgroup
Browse files Browse the repository at this point in the history
feat: add psp fsgroup module
  • Loading branch information
Peefy authored Oct 31, 2023
2 parents 81369c7 + 7d59fcb commit 676f584
Show file tree
Hide file tree
Showing 4 changed files with 55 additions and 0 deletions.
7 changes: 7 additions & 0 deletions psp-fsgroup/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
## Introduction

`psp-fsgroup` is a kcl PSP validation package.

## Resource

Code source and document is [here](https://github.com/kcl-lang/artifacthub/tree/main/psp-fsgroup)
5 changes: 5 additions & 0 deletions psp-fsgroup/kcl.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
[package]
name = "psp-fsgroup"
version = "0.1.0"
description = "`psp-fsgroup` is a kcl validation package"

Empty file added psp-fsgroup/kcl.mod.lock
Empty file.
43 changes: 43 additions & 0 deletions psp-fsgroup/main.k
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
"""Controls the user and group IDs of the container and some volumes.
Corresponds to the `runAsUser`, `runAsGroup`, `supplementalGroups`, and
`fsGroup` fields in a PodSecurityPolicy. For more information, see
https://kubernetes.io/docs/concepts/policy/pod-security-policy/#users-and-groups
"""

type Rule = "MustRunAs" | "MustRunAsNonRoot" | "RunAsAny"
FIELDS = ["runAsUser", "runAsGroup", "supplementalGroups", "fsGroup"]

schema Params:
rule: Rule
ranges: [Range]

schema Range:
min: int
max: int

check:
min <= max

params: Params = option("params")

# Define the validation function
validate = lambda item: {str:} {
if item.kind == "Pod":
fg = item?.spec?.securityContext?.fsGroup
if params.rule == "RunAsAny":
assert True
# MustRunAs - Validates pod spec fsgroup against all ranges
elif params.rule == "MustRunAs":
assert fg and all range in params.ranges {
range.min <= fg <= range.max
}
# Validates pod spec fsgroup against all ranges or allow pod spec fsgroup to be left unset
elif params.rule == "MayRunAs" and fg:
assert all range in params.ranges {
range.min <= fg <= range.max
}
# Return the resource
item
}
# Validate All resource
items = [validate(i) for i in option("items")]

0 comments on commit 676f584

Please sign in to comment.