Skip to content

Commit 450e82c

Browse files
committed
feat: Secure ciphers, min TLS v1.2, and disable auto TLS for etcd
This increases ootb security and provides STIG compliance for this area at least.
1 parent 552d824 commit 450e82c

File tree

2 files changed

+53
-7
lines changed

2 files changed

+53
-7
lines changed

pkg/handlers/generic/mutation/etcd/inject.go

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ package etcd
55

66
import (
77
"context"
8+
"crypto/tls"
9+
"strings"
810

911
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
1012
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
@@ -45,6 +47,21 @@ func newEtcdPatchHandler(
4547
}
4648
}
4749

50+
var defaultEtcdExtraArgs = map[string]string{
51+
"auto-tls": "false",
52+
"peer-auto-tls": "false",
53+
"cipher-suites": strings.Join(
54+
[]string{
55+
tls.CipherSuiteName(tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256),
56+
tls.CipherSuiteName(tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256),
57+
tls.CipherSuiteName(tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384),
58+
tls.CipherSuiteName(tls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384),
59+
},
60+
",",
61+
),
62+
"tls-min-version": "TLS1.2",
63+
}
64+
4865
func (h *etcdPatchHandler) Mutate(
4966
ctx context.Context,
5067
obj *unstructured.Unstructured,
@@ -62,11 +79,7 @@ func (h *etcdPatchHandler) Mutate(
6279
h.variableName,
6380
h.variableFieldPath...,
6481
)
65-
if err != nil {
66-
if variables.IsNotFoundError(err) {
67-
log.V(5).Info("etcd variable not defined")
68-
return nil
69-
}
82+
if err != nil && !variables.IsNotFoundError(err) {
7083
return err
7184
}
7285

@@ -95,10 +108,25 @@ func (h *etcdPatchHandler) Mutate(
95108
}
96109

97110
localEtcd := obj.Spec.Template.Spec.KubeadmConfigSpec.ClusterConfiguration.Etcd.Local
98-
if etcd.Image != nil && etcd.Image.Tag != "" {
111+
112+
if localEtcd.ExtraArgs == nil {
113+
localEtcd.ExtraArgs = make(map[string]string, len(defaultEtcdExtraArgs))
114+
}
115+
116+
for k, v := range defaultEtcdExtraArgs {
117+
if _, ok := localEtcd.ExtraArgs[k]; !ok {
118+
localEtcd.ExtraArgs[k] = v
119+
}
120+
}
121+
122+
if etcd.Image == nil {
123+
return nil
124+
}
125+
126+
if etcd.Image.Tag != "" {
99127
localEtcd.ImageTag = etcd.Image.Tag
100128
}
101-
if etcd.Image != nil && etcd.Image.Repository != "" {
129+
if etcd.Image.Repository != "" {
102130
localEtcd.ImageRepository = etcd.Image.Repository
103131
}
104132

pkg/handlers/generic/mutation/etcd/inject_test.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,12 @@ var _ = Describe("Generate etcd patches", func() {
5656
"local": map[string]interface{}{
5757
"imageRepository": "my-registry.io/my-org/my-repo",
5858
"imageTag": "v3.5.99_custom.0",
59+
"extraArgs": map[string]interface{}{
60+
"auto-tls": "false",
61+
"peer-auto-tls": "false",
62+
"cipher-suites": "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", //nolint:lll // Long list of ciphers ok in test.
63+
"tls-min-version": "TLS1.2",
64+
},
5965
},
6066
},
6167
),
@@ -85,6 +91,12 @@ var _ = Describe("Generate etcd patches", func() {
8591
map[string]interface{}{
8692
"local": map[string]interface{}{
8793
"imageRepository": "my-registry.io/my-org/my-repo",
94+
"extraArgs": map[string]interface{}{
95+
"auto-tls": "false",
96+
"peer-auto-tls": "false",
97+
"cipher-suites": "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", //nolint:lll // Long list of ciphers ok in test.
98+
"tls-min-version": "TLS1.2",
99+
},
88100
},
89101
},
90102
),
@@ -114,6 +126,12 @@ var _ = Describe("Generate etcd patches", func() {
114126
map[string]interface{}{
115127
"local": map[string]interface{}{
116128
"imageTag": "v3.5.99_custom.0",
129+
"extraArgs": map[string]interface{}{
130+
"auto-tls": "false",
131+
"peer-auto-tls": "false",
132+
"cipher-suites": "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", //nolint:lll // Long list of ciphers ok in test.
133+
"tls-min-version": "TLS1.2",
134+
},
117135
},
118136
},
119137
),

0 commit comments

Comments
 (0)