Skip to content

Commit 11025e3

Browse files
committed
Trustee containers as non-privileged
Signed-off-by: Leonardo Milleri <[email protected]>
1 parent 2e15a63 commit 11025e3

File tree

4 files changed

+56
-24
lines changed

4 files changed

+56
-24
lines changed

config/samples/all-in-one/kbs-config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,6 @@ data:
3131
}
3232
},
3333
"policy_engine_config": {
34-
"policy_path": "/opa/confidential-containers/kbs/policy.rego"
34+
"policy_path": "/opt/confidential-containers/opa/policy.rego"
3535
}
3636
}

config/samples/microservices/kbs-config.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,8 @@ data:
2020
"repository_config": {
2121
"type": "LocalFs",
2222
"dir_path": "/opt/confidential-containers/kbs/repository"
23+
},
24+
"policy_engine_config": {
25+
"policy_path": "/opt/confidential-containers/opa/policy.rego"
2326
}
2427
}

internal/controller/kbsconfig_controller.go

Lines changed: 28 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -330,20 +330,37 @@ func (r *KbsConfigReconciler) newKbsDeployment(ctx context.Context) *appsv1.Depl
330330
kbsDeploymentType = confidentialcontainersorgv1alpha1.DeploymentTypeMicroservices
331331
}
332332

333-
// RunAsUser (root) 0
334-
runAsUser := int64(0)
335-
336333
var volumes []corev1.Volume
337334
var kbsVM []corev1.VolumeMount
338335
var asVM []corev1.VolumeMount
339336
var rvpsVM []corev1.VolumeMount
340337

338+
// The paths /opt/confidential-container and /opt/confidential-container/kbs/repository/default
339+
// are mounted as a RW volume in memory to allow trustee components
340+
// to have full access to the filesystem
341+
// confidential-containers
342+
volume, err := r.createConfidentialContainersVolume(confidentialContainers)
343+
if err != nil {
344+
return nil
345+
}
346+
volumes = append(volumes, *volume)
347+
volumeMount := createVolumeMount(volume.Name, filepath.Join(rootPath, volume.Name))
348+
kbsVM = append(kbsVM, volumeMount)
349+
// default repo
350+
volume, err = r.createDefaultRepositoryVolume(defaultRepository)
351+
if err != nil {
352+
return nil
353+
}
354+
volumes = append(volumes, *volume)
355+
volumeMount = createVolumeMount(volume.Name, filepath.Join(repositoryPath, volume.Name))
356+
kbsVM = append(kbsVM, volumeMount)
357+
341358
// kbs-config
342-
volume, err := r.createKbsConfigMapVolume(ctx, "kbs-config")
359+
volume, err = r.createKbsConfigMapVolume(ctx, "kbs-config")
343360
if err != nil {
344361
return nil
345362
}
346-
volumeMount := createVolumeMount(volume.Name, filepath.Join(kbsDefaultConfigPath, volume.Name))
363+
volumeMount = createVolumeMount(volume.Name, filepath.Join(kbsDefaultConfigPath, volume.Name))
347364
volumes = append(volumes, *volume)
348365
kbsVM = append(kbsVM, volumeMount)
349366

@@ -424,13 +441,13 @@ func (r *KbsConfigReconciler) newKbsDeployment(ctx context.Context) *appsv1.Depl
424441
rvpsVM = append(rvpsVM, volumeMount)
425442
}
426443

427-
containers := []corev1.Container{r.buildKbsContainer(kbsVM, runAsUser)}
444+
containers := []corev1.Container{r.buildKbsContainer(kbsVM)}
428445

429446
if kbsDeploymentType == confidentialcontainersorgv1alpha1.DeploymentTypeMicroservices {
430447
// build AS container
431-
containers = append(containers, r.buildAsContainer(asVM, runAsUser))
448+
containers = append(containers, r.buildAsContainer(asVM))
432449
// build RVPS container
433-
containers = append(containers, r.buildRvpsContainer(rvpsVM, runAsUser))
450+
containers = append(containers, r.buildRvpsContainer(rvpsVM))
434451
}
435452

436453
// Create the deployment
@@ -464,7 +481,7 @@ func (r *KbsConfigReconciler) newKbsDeployment(ctx context.Context) *appsv1.Depl
464481
return deployment
465482
}
466483

467-
func (r *KbsConfigReconciler) buildAsContainer(volumeMounts []corev1.VolumeMount, runAsUser int64) corev1.Container {
484+
func (r *KbsConfigReconciler) buildAsContainer(volumeMounts []corev1.VolumeMount) corev1.Container {
468485
asImageName := os.Getenv("AS_IMAGE_NAME")
469486
if asImageName == "" {
470487
asImageName = DefaultAsImageName
@@ -490,16 +507,12 @@ func (r *KbsConfigReconciler) buildAsContainer(volumeMounts []corev1.VolumeMount
490507
},
491508
// Add command to start AS
492509
Command: asCommand,
493-
// Add SecurityContext
494-
SecurityContext: &corev1.SecurityContext{
495-
RunAsUser: &runAsUser,
496-
},
497510
// Add volume mount for config
498511
VolumeMounts: volumeMounts,
499512
}
500513
}
501514

502-
func (r *KbsConfigReconciler) buildRvpsContainer(volumeMounts []corev1.VolumeMount, runAsUser int64) corev1.Container {
515+
func (r *KbsConfigReconciler) buildRvpsContainer(volumeMounts []corev1.VolumeMount) corev1.Container {
503516
rvpsImageName := os.Getenv("RVPS_IMAGE_NAME")
504517
if rvpsImageName == "" {
505518
rvpsImageName = DefaultRvpsImageName
@@ -523,16 +536,12 @@ func (r *KbsConfigReconciler) buildRvpsContainer(volumeMounts []corev1.VolumeMou
523536
},
524537
// Add command to start RVPS
525538
Command: rvpsCommand,
526-
// Add SecurityContext
527-
SecurityContext: &corev1.SecurityContext{
528-
RunAsUser: &runAsUser,
529-
},
530539
// Add volume mount for config
531540
VolumeMounts: volumeMounts,
532541
}
533542
}
534543

535-
func (r *KbsConfigReconciler) buildKbsContainer(volumeMounts []corev1.VolumeMount, runAsUser int64) corev1.Container {
544+
func (r *KbsConfigReconciler) buildKbsContainer(volumeMounts []corev1.VolumeMount) corev1.Container {
536545
// Get Image Name from env variable if set
537546
imageName := os.Getenv("KBS_IMAGE_NAME")
538547
if imageName == "" {
@@ -557,10 +566,6 @@ func (r *KbsConfigReconciler) buildKbsContainer(volumeMounts []corev1.VolumeMoun
557566
},
558567
// Add command to start KBS
559568
Command: command,
560-
// Add SecurityContext
561-
SecurityContext: &corev1.SecurityContext{
562-
RunAsUser: &runAsUser,
563-
},
564569
// Add volume mount for KBS config
565570
VolumeMounts: volumeMounts,
566571
/* TODO commented out because not configurable yet

internal/controller/volumes.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,30 @@ import (
2525
"sigs.k8s.io/controller-runtime/pkg/client"
2626
)
2727

28+
func (r *KbsConfigReconciler) createConfidentialContainersVolume(volumeName string) (*corev1.Volume, error) {
29+
volume := corev1.Volume{
30+
Name: volumeName,
31+
VolumeSource: corev1.VolumeSource{
32+
EmptyDir: &corev1.EmptyDirVolumeSource{
33+
Medium: corev1.StorageMediumMemory,
34+
},
35+
},
36+
}
37+
return &volume, nil
38+
}
39+
40+
func (r *KbsConfigReconciler) createDefaultRepositoryVolume(volumeName string) (*corev1.Volume, error) {
41+
volume := corev1.Volume{
42+
Name: volumeName,
43+
VolumeSource: corev1.VolumeSource{
44+
EmptyDir: &corev1.EmptyDirVolumeSource{
45+
Medium: corev1.StorageMediumMemory,
46+
},
47+
},
48+
}
49+
return &volume, nil
50+
}
51+
2852
func (r *KbsConfigReconciler) createKbsConfigMapVolume(ctx context.Context, volumeName string) (*corev1.Volume, error) {
2953
if r.kbsConfig.Spec.KbsConfigMapName != "" {
3054
foundConfigMap := &corev1.ConfigMap{}

0 commit comments

Comments
 (0)