Skip to content

Commit 5104396

Browse files
committed
restrict modifying resourceslice by the requesting node object only
Signed-off-by: Swati Gupta <[email protected]>
1 parent 4253b44 commit 5104396

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
apiVersion: admissionregistration.k8s.io/v1
2+
kind: ValidatingAdmissionPolicy
3+
metadata:
4+
name: resourceslices-policy-{{ include "k8s-dra-driver.fullname" . }}
5+
spec:
6+
failurePolicy: Fail
7+
matchConstraints:
8+
resourceRules:
9+
- apiGroups: ["resource.k8s.io"]
10+
apiVersions: ["v1beta1"]
11+
operations: ["CREATE", "UPDATE", "DELETE"]
12+
resources: ["resourceslices"]
13+
matchConditions:
14+
- name: isRestrictedUser
15+
expression: >-
16+
request.userInfo.username == "system:serviceaccount:{{ include "k8s-dra-driver.namespace" . }}:{{ include "k8s-dra-driver.serviceAccountName" . }}"
17+
variables:
18+
- name: userNodeName
19+
expression: >-
20+
request.userInfo.extra[?'authentication.kubernetes.io/node-name'][0].orValue('')
21+
- name: objectNodeName
22+
expression: >-
23+
(request.operation == "DELETE" ? oldObject : object).spec.?nodeName.orValue("")
24+
validations:
25+
- expression: variables.userNodeName != ""
26+
message: >-
27+
no node association found for user, this user must run in a pod on a node and ServiceAccountTokenPodNodeInfo must be enabled
28+
- expression: variables.userNodeName == variables.objectNodeName
29+
messageExpression: >-
30+
"this user running on node '"+variables.userNodeName+"' may not modify " +
31+
(variables.objectNodeName == "" ?"cluster resourceslices" : "resourceslices on node '"+variables.objectNodeName+"'")
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
apiVersion: admissionregistration.k8s.io/v1
2+
kind: ValidatingAdmissionPolicyBinding
3+
metadata:
4+
name: resourceslices-policy-{{ include "k8s-dra-driver.fullname" . }}
5+
spec:
6+
policyName: resourceslices-policy-{{ include "k8s-dra-driver.fullname" . }}
7+
validationActions: [Deny]
8+
# All ResourceSlices are matched.

0 commit comments

Comments
 (0)