Enable pod security policies
[icn.git] / deploy / clusters / templates / podsecurity-addon.yaml
1 {{- range $clusterName, $cluster := .Values.clusters }}
2 ---
3 apiVersion: v1
4 data:
5   podsecurity.yaml: |
6     ---
7     apiVersion: policy/v1beta1
8     kind: PodSecurityPolicy
9     metadata:
10       name: privileged
11       annotations:
12         seccomp.security.alpha.kubernetes.io/allowedProfileNames: '*'
13     spec:
14       privileged: true
15       allowPrivilegeEscalation: true
16       allowedCapabilities:
17       - '*'
18       volumes:
19       - '*'
20       hostNetwork: true
21       hostPorts:
22       - min: 0
23         max: 65535
24       hostIPC: true
25       hostPID: true
26       runAsUser:
27         rule: 'RunAsAny'
28       seLinux:
29         rule: 'RunAsAny'
30       supplementalGroups:
31         rule: 'RunAsAny'
32       fsGroup:
33         rule: 'RunAsAny'
34     ---
35     apiVersion: policy/v1beta1
36     kind: PodSecurityPolicy
37     metadata:
38       name: baseline
39       annotations:
40         # Optional: Allow the default AppArmor profile, requires setting the default.
41         apparmor.security.beta.kubernetes.io/allowedProfileNames: 'runtime/default'
42         apparmor.security.beta.kubernetes.io/defaultProfileName:  'runtime/default'
43         seccomp.security.alpha.kubernetes.io/allowedProfileNames: '*'
44     spec:
45       privileged: false
46       # The moby default capability set, minus NET_RAW
47       allowedCapabilities:
48         - 'CHOWN'
49         - 'DAC_OVERRIDE'
50         - 'FSETID'
51         - 'FOWNER'
52         - 'MKNOD'
53         - 'SETGID'
54         - 'SETUID'
55         - 'SETFCAP'
56         - 'SETPCAP'
57         - 'NET_BIND_SERVICE'
58         - 'SYS_CHROOT'
59         - 'KILL'
60         - 'AUDIT_WRITE'
61       # Allow all volume types except hostpath
62       volumes:
63         # 'core' volume types
64         - 'configMap'
65         - 'emptyDir'
66         - 'projected'
67         - 'secret'
68         - 'downwardAPI'
69         # Assume that ephemeral CSI drivers & persistentVolumes set up by the cluster admin are safe to use.
70         - 'csi'
71         - 'persistentVolumeClaim'
72         - 'ephemeral'
73         # Allow all other non-hostpath volume types.
74         - 'awsElasticBlockStore'
75         - 'azureDisk'
76         - 'azureFile'
77         - 'cephFS'
78         - 'cinder'
79         - 'fc'
80         - 'flexVolume'
81         - 'flocker'
82         - 'gcePersistentDisk'
83         - 'gitRepo'
84         - 'glusterfs'
85         - 'iscsi'
86         - 'nfs'
87         - 'photonPersistentDisk'
88         - 'portworxVolume'
89         - 'quobyte'
90         - 'rbd'
91         - 'scaleIO'
92         - 'storageos'
93         - 'vsphereVolume'
94       hostNetwork: false
95       hostIPC: false
96       hostPID: false
97       readOnlyRootFilesystem: false
98       runAsUser:
99         rule: 'RunAsAny'
100       seLinux:
101         # This policy assumes the nodes are using AppArmor rather than SELinux.
102         # The PSP SELinux API cannot express the SELinux Pod Security Standards,
103         # so if using SELinux, you must choose a more restrictive default.
104         rule: 'RunAsAny'
105       supplementalGroups:
106         rule: 'RunAsAny'
107       fsGroup:
108         rule: 'RunAsAny'
109     ---
110     apiVersion: policy/v1beta1
111     kind: PodSecurityPolicy
112     metadata:
113       name: restricted
114       annotations:
115         seccomp.security.alpha.kubernetes.io/allowedProfileNames: 'docker/default,runtime/default'
116         apparmor.security.beta.kubernetes.io/allowedProfileNames: 'runtime/default'
117         apparmor.security.beta.kubernetes.io/defaultProfileName:  'runtime/default'
118     spec:
119       privileged: false
120       # Required to prevent escalations to root.
121       allowPrivilegeEscalation: false
122       requiredDropCapabilities:
123         - ALL
124       # Allow core volume types.
125       volumes:
126         - 'configMap'
127         - 'emptyDir'
128         - 'projected'
129         - 'secret'
130         - 'downwardAPI'
131         # Assume that ephemeral CSI drivers & persistentVolumes set up by the cluster admin are safe to use.
132         - 'csi'
133         - 'persistentVolumeClaim'
134         - 'ephemeral'
135       hostNetwork: false
136       hostIPC: false
137       hostPID: false
138       runAsUser:
139         # Require the container to run without root privileges.
140         rule: 'MustRunAsNonRoot'
141       seLinux:
142         # This policy assumes the nodes are using AppArmor rather than SELinux.
143         rule: 'RunAsAny'
144       supplementalGroups:
145         rule: 'MustRunAs'
146         ranges:
147           # Forbid adding the root group.
148           - min: 1
149             max: 65535
150       fsGroup:
151         rule: 'MustRunAs'
152         ranges:
153           # Forbid adding the root group.
154           - min: 1
155             max: 65535
156       readOnlyRootFilesystem: false
157     ---
158     apiVersion: policy/v1beta1
159     kind: PodSecurityPolicy
160     metadata:
161       name: icn
162       annotations:
163         seccomp.security.alpha.kubernetes.io/allowedProfileNames: '*'
164     spec:
165       privileged: true
166       allowPrivilegeEscalation: true
167       volumes:
168       - '*'
169       hostNetwork: true
170       hostPorts:
171       - min: 0
172         max: 65535
173       hostIPC: true
174       hostPID: true
175       runAsUser:
176         rule: 'RunAsAny'
177       seLinux:
178         rule: 'RunAsAny'
179       supplementalGroups:
180         rule: 'RunAsAny'
181       fsGroup:
182         rule: 'RunAsAny'
183       allowedCapabilities:
184         - 'NET_ADMIN'
185         - 'SYS_ADMIN'
186         - 'SYS_NICE'
187         - 'SYS_PTRACE'
188       requiredDropCapabilities:
189         - 'NET_RAW'
190     ---
191     apiVersion: rbac.authorization.k8s.io/v1
192     kind: ClusterRole
193     metadata:
194       name: psp:privileged
195       labels:
196         addonmanager.kubernetes.io/mode: Reconcile
197     rules:
198     - apiGroups:
199       - policy
200       resourceNames:
201       - privileged
202       resources:
203       - podsecuritypolicies
204       verbs:
205       - use
206     ---
207     apiVersion: rbac.authorization.k8s.io/v1
208     kind: ClusterRole
209     metadata:
210       name: psp:baseline
211       labels:
212         addonmanager.kubernetes.io/mode: Reconcile
213     rules:
214     - apiGroups:
215       - policy
216       resourceNames:
217       - baseline
218       resources:
219       - podsecuritypolicies
220       verbs:
221       - use
222     ---
223     apiVersion: rbac.authorization.k8s.io/v1
224     kind: ClusterRole
225     metadata:
226       name: psp:icn
227       labels:
228         addonmanager.kubernetes.io/mode: Reconcile
229     rules:
230     - apiGroups:
231       - policy
232       resourceNames:
233       - icn
234       resources:
235       - podsecuritypolicies
236       verbs:
237       - use
238     ---
239     apiVersion: rbac.authorization.k8s.io/v1
240     kind: ClusterRole
241     metadata:
242       name: psp:restricted
243       labels:
244         addonmanager.kubernetes.io/mode: Reconcile
245     rules:
246     - apiGroups:
247       - policy
248       resourceNames:
249       - restricted
250       resources:
251       - podsecuritypolicies
252       verbs:
253       - use
254     ---
255     apiVersion: rbac.authorization.k8s.io/v1
256     kind: RoleBinding
257     metadata:
258       name: psp:privileged:nodes
259       namespace: kube-system
260       labels:
261         addonmanager.kubernetes.io/mode: Reconcile
262     roleRef:
263       apiGroup: rbac.authorization.k8s.io
264       kind: ClusterRole
265       name: psp:privileged
266     subjects:
267     - kind: Group
268       name: system:nodes
269       apiGroup: rbac.authorization.k8s.io
270     ---
271     apiVersion: rbac.authorization.k8s.io/v1
272     kind: RoleBinding
273     metadata:
274       name: psp:privileged:kube-system
275       namespace: kube-system
276     roleRef:
277       apiGroup: rbac.authorization.k8s.io
278       kind: ClusterRole
279       name: psp:privileged
280     subjects:
281     - kind: Group
282       name: system:serviceaccounts:kube-system
283       apiGroup: rbac.authorization.k8s.io
284     ---
285     apiVersion: rbac.authorization.k8s.io/v1
286     kind: ClusterRoleBinding
287     metadata:
288       name: psp:icn:any
289     roleRef:
290       kind: ClusterRole
291       name: psp:icn
292       apiGroup: rbac.authorization.k8s.io
293     subjects:
294     - kind: Group
295       name: system:authenticated
296       apiGroup: rbac.authorization.k8s.io
297 kind: ConfigMap
298 metadata:
299   creationTimestamp: null
300   name: {{ $clusterName }}-podsecurity-addon
301 {{- end }}