Skip to content

Commit ade80a0

Browse files
committed
Create SA for backup jobs
A new SA is created for the backup jobs to limit the permission to just what is necessary. Signed-off-by: Ales Raszka <[email protected]>
1 parent 831c15b commit ade80a0

File tree

8 files changed

+93
-44
lines changed

8 files changed

+93
-44
lines changed

controllers/backupcronjob/backupcronjob_controller.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,8 +149,9 @@ func (r *BackupCronJobReconciler) SetupWithManager(mgr ctrl.Manager) error {
149149
Complete(r)
150150
}
151151

152-
// +kubebuilder:rbac:groups="",resources=secrets,verbs=get;list;create;update;patch;delete
153152
// +kubebuilder:rbac:groups="",resources=persistentvolumeclaims,verbs=get;list
153+
// +kubebuilder:rbac:groups="",resources=secrets,verbs=get;list;create;update;patch;delete
154+
// +kubebuilder:rbac:groups="",resources=serviceaccounts;,verbs=get;list;create;update;patch;delete
154155
// +kubebuilder:rbac:groups=batch,resources=jobs,verbs=get;list;create;update;patch;delete
155156
// +kubebuilder:rbac:groups=controller.devfile.io,resources=devworkspaceoperatorconfigs,verbs=get;list;update;patch;watch
156157
// +kubebuilder:rbac:groups=workspace.devfile.io,resources=devworkspaces,verbs=get;list
@@ -270,6 +271,12 @@ func (r *BackupCronJobReconciler) executeBackupSync(ctx context.Context, dwOpera
270271
dwID := dw.Status.DevWorkspaceId
271272
log.Info("Found DevWorkspace", "namespace", dw.Namespace, "devworkspace", dw.Name, "id", dwID)
272273

274+
err = r.ensureJobRunnerRBAC(ctx, &dw)
275+
if err != nil {
276+
log.Error(err, "Failed to ensure Job runner RBAC for DevWorkspace", "id", dwID)
277+
continue
278+
}
279+
273280
if err := r.createBackupJob(&dw, ctx, dwOperatorConfig, registyAuthSecret, logger); err != nil {
274281
log.Error(err, "Failed to create backup Job for DevWorkspace", "id", dwID)
275282
continue
@@ -384,7 +391,8 @@ func (r *BackupCronJobReconciler) createBackupJob(
384391
Spec: batchv1.JobSpec{
385392
Template: corev1.PodTemplateSpec{
386393
Spec: corev1.PodSpec{
387-
RestartPolicy: corev1.RestartPolicyNever,
394+
ServiceAccountName: JobRunnerSAName,
395+
RestartPolicy: corev1.RestartPolicyNever,
388396
SecurityContext: &corev1.PodSecurityContext{
389397
FSGroup: ptrInt64(0),
390398
},

controllers/backupcronjob/rbac.go

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package controllers
2+
3+
import (
4+
"context"
5+
"fmt"
6+
7+
dw "github.com/devfile/api/v2/pkg/apis/workspaces/v1alpha2"
8+
"github.com/devfile/devworkspace-operator/pkg/constants"
9+
corev1 "k8s.io/api/core/v1"
10+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
11+
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
12+
)
13+
14+
const (
15+
JobRunnerSAName = "devworkspace-job-runner"
16+
)
17+
18+
func (r *BackupCronJobReconciler) ensureJobRunnerRBAC(ctx context.Context, workspace *dw.DevWorkspace) error {
19+
const (
20+
roleName = "devworkspace-job-runner-role"
21+
rbName = "devworkspace-job-runner-rolebinding"
22+
)
23+
24+
sa := &corev1.ServiceAccount{
25+
ObjectMeta: metav1.ObjectMeta{Name: JobRunnerSAName, Namespace: workspace.Namespace, Labels: map[string]string{
26+
constants.DevWorkspaceIDLabel: workspace.Status.DevWorkspaceId,
27+
constants.DevWorkspaceWatchSecretLabel: "true",
28+
}},
29+
}
30+
31+
// Create or update ServiceAccount
32+
if err := controllerutil.SetControllerReference(workspace, sa, r.Scheme); err != nil {
33+
return err
34+
}
35+
if _, err := controllerutil.CreateOrUpdate(ctx, r.Client, sa, func() error { return nil }); err != nil {
36+
return fmt.Errorf("ensuring ServiceAccount: %w", err)
37+
}
38+
39+
return nil
40+
41+
}

deploy/bundle/manifests/devworkspace-operator.clusterserviceversion.yaml

Lines changed: 7 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

deploy/deployment/kubernetes/combined.yaml

Lines changed: 7 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

deploy/deployment/kubernetes/objects/devworkspace-controller-role.ClusterRole.yaml

Lines changed: 7 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

deploy/deployment/openshift/combined.yaml

Lines changed: 7 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

deploy/deployment/openshift/objects/devworkspace-controller-role.ClusterRole.yaml

Lines changed: 7 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

deploy/templates/components/rbac/role.yaml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ rules:
2020
resources:
2121
- configmaps
2222
- pods
23-
- serviceaccounts
2423
- services
2524
verbs:
2625
- '*'
@@ -45,12 +44,6 @@ rules:
4544
- pods/exec
4645
verbs:
4746
- create
48-
- apiGroups:
49-
- ""
50-
resources:
51-
- secrets
52-
verbs:
53-
- '*'
5447
- apiGroups:
5548
- ""
5649
resourceNames:
@@ -62,6 +55,13 @@ rules:
6255
- delete
6356
- get
6457
- patch
58+
- apiGroups:
59+
- ""
60+
resources:
61+
- secrets
62+
- serviceaccounts
63+
verbs:
64+
- '*'
6565
- apiGroups:
6666
- admissionregistration.k8s.io
6767
resources:

0 commit comments

Comments
 (0)