set proper file permission for projected service account volume
This commit is contained in:
@@ -32,6 +32,7 @@ go_test(
|
||||
"//pkg/apis/core:go_default_library",
|
||||
"//staging/src/k8s.io/api/core/v1:go_default_library",
|
||||
"//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library",
|
||||
"//vendor/k8s.io/utils/pointer:go_default_library",
|
||||
],
|
||||
)
|
||||
|
||||
|
@@ -17,7 +17,7 @@ limitations under the License.
|
||||
package securitycontext
|
||||
|
||||
import (
|
||||
"k8s.io/api/core/v1"
|
||||
v1 "k8s.io/api/core/v1"
|
||||
)
|
||||
|
||||
// HasPrivilegedRequest returns the value of SecurityContext.Privileged, taking into account
|
||||
@@ -124,6 +124,25 @@ func DetermineEffectiveSecurityContext(pod *v1.Pod, container *v1.Container) *v1
|
||||
return effectiveSc
|
||||
}
|
||||
|
||||
// DetermineEffectiveRunAsUser returns a pointer of UID from the provided pod's
|
||||
// and container's security context and a bool value to indicate if it is absent.
|
||||
// Container's runAsUser take precedence in cases where both are set.
|
||||
func DetermineEffectiveRunAsUser(pod *v1.Pod, container *v1.Container) (*int64, bool) {
|
||||
var runAsUser *int64
|
||||
if pod.Spec.SecurityContext != nil && pod.Spec.SecurityContext.RunAsUser != nil {
|
||||
runAsUser = new(int64)
|
||||
*runAsUser = *pod.Spec.SecurityContext.RunAsUser
|
||||
}
|
||||
if container.SecurityContext != nil && container.SecurityContext.RunAsUser != nil {
|
||||
runAsUser = new(int64)
|
||||
*runAsUser = *container.SecurityContext.RunAsUser
|
||||
}
|
||||
if runAsUser == nil {
|
||||
return nil, false
|
||||
}
|
||||
return runAsUser, true
|
||||
}
|
||||
|
||||
func securityContextFromPodSecurityContext(pod *v1.Pod) *v1.SecurityContext {
|
||||
if pod.Spec.SecurityContext == nil {
|
||||
return nil
|
||||
|
@@ -20,7 +20,8 @@ import (
|
||||
"reflect"
|
||||
"testing"
|
||||
|
||||
"k8s.io/api/core/v1"
|
||||
v1 "k8s.io/api/core/v1"
|
||||
utilptr "k8s.io/utils/pointer"
|
||||
)
|
||||
|
||||
func TestAddNoNewPrivileges(t *testing.T) {
|
||||
@@ -120,3 +121,92 @@ func TestConvertToRuntimeReadonlyPaths(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestDetermineEffectiveRunAsUser(t *testing.T) {
|
||||
tests := []struct {
|
||||
desc string
|
||||
pod *v1.Pod
|
||||
container *v1.Container
|
||||
wantRunAsUser *int64
|
||||
}{
|
||||
{
|
||||
desc: "no securityContext in pod, no securityContext in container",
|
||||
pod: &v1.Pod{
|
||||
Spec: v1.PodSpec{},
|
||||
},
|
||||
container: &v1.Container{},
|
||||
wantRunAsUser: nil,
|
||||
},
|
||||
{
|
||||
desc: "no runAsUser in pod, no runAsUser in container",
|
||||
pod: &v1.Pod{
|
||||
Spec: v1.PodSpec{
|
||||
SecurityContext: &v1.PodSecurityContext{},
|
||||
},
|
||||
},
|
||||
container: &v1.Container{
|
||||
SecurityContext: &v1.SecurityContext{},
|
||||
},
|
||||
wantRunAsUser: nil,
|
||||
},
|
||||
{
|
||||
desc: "runAsUser in pod, no runAsUser in container",
|
||||
pod: &v1.Pod{
|
||||
Spec: v1.PodSpec{
|
||||
SecurityContext: &v1.PodSecurityContext{
|
||||
RunAsUser: new(int64),
|
||||
},
|
||||
},
|
||||
},
|
||||
container: &v1.Container{
|
||||
SecurityContext: &v1.SecurityContext{},
|
||||
},
|
||||
wantRunAsUser: new(int64),
|
||||
},
|
||||
{
|
||||
desc: "no runAsUser in pod, runAsUser in container",
|
||||
pod: &v1.Pod{
|
||||
Spec: v1.PodSpec{
|
||||
SecurityContext: &v1.PodSecurityContext{},
|
||||
},
|
||||
},
|
||||
container: &v1.Container{
|
||||
SecurityContext: &v1.SecurityContext{
|
||||
RunAsUser: new(int64),
|
||||
},
|
||||
},
|
||||
wantRunAsUser: new(int64),
|
||||
},
|
||||
{
|
||||
desc: "no runAsUser in pod, runAsUser in container",
|
||||
pod: &v1.Pod{
|
||||
Spec: v1.PodSpec{
|
||||
SecurityContext: &v1.PodSecurityContext{
|
||||
RunAsUser: new(int64),
|
||||
},
|
||||
},
|
||||
},
|
||||
container: &v1.Container{
|
||||
SecurityContext: &v1.SecurityContext{
|
||||
RunAsUser: utilptr.Int64Ptr(1),
|
||||
},
|
||||
},
|
||||
wantRunAsUser: utilptr.Int64Ptr(1),
|
||||
},
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
t.Run(test.desc, func(t *testing.T) {
|
||||
runAsUser, ok := DetermineEffectiveRunAsUser(test.pod, test.container)
|
||||
if !ok && test.wantRunAsUser != nil {
|
||||
t.Errorf("DetermineEffectiveRunAsUser(%v, %v) = %v, want %d", test.pod, test.container, runAsUser, *test.wantRunAsUser)
|
||||
}
|
||||
if ok && test.wantRunAsUser == nil {
|
||||
t.Errorf("DetermineEffectiveRunAsUser(%v, %v) = %d, want %v", test.pod, test.container, *runAsUser, test.wantRunAsUser)
|
||||
}
|
||||
if ok && test.wantRunAsUser != nil && *runAsUser != *test.wantRunAsUser {
|
||||
t.Errorf("DetermineEffectiveRunAsUser(%v, %v) = %d, want %d", test.pod, test.container, *runAsUser, *test.wantRunAsUser)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user