Skip to content

Commit 3a871a3

Browse files
ApsTomarneogopher
authored andcommitted
etcd cis benchmark test remediation
1 parent 293a6e0 commit 3a871a3

File tree

1 file changed

+220
-1
lines changed
  • vcluster/learn-how-to/hardening-guide

1 file changed

+220
-1
lines changed

vcluster/learn-how-to/hardening-guide/etcd.mdx

Lines changed: 220 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,223 @@
22
title: Self assessment guide - ETCD configuration
33
sidebar_label: Etcd
44
description: Self assessment guide to validate ETCD configuration
5-
---
5+
---
6+
7+
This section covers security areas related to etcd configuration, including:
8+
- Encryption of sensitive data at rest on server, applications and in transit.
9+
10+
_Assessment focus for vCluster_: Key areas include verifying correct authentication mechanisms are used and safeguarding
11+
the data at rest and in transit via TLS encryption.
12+
13+
## 2.1 Ensure that the --cert-file and --key-file arguments are set as appropriate (Automated)
14+
15+
**Result:** PASS
16+
17+
**Remediation:** Run the audit command mentioned below to verify that `--cert-file` and `--key-file` arguments are
18+
appropriately set.
19+
20+
**Audit:**
21+
```kubectl exec -n <vCluster-namespace> <vCluster-pod-name> -- ps -ef | grep etcd```
22+
23+
**Expected Result:**
24+
```
25+
'--cert-file' and '--key-file' arguments are appropriately set
26+
```
27+
28+
**Returned Value:**
29+
```bash
30+
31 root 2:41 etcd --data-dir=/data/etcd --advertise-client-urls=https://emb-0.emb-headless.emb:2379
31+
--initial-advertise-peer-urls=https://emb-0.emb-headless.emb:2380 --initial-cluster-token=vcluster
32+
--listen-client-urls=https://0.0.0.0:2379 --listen-metrics-urls=http://0.0.0.0:2381 --listen-peer-urls=https://0.0.0.0:2380
33+
--name=emb-0 --heartbeat-interval=500 --election-timeout=5000 --experimental-watch-progress-notify-interval=5s
34+
--experimental-peer-skip-client-san-verification --log-level=info --snapshot-count=10000 --log-outputs=stderr
35+
--logger=zap --client-cert-auth=true --cert-file=/data/pki/etcd/server.crt --key-file=/data/pki/etcd/server.key
36+
--peer-client-cert-auth=true --peer-key-file=/data/pki/etcd/peer.key --peer-cert-file=/data/pki/etcd/peer.crt
37+
--peer-trusted-ca-file=/data/pki/etcd/ca.crt --trusted-ca-file=/data/pki/etcd/ca.crt --initial-cluster=emb-0=
38+
https://emb-0.emb-headless.emb:2380 --initial-cluster-state=new --force-new-cluster
39+
```
40+
41+
## 2.2 Ensure that the --client-cert-auth argument is set to true (Automated)
42+
43+
**Result:** PASS
44+
45+
**Remediation:** Run the audit command mentioned below to verify that `--client-cert-auth` is set to `true`.
46+
47+
**Audit:**
48+
```kubectl exec -n <vCluster-namespace> <vCluster-pod-name> -- ps -ef | grep etcd```
49+
50+
**Expected Result:**
51+
```
52+
'--client-cert-auth' is set to 'true'
53+
```
54+
55+
**Returned Value:**
56+
```bash
57+
31 root 2:41 etcd --data-dir=/data/etcd --advertise-client-urls=https://emb-0.emb-headless.emb:2379
58+
--initial-advertise-peer-urls=https://emb-0.emb-headless.emb:2380 --initial-cluster-token=vcluster
59+
--listen-client-urls=https://0.0.0.0:2379 --listen-metrics-urls=http://0.0.0.0:2381 --listen-peer-urls=https://0.0.0.0:2380
60+
--name=emb-0 --heartbeat-interval=500 --election-timeout=5000 --experimental-watch-progress-notify-interval=5s
61+
--experimental-peer-skip-client-san-verification --log-level=info --snapshot-count=10000 --log-outputs=stderr
62+
--logger=zap --client-cert-auth=true --cert-file=/data/pki/etcd/server.crt --key-file=/data/pki/etcd/server.key
63+
--peer-client-cert-auth=true --peer-key-file=/data/pki/etcd/peer.key --peer-cert-file=/data/pki/etcd/peer.crt
64+
--peer-trusted-ca-file=/data/pki/etcd/ca.crt --trusted-ca-file=/data/pki/etcd/ca.crt --initial-cluster=emb-0=
65+
https://emb-0.emb-headless.emb:2380 --initial-cluster-state=new --force-new-cluster
66+
```
67+
68+
## 2.3 Ensure that the --auto-tls argument is not set to true (Automated)
69+
70+
**Result:** PASS
71+
72+
**Remediation:** Run the audit command mentioned below to verify that `--auto-tls` argument does not exist.
73+
74+
**Audit:**
75+
```kubectl exec -n <vCluster-namespace> <vCluster-pod-name> -- ps -ef | grep etcd```
76+
77+
**Expected Result:**
78+
```
79+
'--auto-tls' argument does not exist
80+
```
81+
82+
**Returned Value:**
83+
```bash
84+
31 root 2:41 etcd --data-dir=/data/etcd --advertise-client-urls=https://emb-0.emb-headless.emb:2379
85+
--initial-advertise-peer-urls=https://emb-0.emb-headless.emb:2380 --initial-cluster-token=vcluster
86+
--listen-client-urls=https://0.0.0.0:2379 --listen-metrics-urls=http://0.0.0.0:2381 --listen-peer-urls=https://0.0.0.0:2380
87+
--name=emb-0 --heartbeat-interval=500 --election-timeout=5000 --experimental-watch-progress-notify-interval=5s
88+
--experimental-peer-skip-client-san-verification --log-level=info --snapshot-count=10000 --log-outputs=stderr
89+
--logger=zap --client-cert-auth=true --cert-file=/data/pki/etcd/server.crt --key-file=/data/pki/etcd/server.key
90+
--peer-client-cert-auth=true --peer-key-file=/data/pki/etcd/peer.key --peer-cert-file=/data/pki/etcd/peer.crt
91+
--peer-trusted-ca-file=/data/pki/etcd/ca.crt --trusted-ca-file=/data/pki/etcd/ca.crt --initial-cluster=emb-0=
92+
https://emb-0.emb-headless.emb:2380 --initial-cluster-state=new --force-new-cluster
93+
```
94+
95+
## 2.4 Ensure that the --peer-cert-file and --peer-key-file arguments are set as appropriate (Automated)
96+
97+
**Result:** PASS
98+
99+
**Remediation:** Run the audit command mentioned below to verify that `--peer-cert-file` and `--peer-key-file` are
100+
appropriately set .
101+
102+
**Audit:**
103+
```kubectl exec -n <vCluster-namespace> <vCluster-pod-name> -- ps -ef | grep etcd```
104+
105+
**Expected Result:**
106+
```
107+
'--peer-cert-file' and '--peer-key-file' arguments are appropriately set
108+
```
109+
110+
**Returned Value:**
111+
```bash
112+
31 root 2:41 etcd --data-dir=/data/etcd --advertise-client-urls=https://emb-0.emb-headless.emb:2379
113+
--initial-advertise-peer-urls=https://emb-0.emb-headless.emb:2380 --initial-cluster-token=vcluster
114+
--listen-client-urls=https://0.0.0.0:2379 --listen-metrics-urls=http://0.0.0.0:2381 --listen-peer-urls=https://0.0.0.0:2380
115+
--name=emb-0 --heartbeat-interval=500 --election-timeout=5000 --experimental-watch-progress-notify-interval=5s
116+
--experimental-peer-skip-client-san-verification --log-level=info --snapshot-count=10000 --log-outputs=stderr
117+
--logger=zap --client-cert-auth=true --cert-file=/data/pki/etcd/server.crt --key-file=/data/pki/etcd/server.key
118+
--peer-client-cert-auth=true --peer-key-file=/data/pki/etcd/peer.key --peer-cert-file=/data/pki/etcd/peer.crt
119+
--peer-trusted-ca-file=/data/pki/etcd/ca.crt --trusted-ca-file=/data/pki/etcd/ca.crt --initial-cluster=emb-0=
120+
https://emb-0.emb-headless.emb:2380 --initial-cluster-state=new --force-new-cluster
121+
```
122+
123+
## 2.5 Ensure that the --peer-client-cert-auth argument is set to true (Automated)
124+
125+
**Result:** PASS
126+
127+
**Remediation:** Run the audit command mentioned below to verify that `--peer-client-cert-auth` is set to `true`.
128+
129+
**Audit:**
130+
```kubectl exec -n <vCluster-namespace> <vCluster-pod-name> -- ps -ef | grep etcd```
131+
132+
**Expected Result:**
133+
```
134+
'--peer-client-cert-auth' is set to 'true'
135+
```
136+
137+
**Returned Value:**
138+
```bash
139+
31 root 2:41 etcd --data-dir=/data/etcd --advertise-client-urls=https://emb-0.emb-headless.emb:2379
140+
--initial-advertise-peer-urls=https://emb-0.emb-headless.emb:2380 --initial-cluster-token=vcluster
141+
--listen-client-urls=https://0.0.0.0:2379 --listen-metrics-urls=http://0.0.0.0:2381 --listen-peer-urls=https://0.0.0.0:2380
142+
--name=emb-0 --heartbeat-interval=500 --election-timeout=5000 --experimental-watch-progress-notify-interval=5s
143+
--experimental-peer-skip-client-san-verification --log-level=info --snapshot-count=10000 --log-outputs=stderr
144+
--logger=zap --client-cert-auth=true --cert-file=/data/pki/etcd/server.crt --key-file=/data/pki/etcd/server.key
145+
--peer-client-cert-auth=true --peer-key-file=/data/pki/etcd/peer.key --peer-cert-file=/data/pki/etcd/peer.crt
146+
--peer-trusted-ca-file=/data/pki/etcd/ca.crt --trusted-ca-file=/data/pki/etcd/ca.crt --initial-cluster=emb-0=
147+
https://emb-0.emb-headless.emb:2380 --initial-cluster-state=new --force-new-cluster
148+
```
149+
150+
## 2.6 Ensure that the --peer-auto-tls argument is not set to true (Automated)
151+
152+
**Result:** PASS
153+
154+
**Remediation:** Run the audit command mentioned below to verify that `--peer-auto-tls` argument does not exist.
155+
156+
**Audit:**
157+
```kubectl exec -n <vCluster-namespace> <vCluster-pod-name> -- ps -ef | grep etcd```
158+
159+
**Expected Result:**
160+
```
161+
'--peer-auto-tls' argument does not exist
162+
```
163+
164+
**Returned Value:**
165+
```bash
166+
31 root 2:41 etcd --data-dir=/data/etcd --advertise-client-urls=https://emb-0.emb-headless.emb:2379
167+
--initial-advertise-peer-urls=https://emb-0.emb-headless.emb:2380 --initial-cluster-token=vcluster
168+
--listen-client-urls=https://0.0.0.0:2379 --listen-metrics-urls=http://0.0.0.0:2381 --listen-peer-urls=https://0.0.0.0:2380
169+
--name=emb-0 --heartbeat-interval=500 --election-timeout=5000 --experimental-watch-progress-notify-interval=5s
170+
--experimental-peer-skip-client-san-verification --log-level=info --snapshot-count=10000 --log-outputs=stderr
171+
--logger=zap --client-cert-auth=true --cert-file=/data/pki/etcd/server.crt --key-file=/data/pki/etcd/server.key
172+
--peer-client-cert-auth=true --peer-key-file=/data/pki/etcd/peer.key --peer-cert-file=/data/pki/etcd/peer.crt
173+
--peer-trusted-ca-file=/data/pki/etcd/ca.crt --trusted-ca-file=/data/pki/etcd/ca.crt --initial-cluster=emb-0=
174+
https://emb-0.emb-headless.emb:2380 --initial-cluster-state=new --force-new-cluster
175+
```
176+
177+
## 2.7 Ensure that a unique Certificate Authority is used for etcd (Manual)
178+
179+
**Result:** PASS
180+
181+
**Remediation:** Run the audit command mentioned below to verify that the file referenced by the --client-ca-file
182+
for api-server is different from the --trusted-ca-file used by etcd.
183+
184+
**Audit:**
185+
Run the following command and note the file referenced by '--trusted-ca-file'
186+
```kubectl exec -n <vCluster-namespace> <vCluster-pod-name> -- ps -ef | grep etcd```
187+
188+
**Returned Value:**
189+
```bash
190+
31 root 2:41 etcd --data-dir=/data/etcd --advertise-client-urls=https://emb-0.emb-headless.emb:2379
191+
--initial-advertise-peer-urls=https://emb-0.emb-headless.emb:2380 --initial-cluster-token=vcluster
192+
--listen-client-urls=https://0.0.0.0:2379 --listen-metrics-urls=http://0.0.0.0:2381 --listen-peer-urls=https://0.0.0.0:2380
193+
--name=emb-0 --heartbeat-interval=500 --election-timeout=5000 --experimental-watch-progress-notify-interval=5s
194+
--experimental-peer-skip-client-san-verification --log-level=info --snapshot-count=10000 --log-outputs=stderr
195+
--logger=zap --client-cert-auth=true --cert-file=/data/pki/etcd/server.crt --key-file=/data/pki/etcd/server.key
196+
--peer-client-cert-auth=true --peer-key-file=/data/pki/etcd/peer.key --peer-cert-file=/data/pki/etcd/peer.crt
197+
--peer-trusted-ca-file=/data/pki/etcd/ca.crt --trusted-ca-file=/data/pki/etcd/ca.crt --initial-cluster=emb-0=
198+
https://emb-0.emb-headless.emb:2380 --initial-cluster-state=new --force-new-cluster
199+
```
200+
201+
Now run the following command and note the file referenced by '--client-ca-file'
202+
```kubectl exec -n <vCluster-namespace> <vCluster-pod-name> -- ps -ef | grep apiserver```
203+
204+
**Returned Value:**
205+
```bash
206+
47 root 6:43 /binaries/kube-apiserver --advertise-address=127.0.0.1 --service-cluster-ip-range=10.96.0.0/16
207+
--bind-address=127.0.0.1 --allow-privileged=true --authorization-mode=RBAC --client-ca-file=/data/pki/client-ca.crt
208+
--enable-bootstrap-token-auth=true --etcd-servers=https://127.0.0.1:2379 --etcd-cafile=/data/pki/etcd/ca.crt
209+
--etcd-certfile=/data/pki/apiserver-etcd-client.crt --etcd-keyfile=/data/pki/apiserver-etcd-client.key
210+
--proxy-client-cert-file=/data/pki/front-proxy-client.crt --proxy-client-key-file=/data/pki/front-proxy-client.key
211+
--requestheader-allowed-names=front-proxy-client --requestheader-client-ca-file=/data/pki/front-proxy-ca.crt
212+
--requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group
213+
--requestheader-username-headers=X-Remote-User --secure-port=6443 --service-account-issuer=
214+
https://kubernetes.default.svc.cluster.local --service-account-key-file=/data/pki/sa.pub
215+
--service-account-signing-key-file=/data/pki/sa.key --tls-cert-file=/data/pki/apiserver.crt --tls-private-key-file=
216+
/data/pki/apiserver.key --endpoint-reconciler-type=none --profiling=false
217+
```
218+
219+
**Expected Result:**
220+
```
221+
The file referenced by the --client-ca-file for api-server is different from the --trusted-ca-file
222+
```
223+
224+

0 commit comments

Comments
 (0)