diff --git a/changelogs/unreleased/9094-sseago b/changelogs/unreleased/9094-sseago new file mode 100644 index 000000000..143c86850 --- /dev/null +++ b/changelogs/unreleased/9094-sseago @@ -0,0 +1 @@ +Mounted cloud credentials should not be world-readable diff --git a/internal/credentials/file_store.go b/internal/credentials/file_store.go index 4b5d25664..d1f1fb10a 100644 --- a/internal/credentials/file_store.go +++ b/internal/credentials/file_store.go @@ -71,7 +71,8 @@ func (n *namespacedFileStore) Path(selector *corev1api.SecretKeySelector) (strin keyFilePath := filepath.Join(n.fsRoot, fmt.Sprintf("%s-%s", selector.Name, selector.Key)) - file, err := n.fs.OpenFile(keyFilePath, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644) + // owner RW perms, group R perms, no public perms + file, err := n.fs.OpenFile(keyFilePath, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0640) if err != nil { return "", errors.Wrap(err, "unable to open credentials file for writing") } diff --git a/pkg/install/daemonset.go b/pkg/install/daemonset.go index 593aee8eb..1833c706a 100644 --- a/pkg/install/daemonset.go +++ b/pkg/install/daemonset.go @@ -23,6 +23,7 @@ import ( appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/utils/ptr" "github.com/vmware-tanzu/velero/internal/velero" ) @@ -177,7 +178,9 @@ func DaemonSet(namespace string, opts ...podTemplateOption) *appsv1.DaemonSet { Name: "cloud-credentials", VolumeSource: corev1.VolumeSource{ Secret: &corev1.SecretVolumeSource{ - SecretName: "cloud-credentials", + // read-only for Owner, Group, Public + DefaultMode: ptr.To(int32(0444)), + SecretName: "cloud-credentials", }, }, }, diff --git a/pkg/install/deployment.go b/pkg/install/deployment.go index 41fe474d0..d680142cf 100644 --- a/pkg/install/deployment.go +++ b/pkg/install/deployment.go @@ -24,6 +24,7 @@ import ( appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/utils/ptr" "github.com/vmware-tanzu/velero/internal/velero" "github.com/vmware-tanzu/velero/pkg/builder" @@ -404,7 +405,9 @@ func Deployment(namespace string, opts ...podTemplateOption) *appsv1.Deployment Name: "cloud-credentials", VolumeSource: corev1.VolumeSource{ Secret: &corev1.SecretVolumeSource{ - SecretName: "cloud-credentials", + // read-only for Owner, Group, Public + DefaultMode: ptr.To(int32(0444)), + SecretName: "cloud-credentials", }, }, },