Skip to content

Commit 57a4705

Browse files
authored
[portefaix-cel] P0001 Policy to validate registries (#925)
* feat(portefaix-cel): update for new policies Signed-off-by: Nicolas Lamirault <nicolas.lamirault@gmail.com>
1 parent 80dc72c commit 57a4705

14 files changed

+179
-15
lines changed

charts/portefaix-cel/Chart.yaml

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,21 +22,32 @@ home: https://charts.portefaix.xyz
2222
icon: https://raw.githubusercontent.com/kubernetes/kubernetes/master/logo/logo.svg
2323
sources:
2424
- https://github.com/nlamirault/portefaix-hub/tree/master/charts/portefaix-cel
25-
# kubeVersion: ">=1.30.0-0"
2625
type: application
2726
keywords:
27+
- vap
2828
- cel
2929
- policies
3030
- portefaix
31-
version: 2.0.0
31+
version: 2.1.0
3232
appVersion: v1.30.0
3333

34+
dependencies:
35+
- name: crds
36+
version: "0.0.0"
37+
3438
maintainers:
3539
- name: nlamirault
3640
email: nicolas.lamirault@gmail.com
3741

3842
# https://artifacthub.io/docs/topics/repositories/
3943
annotations:
44+
artifacthub.io/category: security
45+
artifacthub.io/crds: |
46+
- kind: RegistryConfiguration
47+
version: v1
48+
name: registryconfiguration.policy.portefaix.xyz
49+
displayName: RegistryConfiguration
50+
description: Resource for authorized registries
4051
artifacthub.io/license: Apache-2.0
4152
artifacthub.io/links: |
4253
- name: Portefaix
@@ -48,5 +59,5 @@ annotations:
4859
fingerprint: C39918B3EBDE35C23B8D0B8E5F99269A6FCA437C
4960
url: https://keybase.io/nlamirault/pgp_keys.asc
5061
artifacthub.io/changes: |
51-
- kind: changed
52-
description: use v1 for ValidatingAdmissionPolicy and ValidatingAdmissionPolicyBinding
62+
- kind: added
63+
description: new P0001 policy to validate registry
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
apiVersion: v2
3+
name: crds
4+
version: 0.0.0
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
---
2+
apiVersion: apiextensions.k8s.io/v1
3+
kind: CustomResourceDefinition
4+
metadata:
5+
annotations:
6+
admission.kubernetes.io/is-policy-configuration-definition: "true"
7+
{{- with .Values.annotations }}
8+
{{- toYaml . | nindent 4 }}
9+
{{- end }}
10+
name: registryconfiguration.policy.portefaix.xyz
11+
spec:
12+
group: policy.portefaix.xyz
13+
names:
14+
kind: RegistryConfiguration
15+
plural: registryconfigurations
16+
singular: registryconfiguration
17+
versions:
18+
- name: v1
19+
schema:
20+
openAPIV3Schema:
21+
description: |-
22+
RegistryConfiguration configures the Portefaix policy concerning public registries and untrusted registries
23+
type: object
24+
properties:
25+
spec:
26+
description: |-
27+
RegistryConfigurationSpec is a specification of the desired behavior of the
28+
Registry Configuration configuration.
29+
type: object
30+
properties:
31+
publicRegistries:
32+
description: |-
33+
List of authorized public registries
34+
items:
35+
type: string
36+
type: array
37+
untrustedRegistries:
38+
description: |-
39+
List of untrusted registries
40+
items:
41+
type: string
42+
type: array
43+
served: true
44+
storage: true
45+
scope: Cluster

charts/portefaix-cel/templates/_helpers.tpl

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@ helm.sh/chart: {{ include "portefaix-cel.chart" . }}
4949
{{- if .Chart.AppVersion }}
5050
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
5151
{{- end }}
52-
app.kubernetes.io/component: policy-controller
5352
app.kubernetes.io/part-of: {{ include "portefaix-cel.name" . }}
5453
app.kubernetes.io/managed-by: {{ .Release.Service }}
5554
{{- if .Values.additionalLabels }}
@@ -66,4 +65,4 @@ Allow the release namespace to be overridden
6665
{{- else -}}
6766
{{- .Release.Namespace -}}
6867
{{- end -}}
69-
{{- end -}}
68+
{{- end -}}

charts/portefaix-cel/templates/policy-C0001.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ kind: ValidatingAdmissionPolicy
2121
metadata:
2222
labels:
2323
{{- include "portefaix-cel.labels" . | nindent 4 }}
24+
app.kubernetes.io/component: policy
2425
name: c0001.container.portefaix.xyz
2526
spec:
2627
matchConstraints:
@@ -51,9 +52,10 @@ kind: ValidatingAdmissionPolicyBinding
5152
metadata:
5253
labels:
5354
{{- include "portefaix-cel.labels" . | nindent 4 }}
55+
app.kubernetes.io/component: policy
5456
name: c0001.container.portefaix.xyz
5557
spec:
5658
policyName: c0001.container.portefaix.xyz
5759
validationActions:
5860
{{- toYaml .Values.policies.c0001.validationActions | nindent 2 }}
59-
{{- end }}
61+
{{- end }}

charts/portefaix-cel/templates/policy-C0002.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ kind: ValidatingAdmissionPolicy
2121
metadata:
2222
labels:
2323
{{- include "portefaix-cel.labels" . | nindent 4 }}
24+
app.kubernetes.io/component: policy
2425
name: c0002.container.portefaix.xyz
2526
spec:
2627
failurePolicy: Fail
@@ -54,9 +55,10 @@ kind: ValidatingAdmissionPolicyBinding
5455
metadata:
5556
labels:
5657
{{- include "portefaix-cel.labels" . | nindent 4 }}
58+
app.kubernetes.io/component: policy
5759
name: c0002.container.portefaix.xyz
5860
spec:
5961
policyName: c0002.container.portefaix.xyz
6062
validationActions:
6163
{{- toYaml .Values.policies.c0002.validationActions | nindent 2 }}
62-
{{- end }}
64+
{{- end }}

charts/portefaix-cel/templates/policy-C0003.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ kind: ValidatingAdmissionPolicy
2121
metadata:
2222
labels:
2323
{{- include "portefaix-cel.labels" . | nindent 4 }}
24+
app.kubernetes.io/component: policy
2425
name: c0003.container.portefaix.xyz
2526
spec:
2627
failurePolicy: Fail
@@ -54,9 +55,10 @@ kind: ValidatingAdmissionPolicyBinding
5455
metadata:
5556
labels:
5657
{{- include "portefaix-cel.labels" . | nindent 4 }}
58+
app.kubernetes.io/component: policy
5759
name: c0003.container.portefaix.xyz
5860
spec:
5961
policyName: c0003.container.portefaix.xyz
6062
validationActions:
6163
{{- toYaml .Values.policies.c0003.validationActions | nindent 2 }}
62-
{{- end }}
64+
{{- end }}

charts/portefaix-cel/templates/policy-C0008.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ kind: ValidatingAdmissionPolicy
2121
metadata:
2222
labels:
2323
{{- include "portefaix-cel.labels" . | nindent 4 }}
24+
app.kubernetes.io/component: policy
2425
name: c0008.container.portefaix.xyz
2526
spec:
2627
failurePolicy: Fail
@@ -77,9 +78,10 @@ kind: ValidatingAdmissionPolicyBinding
7778
metadata:
7879
labels:
7980
{{- include "portefaix-cel.labels" . | nindent 4 }}
81+
app.kubernetes.io/component: policy
8082
name: c0008.container.portefaix.xyz
8183
spec:
8284
policyName: c0008.container.portefaix.xyz
8385
validationActions:
8486
{{- toYaml .Values.policies.c0008.validationActions | nindent 2 }}
85-
{{- end }}
87+
{{- end }}

charts/portefaix-cel/templates/policy-M0001.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ kind: ValidatingAdmissionPolicy
2121
metadata:
2222
labels:
2323
{{- include "portefaix-cel.labels" . | nindent 4 }}
24+
app.kubernetes.io/component: policy
2425
name: m0001.metadata.portefaix.xyz
2526
spec:
2627
failurePolicy: Fail
@@ -61,9 +62,10 @@ kind: ValidatingAdmissionPolicyBinding
6162
metadata:
6263
labels:
6364
{{- include "portefaix-cel.labels" . | nindent 4 }}
65+
app.kubernetes.io/component: policy
6466
name: m0001.container.portefaix.xyz
6567
spec:
6668
policyName: m0001.container.portefaix.xyz
6769
validationActions:
6870
{{- toYaml .Values.policies.m0001.validationActions | nindent 2 }}
69-
{{- end }}
71+
{{- end }}

charts/portefaix-cel/templates/policy-M0002.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ kind: ValidatingAdmissionPolicy
2121
metadata:
2222
labels:
2323
{{- include "portefaix-cel.labels" . | nindent 4 }}
24+
app.kubernetes.io/component: policy
2425
name: m0002.metadata.portefaix.xyz
2526
spec:
2627
failurePolicy: Fail
@@ -60,9 +61,10 @@ kind: ValidatingAdmissionPolicyBinding
6061
metadata:
6162
labels:
6263
{{- include "portefaix-cel.labels" . | nindent 4 }}
64+
app.kubernetes.io/component: policy
6365
name: m0002.container.portefaix.xyz
6466
spec:
6567
policyName: m0002.container.portefaix.xyz
6668
validationActions:
6769
{{- toYaml .Values.policies.m0002.validationActions | nindent 2 }}
68-
{{- end }}
70+
{{- end }}

charts/portefaix-cel/templates/policy-M0003.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ kind: ValidatingAdmissionPolicy
2121
metadata:
2222
labels:
2323
{{- include "portefaix-cel.labels" . | nindent 4 }}
24+
app.kubernetes.io/component: policy
2425
name: m0003.metadata.portefaix.xyz
2526
spec:
2627
failurePolicy: Fail
@@ -55,9 +56,10 @@ kind: ValidatingAdmissionPolicyBinding
5556
metadata:
5657
labels:
5758
{{- include "portefaix-cel.labels" . | nindent 4 }}
59+
app.kubernetes.io/component: policy
5860
name: m0003.container.portefaix.xyz
5961
spec:
6062
policyName: m0003.container.portefaix.xyz
6163
validationActions:
6264
{{- toYaml .Values.policies.m0003.validationActions | nindent 2 }}
63-
{{- end }}
65+
{{- end }}

charts/portefaix-cel/templates/policy-N0001.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ kind: ValidatingAdmissionPolicy
2121
metadata:
2222
labels:
2323
{{- include "portefaix-cel.labels" . | nindent 4 }}
24+
app.kubernetes.io/component: policy
2425
name: n0001.namespace.portefaix.xyz
2526
spec:
2627
failurePolicy: Fail
@@ -50,9 +51,10 @@ kind: ValidatingAdmissionPolicyBinding
5051
metadata:
5152
labels:
5253
{{- include "portefaix-cel.labels" . | nindent 4 }}
54+
app.kubernetes.io/component: policy
5355
name: n0001.container.portefaix.xyz
5456
spec:
5557
policyName: n0001.container.portefaix.xyz
5658
validationActions:
5759
{{- toYaml .Values.policies.n0001.validationActions | nindent 2 }}
58-
{{- end }}
60+
{{- end }}
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
# Copyright (C) Nicolas Lamirault <nicolas.lamirault@gmail.com>
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
#
15+
# SPDX-License-Identifier: Apache-2.0
16+
17+
{{- if .Values.policies.p0001.enabled }}
18+
---
19+
apiVersion: admissionregistration.k8s.io/v1
20+
kind: ValidatingAdmissionPolicy
21+
metadata:
22+
labels:
23+
{{- include "portefaix-cel.labels" . | nindent 4 }}
24+
app.kubernetes.io/component: policy
25+
name: p0001.pod.portefaix.xyz
26+
spec:
27+
failurePolicy: Fail
28+
paramKind:
29+
apiVersion: kubescape.io/v1
30+
kind: ControlConfiguration
31+
matchConstraints:
32+
resourceRules:
33+
- apiGroups: [""]
34+
apiVersions: ["v1"]
35+
operations: ["CREATE", "UPDATE"]
36+
resources: ["pods"]
37+
- apiGroups: ["apps"]
38+
apiVersions: ["v1"]
39+
operations: ["CREATE", "UPDATE"]
40+
resources: ["deployments","replicasets","daemonsets","statefulsets"]
41+
- apiGroups: ["batch"]
42+
apiVersions: ["v1"]
43+
operations: ["CREATE", "UPDATE"]
44+
resources: ["jobs","cronjobs"]
45+
validations:
46+
- expression: "object.kind != 'Pod' || object.spec.containers.all(container, params.settings.untrustedRegistries.all(registry,!container.image.startsWith(registry)))"
47+
message: "Pods uses an image from a forbidden registry"
48+
- expression: "['Deployment','ReplicaSet','DaemonSet','StatefulSet','Job'].all(kind, object.kind != kind) || object.spec.template.spec.containers.all(container, params.settings.untrustedRegistries.all(registry,!container.image.startsWith(registry)))"
49+
message: "Workloads uses an image from a forbidden registry"
50+
- expression: "object.kind != 'CronJob' || object.spec.jobTemplate.spec.containers.all(container, params.settings.untrustedRegistries.all(registry,!container.image.startsWith(registry)))"
51+
message: "CronJob uses an image from a forbidden registry"
52+
auditAnnotations:
53+
- key: "container-forbidden-registry"
54+
valueExpression: "Trust registry is required"
55+
---
56+
apiVersion: admissionregistration.k8s.io/v1
57+
kind: ValidatingAdmissionPolicyBinding
58+
metadata:
59+
labels:
60+
{{- include "portefaix-cel.labels" . | nindent 4 }}
61+
app.kubernetes.io/component: policy
62+
name: p0001.pod.portefaix.xyz
63+
spec:
64+
policyName: p0001.container.portefaix.xyz
65+
validationActions:
66+
{{- toYaml .Values.policies.p0001.validationActions | nindent 2 }}
67+
{{- end }}
68+
---
69+
apiVersion: policy.portefaix.xyz/v1
70+
kind: RegistryConfiguration
71+
metadata:
72+
labels:
73+
{{- include "portefaix-cel.labels" . | nindent 4 }}
74+
app.kubernetes.io/component: policy
75+
name: parameters-p0001
76+
spec:
77+
{{- toYaml .Values.policies.p0001.params | nindent 2 }}

charts/portefaix-cel/values.yaml

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,4 +75,16 @@ policies:
7575
validationActions:
7676
- Warn
7777
- Audit
78-
78+
# -- Authorized registry
79+
p0001:
80+
enabled: true
81+
validationActions:
82+
- Warn
83+
- Audit
84+
params:
85+
publicRegistries:
86+
- ghcr.io
87+
- public.ecr.aws
88+
- docker.io
89+
untrustedRegistries:
90+
- quay.io

0 commit comments

Comments
 (0)