@@ -3,23 +3,22 @@ package scc
3
3
import (
4
4
"fmt"
5
5
"net/http"
6
- "os "
6
+ "regexp "
7
7
"slices"
8
8
9
9
securityv1 "github.com/openshift/api/security/v1"
10
10
"github.com/openshift/managed-cluster-validating-webhooks/pkg/webhooks/utils"
11
11
admissionv1 "k8s.io/api/admission/v1"
12
12
admissionregv1 "k8s.io/api/admissionregistration/v1"
13
- corev1 "k8s.io/api/core/v1"
14
13
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
15
14
"k8s.io/apimachinery/pkg/runtime"
16
15
logf "sigs.k8s.io/controller-runtime/pkg/log"
17
16
admissionctl "sigs.k8s.io/controller-runtime/pkg/webhook/admission"
18
17
)
19
18
20
19
const (
21
- WebhookName string = "scc-validation"
22
- docString string = `Managed OpenShift Customers may not modify the following default SCCs: %s`
20
+ WebhookName = "scc-validation"
21
+ docString = `Managed OpenShift Customers may not modify the following default SCCs: %s`
23
22
)
24
23
25
24
var (
42
41
"system:serviceaccount:openshift-cluster-version:default" ,
43
42
"system:admin" ,
44
43
}
45
- allowedGroups = [] string {}
46
- defaultSCCs = []string {
44
+ allowedGroupsRe = regexp . MustCompile ( "^system:serviceaccounts:osde2e-(h-)?[a-z0-9]{5}" )
45
+ defaultSCCs = []string {
47
46
"anyuid" ,
48
47
"hostaccess" ,
49
48
"hostmount-anyuid" ,
@@ -59,25 +58,13 @@ var (
59
58
)
60
59
61
60
type SCCWebHook struct {
62
- s runtime.Scheme
61
+ scheme * runtime.Scheme
63
62
}
64
63
65
64
// NewWebhook creates the new webhook
66
65
func NewWebhook () * SCCWebHook {
67
- scheme := runtime .NewScheme ()
68
- err := admissionv1 .AddToScheme (scheme )
69
- if err != nil {
70
- log .Error (err , "Fail adding admissionsv1 scheme to SCCWebHook" )
71
- os .Exit (1 )
72
- }
73
- err = corev1 .AddToScheme (scheme )
74
- if err != nil {
75
- log .Error (err , "Fail adding corev1 scheme to SCCWebHook" )
76
- os .Exit (1 )
77
- }
78
-
79
66
return & SCCWebHook {
80
- s : * scheme ,
67
+ scheme : runtime . NewScheme () ,
81
68
}
82
69
}
83
70
@@ -117,7 +104,7 @@ func (s *SCCWebHook) authorized(request admissionctl.Request) admissionctl.Respo
117
104
118
105
// renderSCC render the SCC object from the requests
119
106
func (s * SCCWebHook ) renderSCC (request admissionctl.Request ) (* securityv1.SecurityContextConstraints , error ) {
120
- decoder , err := admissionctl .NewDecoder (& s . s )
107
+ decoder , err := admissionctl .NewDecoder (s . scheme )
121
108
if err != nil {
122
109
return nil , err
123
110
}
@@ -139,8 +126,8 @@ func isAllowedUserGroup(request admissionctl.Request) bool {
139
126
return true
140
127
}
141
128
142
- for _ , group := range allowedGroups {
143
- if slices . Contains ( request . UserInfo . Groups , group ) {
129
+ for _ , group := range request . UserInfo . Groups {
130
+ if allowedGroupsRe . Match ([] byte ( group ) ) {
144
131
return true
145
132
}
146
133
}
0 commit comments