Skip to content

Commit 572730b

Browse files
authored
Merge pull request #219 from guptaNswati/limit-cluster-access
Limit cluster access
2 parents b1fe289 + 8b7a9d1 commit 572730b

File tree

3 files changed

+53
-7
lines changed

3 files changed

+53
-7
lines changed

deployments/helm/k8s-dra-driver/templates/clusterrole.yaml

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,15 @@ metadata:
55
name: {{ include "k8s-dra-driver.fullname" . }}-role
66
namespace: {{ include "k8s-dra-driver.namespace" . }}
77
rules:
8-
- apiGroups:
9-
- ""
10-
- apps
11-
- resource.k8s.io
12-
- gpu.nvidia.com
13-
resources: ["*"]
14-
verbs: ["*"]
8+
- apiGroups: ["resource.k8s.io"]
9+
resources: ["resourceclaims"]
10+
verbs: ["get"]
11+
- apiGroups: ["resource.k8s.io"]
12+
resources: ["resourceclaims/status"]
13+
verbs: ["update"]
14+
- apiGroups: [""]
15+
resources: ["nodes"]
16+
verbs: ["get"]
17+
- apiGroups: ["resource.k8s.io"]
18+
resources: ["resourceslices"]
19+
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
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+
- name: nodeSelectorValue
25+
expression: >-
26+
(request.operation == "DELETE" ? oldObject : object).spec.nodeSelector.nodeSelectorTerms[0].matchExpressions[0].values[0].orValue("")
27+
validations:
28+
- expression: variables.userNodeName != ""
29+
message: >-
30+
no node association found for user, this user must run in a pod on a node and ServiceAccountTokenPodNodeInfo must be enabled
31+
- expression: variables.userNodeName == variables.objectNodeName || variables.nodeSelectorValue != ""
32+
messageExpression: >-
33+
"this user running on node '"+variables.userNodeName+"' may not modify cluster or node resourceslices"
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)