@@ -16,6 +16,9 @@ import (
1616)
1717
1818func (feast * FeastServices ) deployCronJob () error {
19+ if err := feast .createCronJobServiceAccount (); err != nil {
20+ return feast .setFeastServiceCondition (err , CronJobFeastType )
21+ }
1922 if err := feast .createCronJobRole (); err != nil {
2023 return feast .setFeastServiceCondition (err , CronJobFeastType )
2124 }
@@ -146,8 +149,15 @@ func (feast *FeastServices) setCronJob(cronJob *batchv1.CronJob) error {
146149
147150func (feast * FeastServices ) getCronJobPodSpec () corev1.PodSpec {
148151 podSpec := corev1.PodSpec {
149- ServiceAccountName : feast .initFeastSA ().Name ,
152+ ServiceAccountName : feast .initCronJobSA ().Name ,
150153 RestartPolicy : corev1 .RestartPolicyNever ,
154+ SecurityContext : & corev1.PodSecurityContext {
155+ RunAsNonRoot : boolPtr (true ),
156+ RunAsUser : int64Ptr (1001 ),
157+ SeccompProfile : & corev1.SeccompProfile {
158+ Type : corev1 .SeccompProfileTypeRuntimeDefault ,
159+ },
160+ },
151161 }
152162 feast .setCronJobContainers (& podSpec )
153163 return podSpec
@@ -167,7 +177,7 @@ func (feast *FeastServices) setCronJobContainers(podSpec *corev1.PodSpec) {
167177}
168178
169179func (feast * FeastServices ) getCronJobContainer (containerName , cronJobCmd string ) corev1.Container {
170- return * getContainer (
180+ container := getContainer (
171181 containerName ,
172182 "" ,
173183 []string {
@@ -178,6 +188,42 @@ func (feast *FeastServices) getCronJobContainer(containerName, cronJobCmd string
178188 feast .Handler .FeatureStore .Status .Applied .CronJob .ContainerConfigs .ContainerConfigs ,
179189 "" ,
180190 )
191+ container .SecurityContext = & corev1.SecurityContext {
192+ AllowPrivilegeEscalation : boolPtr (false ),
193+ Capabilities : & corev1.Capabilities {
194+ Drop : []corev1.Capability {"ALL" },
195+ },
196+ }
197+ return * container
198+ }
199+
200+ func (feast * FeastServices ) createCronJobServiceAccount () error {
201+ logger := log .FromContext (feast .Handler .Context )
202+ sa := feast .initCronJobSA ()
203+ if op , err := controllerutil .CreateOrUpdate (feast .Handler .Context , feast .Handler .Client , sa , controllerutil .MutateFn (func () error {
204+ return feast .setCronJobServiceAccount (sa )
205+ })); err != nil {
206+ return err
207+ } else if op == controllerutil .OperationResultCreated || op == controllerutil .OperationResultUpdated {
208+ logger .Info ("Successfully reconciled" , "ServiceAccount" , sa .Name , "operation" , op )
209+ }
210+ return nil
211+ }
212+
213+ func (feast * FeastServices ) initCronJobSA () * corev1.ServiceAccount {
214+ sa := & corev1.ServiceAccount {
215+ ObjectMeta : metav1.ObjectMeta {
216+ Name : feast .getCronJobRoleName (),
217+ Namespace : feast .Handler .FeatureStore .Namespace ,
218+ },
219+ }
220+ sa .SetGroupVersionKind (corev1 .SchemeGroupVersion .WithKind ("ServiceAccount" ))
221+ return sa
222+ }
223+
224+ func (feast * FeastServices ) setCronJobServiceAccount (sa * corev1.ServiceAccount ) error {
225+ sa .Labels = feast .getFeastTypeLabels (CronJobFeastType )
226+ return controllerutil .SetControllerReference (feast .Handler .FeatureStore , sa , feast .Handler .Scheme )
181227}
182228
183229func (feast * FeastServices ) createCronJobRole () error {
@@ -254,7 +300,7 @@ func (feast *FeastServices) setCronJobRoleBinding(roleBinding *rbacv1.RoleBindin
254300 roleBinding .Labels = feast .getFeastTypeLabels (CronJobFeastType )
255301 roleBinding .Subjects = []rbacv1.Subject {{
256302 Kind : rbacv1 .ServiceAccountKind ,
257- Name : feast .initFeastSA ().Name ,
303+ Name : feast .initCronJobSA ().Name ,
258304 Namespace : feast .Handler .FeatureStore .Namespace ,
259305 }}
260306 roleBinding .RoleRef = rbacv1.RoleRef {
0 commit comments