mirror of
https://github.com/NVIDIA/OpenShell.git
synced 2026-10-22 06:19:47 +08:00
* fix(kubernetes): scope resource admission RBAC Signed-off-by: Drew Newberry <anewberry@nvidia.com> * fix(helm): gate PVC admission reads Signed-off-by: Drew Newberry <anewberry@nvidia.com> --------- Signed-off-by: Drew Newberry <anewberry@nvidia.com>
224 lines
6.5 KiB
YAML
224 lines
6.5 KiB
YAML
# SPDX-FileCopyrightText: Copyright (c) 2025-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
suite: ClusterRole RBAC
|
|
templates:
|
|
- templates/clusterrole.yaml
|
|
release:
|
|
name: openshell
|
|
namespace: my-namespace
|
|
|
|
tests:
|
|
- it: includes the release namespace in the ClusterRole name
|
|
asserts:
|
|
- equal:
|
|
path: metadata.name
|
|
value: openshell-node-reader-my-namespace
|
|
|
|
- it: grants managed namespace NetworkPolicy apply permissions
|
|
set:
|
|
server.drivers.kubernetes.workspaceMode: managed
|
|
asserts:
|
|
- contains:
|
|
path: rules
|
|
content:
|
|
apiGroups: ["networking.k8s.io"]
|
|
resources: ["networkpolicies"]
|
|
verbs: ["get", "create", "patch", "update"]
|
|
|
|
- it: limits namespaced admission reads to PVCs
|
|
set:
|
|
server.drivers.kubernetes.workspaceMode: managed
|
|
server.drivers.kubernetes.allowDriverConfig: true
|
|
asserts:
|
|
- contains:
|
|
path: rules
|
|
content:
|
|
apiGroups: [""]
|
|
resources: ["persistentvolumeclaims"]
|
|
verbs: ["get"]
|
|
- notContains:
|
|
path: rules
|
|
content:
|
|
apiGroups: [""]
|
|
resources: ["secrets"]
|
|
verbs: ["get"]
|
|
- notContains:
|
|
path: rules
|
|
content:
|
|
apiGroups: [""]
|
|
resources: ["configmaps"]
|
|
verbs: ["get"]
|
|
|
|
- it: omits PVC admission reads when caller driver config is disabled
|
|
set:
|
|
server.drivers.kubernetes.workspaceMode: managed
|
|
asserts:
|
|
- notContains:
|
|
path: rules
|
|
content:
|
|
apiGroups: [""]
|
|
resources: ["persistentvolumeclaims"]
|
|
verbs: ["get"]
|
|
|
|
- it: preserves sandbox-runtime fence permissions when gateway isolation is disabled
|
|
set:
|
|
server.drivers.kubernetes.workspaceMode: managed
|
|
networkPolicy.enabled: false
|
|
asserts:
|
|
- contains:
|
|
path: rules
|
|
content:
|
|
apiGroups: ["networking.k8s.io"]
|
|
resources: ["networkpolicies"]
|
|
verbs: ["create", "get"]
|
|
- notContains:
|
|
path: rules
|
|
content:
|
|
apiGroups: ["networking.k8s.io"]
|
|
resources: ["networkpolicies"]
|
|
verbs: ["get", "create", "patch", "update"]
|
|
|
|
- it: grants broad secret access when credential driver is enabled (operator)
|
|
set:
|
|
server.drivers.kubernetes.workspaceMode: operator
|
|
server.credentialDrivers.kubernetesSecrets.enabled: true
|
|
asserts:
|
|
- contains:
|
|
path: rules
|
|
content:
|
|
apiGroups: [""]
|
|
resources: ["secrets"]
|
|
verbs: ["get", "create", "patch", "delete"]
|
|
|
|
- it: restricts operator TLS sync to the configured secret
|
|
set:
|
|
server.drivers.kubernetes.workspaceMode: operator
|
|
server.tls.clientTlsSecretName: custom-client-tls
|
|
asserts:
|
|
- contains:
|
|
path: rules
|
|
content:
|
|
apiGroups: [""]
|
|
resources: ["secrets"]
|
|
resourceNames: ["custom-client-tls"]
|
|
verbs: ["get", "patch"]
|
|
|
|
- it: grants operator bootstrap secret lifecycle permissions when TLS and credential storage are disabled
|
|
set:
|
|
server.drivers.kubernetes.workspaceMode: operator
|
|
server.disableTls: true
|
|
asserts:
|
|
- contains:
|
|
path: rules
|
|
content:
|
|
apiGroups: [""]
|
|
resources: ["secrets"]
|
|
verbs: ["create", "list", "delete"]
|
|
- notContains:
|
|
path: rules
|
|
content:
|
|
apiGroups: [""]
|
|
resources: ["secrets"]
|
|
verbs: ["get", "create", "patch", "delete"]
|
|
|
|
- it: restricts managed copies to TLS and configured image-pull secrets
|
|
set:
|
|
server.drivers.kubernetes.workspaceMode: managed
|
|
server.tls.clientTlsSecretName: custom-client-tls
|
|
server.sandboxImagePullSecrets:
|
|
- name: registry-one
|
|
- name: registry-two
|
|
asserts:
|
|
- contains:
|
|
path: rules
|
|
content:
|
|
apiGroups: [""]
|
|
resources: ["secrets"]
|
|
resourceNames: ["custom-client-tls", "registry-one", "registry-two"]
|
|
verbs: ["get", "patch"]
|
|
- contains:
|
|
path: rules
|
|
content:
|
|
apiGroups: [""]
|
|
resources: ["secrets"]
|
|
verbs: ["create", "list", "delete"]
|
|
|
|
- it: restricts managed copies to image-pull secrets when TLS is disabled
|
|
set:
|
|
server.drivers.kubernetes.workspaceMode: managed
|
|
server.disableTls: true
|
|
server.sandboxImagePullSecrets:
|
|
- name: registry-one
|
|
asserts:
|
|
- contains:
|
|
path: rules
|
|
content:
|
|
apiGroups: [""]
|
|
resources: ["secrets"]
|
|
resourceNames: ["registry-one"]
|
|
verbs: ["get", "patch"]
|
|
- contains:
|
|
path: rules
|
|
content:
|
|
apiGroups: [""]
|
|
resources: ["secrets"]
|
|
verbs: ["create", "list", "delete"]
|
|
|
|
- it: omits secrets rule entirely in shared mode
|
|
set:
|
|
server.drivers.kubernetes.workspaceMode: shared
|
|
asserts:
|
|
- notContains:
|
|
path: rules
|
|
content:
|
|
apiGroups: [""]
|
|
resources: ["secrets"]
|
|
any: true
|
|
|
|
- it: grants managed sandbox-runtime companion permissions
|
|
set:
|
|
server.drivers.kubernetes.workspaceMode: managed
|
|
asserts:
|
|
- contains:
|
|
path: rules
|
|
content:
|
|
apiGroups: [""]
|
|
resources: ["pods"]
|
|
verbs: ["create", "delete", "get", "list", "patch", "watch"]
|
|
- contains:
|
|
path: rules
|
|
content:
|
|
apiGroups: [""]
|
|
resources: ["services"]
|
|
verbs: ["create", "get"]
|
|
- contains:
|
|
path: rules
|
|
content:
|
|
apiGroups: [""]
|
|
resources: ["secrets"]
|
|
verbs: ["create", "list", "delete"]
|
|
|
|
- it: grants operator sandbox-runtime companion permissions
|
|
set:
|
|
server.drivers.kubernetes.workspaceMode: operator
|
|
asserts:
|
|
- contains:
|
|
path: rules
|
|
content:
|
|
apiGroups: [""]
|
|
resources: ["pods"]
|
|
verbs: ["create", "delete", "get", "list", "patch", "watch"]
|
|
- contains:
|
|
path: rules
|
|
content:
|
|
apiGroups: [""]
|
|
resources: ["services"]
|
|
verbs: ["create", "get"]
|
|
- contains:
|
|
path: rules
|
|
content:
|
|
apiGroups: [""]
|
|
resources: ["secrets"]
|
|
verbs: ["create", "list", "delete"]
|