本頁面將介紹 CIS Kubernetes Benchmark,提供評估結果,並說明 Google Distributed Cloud Connected 如何解決建議事項。
CIS 基準
網際網路安全中心 (CIS) 會發布最佳做法基準,提供安全性建議。CIS Kubernetes 基準提供一系列建議,協助您設定 Kubernetes 來支援功能強大的安全防護措施。基準與特定 Kubernetes 版本相關。CIS Kubernetes 基準是為開放原始碼 Kubernetes 發行版本編寫,盡可能適用於各種發行版本。
版本
下表列出用於執行本文所述評估作業的 Distributed Cloud Connected、Kubernetes 和 CIS Kubernetes Benchmark 版本:
| Distributed Cloud connected 版本 | Kubernetes 版本 | CIS Kubernetes 基準版本 |
|---|---|---|
| 1.4.0 - 本機控制層 | 1.25 | 1.70 |
存取基準
如要查看 CIS Kubernetes 基準,請前往 CIS 網站。
建議等級
在 CIS Kubernetes 基準中,
| 等級 | 說明 |
|---|---|
| 1 級 | 最佳化建議的目標: |
| 第 2 級 | 擴充第 1 級設定檔。 建議具有下列一或多項特徵: |
評估作業狀態
每項建議都會附上評估狀態。評估狀態會指出特定最佳化建議是否可自動套用,或需要手動步驟才能導入。這兩種狀態同樣重要,且會根據下列定義判斷和支援:
| 計分 | 說明 |
|---|---|
| 自動 | 代表技術控制項的評估建議,可完全自動化並驗證為通過/失敗狀態。建議會提供導入自動化功能所需的資訊。 |
| 手動 | 代表無法完全自動評估的技術控制項建議,需要執行所有或部分手動步驟,才能驗證設定的狀態是否符合預期。預期狀態可能因環境而異。 |
Distributed Cloud connected 本機控制層叢集的狀態
| # | 建議 | 等級 | 狀態 |
|---|---|---|---|
| 1 | 控制層安全性設定 | ||
| 1.1 | 控制層節點設定檔 | ||
| 1.1.1 | 確認 API 伺服器 Pod 規格檔案權限設為 644 或更嚴格的權限 (自動) |
第 1 級 | 通過 |
| 1.1.2 | 確保 API 伺服器 Pod 規格檔案擁有權已設為 root:root (自動) |
第 1 級 | 通過 |
| 1.1.3 | 確認控制器管理員 Pod 規格檔案權限設為 644 或更嚴格的權限 (自動) |
第 1 級 | 通過 |
| 1.1.4 | 確認控制項管理員 Pod 規格檔案擁有權已設為 root:root (自動) |
第 1 級 | 通過 |
| 1.1.5 | 確認排程器 Pod 規格檔案權限設為 644 或更嚴格的權限 (自動) |
第 1 級 | 通過 |
| 1.1.6 | 確認排程器 Pod 規格檔案擁有權已設為 root:root (自動) |
第 1 級 | 通過 |
| 1.1.7 | 確保 etcd Pod 規格檔案權限設為 644 或更嚴格的權限 (自動) |
第 1 級 | 通過 |
| 1.1.8 | 確認 etcd Pod 規格檔案擁有權已設為 root:root (自動) |
第 1 級 | 通過 |
| 1.1.9 | 確保容器網路介面檔案權限設為 644 或更嚴格的權限 (手動) |
第 1 級 | 等效控制措施 |
| 1.1.10 | 確保容器網路介面檔案擁有權設為 root:root (手動) |
第 1 級 | 通過 |
| 1.1.11 | 確認 etcd 資料目錄權限設為 700 或更嚴格的權限 (自動) |
第 1 級 | 等效控制措施 |
| 1.1.12 | 確保 etcd 資料目錄擁有權設為 etcd:etcd (自動) |
第 1 級 | 等效控制措施 |
| 1.1.13 | 確認 admin.conf 檔案權限設為 600 或更嚴格的權限 (自動) |
第 1 級 | 通過 |
| 1.1.14 | 確認 admin.conf 檔案擁有權已設為 root:root (自動) |
第 1 級 | 通過 |
| 1.1.15 | 確認 scheduler.conf 檔案權限設為 644 或更嚴格的權限 (自動) |
第 1 級 | 通過 |
| 1.1.16 | 確認 scheduler.conf 檔案擁有權已設為 root:root (自動) |
第 1 級 | 等效控制措施 |
| 1.1.17 | 確認 controller-manager.conf 檔案權限設為 644 或更嚴格的權限 (自動) |
第 1 級 | 通過 |
| 1.1.18 | 確認 controller-manager.conf 檔案擁有權已設為 root:root (自動) |
第 1 級 | 等效控制措施 |
| 1.1.19 | 確保 Kubernetes PKI 目錄和檔案擁有權已設為 root:root (自動) |
第 1 級 | 等效控制措施 |
| 1.1.20 | 確認 Kubernetes PKI 憑證檔案權限設為 644 或更嚴格的權限 (手動) |
第 1 級 | 等效控制措施 |
| 1.1.21 | 確認 Kubernetes PKI 金鑰檔案權限已設為 600 (手動) |
第 1 級 | 通過 |
| 1.2 | API 伺服器 | ||
| 1.2.1 | 確認 --anonymous-auth 引數已設為 false (手動) |
第 1 級 | 通過 |
| 1.2.2 | 確認未設定 --token-auth-file 參數 (自動) |
第 1 級 | 通過 |
| 1.2.3 | 確認 --DenyServiceExternalIPs 未設為「自動」 |
第 1 級 | 失敗 |
| 1.2.4 | 確認 --kubelet-client-certificate 和 --kubelet-client-key 引數已適當設定 (自動) |
第 1 級 | 通過 |
| 1.2.5 | 確認 --kubelet-certificate-authority 引數已適當設定 (自動) |
第 1 級 | 通過 |
| 1.2.6 | 確保 --authorization-mode 引數未設為 AlwaysAllow (自動) |
第 1 級 | 通過 |
| 1.2.7 | 確保 --authorization-mode 引數包含節點 (自動) |
第 1 級 | 通過 |
| 1.2.8 | 確認 --authorization-mode 引數包含 RBAC (自動) |
第 1 級 | 失敗 |
| 1.2.9 | 確認已設定准入控制外掛程式 EventRateLimit (手動) | 第 1 級 | 通過 |
| 1.2.10 | 確保未設定 AlwaysAdmit 准入控制外掛程式 (自動) | 第 1 級 | 通過 |
| 1.2.11 | 確認已設定 AlwaysPullImages 准入控制外掛程式 (手動) | 第 1 級 | 失敗 |
| 1.2.12 | 如果未使用 PodSecurityPolicy,請確保已設定許可控制外掛程式 SecurityContextDeny (手動) | 第 1 級 | 警告 |
| 1.2.13 | 確保已設定許可控制外掛程式 ServiceAccount (自動) | 第 1 級 | 通過 |
| 1.2.14 | 確保已設定准入控制外掛程式 NamespaceLifecycle (自動) | 第 1 級 | 通過 |
| 1.2.15 | 確保已設定准入控制外掛程式 NodeRestriction (自動) | 第 1 級 | 通過 |
| 1.2.16 | 確認 --secure-port 引數未設為 0 (自動) |
第 1 級 | 通過 |
| 1.2.17 | 確認 --profiling 引數已設為 false (自動) |
第 1 級 | 通過 |
| 1.2.18 | 確認已設定 --audit-log-path 引數 (自動) |
第 1 級 | 失敗 |
| 1.2.19 | 確認 --audit-log-maxage 引數已設為 30 或適當值 (自動) |
第 1 級 | 失敗 |
| 1.2.20 | 確認 --audit-log-maxbackup 引數已設為 10 或適當值 (自動) |
第 1 級 | 失敗 |
| 1.2.21 | 確認 --audit-log-maxsize 引數已設為 100 或適當值 (自動) |
第 1 級 | 失敗 |
| 1.2.22 | 確認 --request-timeout 引數已適當設定 (手動) |
第 1 級 | 失敗 |
| 1.2.23 | 確認 --service-account-lookup 引數設為 true (自動) |
第 1 級 | 通過 |
| 1.2.24 | 確認 --service-account-key-file 引數已適當設定 (自動) |
第 1 級 | 通過 |
| 1.2.25 | 確認 --etcd-certfile 和 --etcd-keyfile 引數已設為適當值 (自動) |
第 1 級 | 通過 |
| 1.2.26 | 確認 --tls-cert-file 和 --tls-private-key-file 引數已設為適當值 (自動) |
第 1 級 | 通過 |
| 1.2.27 | 確認 --client-ca-file 引數已適當設定 (自動) |
第 1 級 | 通過 |
| 1.2.28 | 確認 --etcd-cafile 引數已適當設定 (自動) |
第 1 級 | 通過 |
| 1.2.29 | 確認 --encryption-provider-config 引數已適當設定 (手動) |
第 1 級 | 通過 |
| 1.2.30 | 確認加密服務供應商設定正確無誤 (手動) | 第 1 級 | 通過 |
| 1.2.31 | 確保 API 伺服器只使用強加密密碼 (手動) | 第 1 級 | 通過 |
| 1.3 | 控制器管理員 | ||
| 1.3.1 | 確認 --terminated-pod-gc-threshold 引數已適當設定 (手動) |
第 1 級 | 通過 |
| 1.3.2 | 確認 --profiling 引數已設為 false (自動) |
第 1 級 | 通過 |
| 1.3.3 | 確認 --use-service-account-credentials 引數設為 true (自動) |
第 1 級 | 通過 |
| 1.3.4 | 確認 --service-account-private-key-file 引數已適當設定 (自動) |
第 1 級 | 通過 |
| 1.3.5 | 確認 --root-ca-file 引數已適當設定 (自動) |
第 1 級 | 通過 |
| 1.3.6 | 確認 RotateKubeletServerCertificate 引數設為 true (自動) | 第 2 級 | 通過 |
| 1.3.7 | 確認 --bind-address 引數已設為 127.0.0.1 (自動) |
第 1 級 | 通過 |
| 1.4 | 排程器 | ||
| 1.4.1 | 確認 --profiling 引數已設為 false (自動) |
第 1 級 | 通過 |
| 1.4.2 | 確認 --bind-address 引數已設為 127.0.0.1 (自動) |
第 1 級 | 通過 |
| 2 | ** etcd 節點設定** |
||
| 2.1 | 確認 --cert-file 和 --key-file 引數已設為適當值 (自動) |
第 1 級 | 通過 |
| 2.2 | 確認 --client-cert-auth 引數設為 true (自動) |
第 1 級 | 通過 |
| 2.3 | 確認 --auto-tls 引數未設為 true (自動) |
第 1 級 | 通過 |
| 2.4 | 確認 --peer-cert-file 和 --peer-key-file 引數已設為適當值 (自動) |
第 1 級 | 通過 |
| 2.5 | 確認 --peer-client-cert-auth 引數設為 true (自動) |
第 1 級 | 通過 |
| 2.6 | 確認 --peer-auto-tls 引數未設為 true (自動) |
第 1 級 | 通過 |
| 2.7 | 確保 etcd 使用專屬的憑證授權單位 (手動) | 第 2 級 | 通過 |
| 3 | 控制層設定 | ||
| 3.1 | 驗證和授權 | ||
| 3.1.1 | 不應為使用者啟用用戶端憑證驗證功能 (手動) | 第 2 級 | 通過 |
| 3.2 | Logging | ||
| 3.2.1 | 確保已建立最低稽核政策 (手動) | 第 1 級 | 通過 |
| 3.2.2 | 確保稽核政策涵蓋主要安全疑慮 (手動) | 第 2 級 | 失敗 |
| 4 | 工作站節點安全設定 | ||
| 4.1 | 工作站節點設定檔 | ||
| 4.1.1 | 確認 kubelet 服務檔案權限設為 644 或更嚴格的權限 (自動) |
第 1 級 | 失敗 |
| 4.1.2 | 確保 kubelet 服務檔案擁有權已設為 root:root (自動) |
第 1 級 | 通過 |
| 4.1.3 | 如果 Proxy kubeconfig 檔案存在,請確保權限設為 644 或更嚴格 (手動) |
第 1 級 | 通過 |
| 4.1.4 | 如果存在 Proxy kubeconfig 檔案,請確認擁有權設為 root:root (手動) |
第 1 級 | 通過 |
| 4.1.5 | 確認 --kubeconfig kubelet.conf 檔案權限設為 644 或更嚴格的權限 (自動) |
第 1 級 | 通過 |
| 4.1.6 | 確認 --kubeconfig kubelet.conf 檔案擁有權已設為 root:root (自動) |
第 1 級 | 通過 |
| 4.1.7 | 確認憑證授權單位檔案權限設為 644 或更嚴格的權限 (手動) |
第 1 級 | 失敗 |
| 4.1.8 | 確認用戶端憑證授權單位檔案擁有權已設為 root:root (手動) |
第 1 級 | 通過 |
| 4.1.9 | 確認 kubelet --config 設定檔的權限設為 644 或更嚴格的權限 (自動) |
第 1 級 | 失敗 |
| 4.1.10 | 確保 kubelet --config 設定檔擁有權已設為 root:root (自動) |
第 1 級 | 通過 |
| 4.2 | Kubelet | ||
| 4.2.1 | 確認 --anonymous-auth 引數已設為 false (自動) |
第 1 級 | 通過 |
| 4.2.2 | 確保 --authorization-mode 引數未設為 AlwaysAllow (自動) |
第 1 級 | 通過 |
| 4.2.3 | 確認 --client-ca-file 引數已適當設定 (自動) |
第 1 級 | 通過 |
| 4.2.4 | 確認 --read-only-port 引數已設為 0 (手動) |
第 1 級 | 失敗 |
| 4.2.5 | 確認 --streaming-connection-idle-timeout 引數未設為 0 (手動) |
第 1 級 | 通過 |
| 4.2.6 | 確認 --protect-kernel-defaults 引數設為 true (自動) |
第 1 級 | 通過 |
| 4.2.7 | 確認 --make-iptables-util-chains 引數設為 true (自動) |
第 1 級 | 通過 |
| 4.2.8 | 確認未設定 --hostname-override 引數 (手動) |
第 2 級 | 通過 |
| 4.2.9 | 確認 --event-qps 引數已設為 0 或可確保擷取適當事件的層級 (手動) |
第 1 級 | 等效控制措施 |
| 4.2.10 | 確認 --tls-cert-file 和 --tls-private-key-file 引數已適當設定 (手動) |
第 1 級 | 通過 |
| 4.2.11 | 確認 --rotate-certificates 引數未設為 false (自動) |
第 1 級 | 通過 |
| 4.2.12 | 確認 RotateKubeletServerCertificate 引數已設為 true (手動) | 第 1 級 | 通過 |
| 4.2.13 | 確保 Kubelet 只使用強效加密密碼 (手動) | 第 1 級 | 失敗 |
Distributed Cloud connected 本機控制層叢集的失敗和對等控制項
| # | 建議 | 等級 | 狀態 | 值 | 原因 |
|---|---|---|---|---|---|
| 1 | 控制層安全性設定 | ||||
| 1.1.9 | 確保容器網路介面檔案權限設為 644 或更嚴格的權限 (手動) |
第 1 級 | 等效控制措施 | 755 |
無 |
| 1.1.11 | 確認 etcd 資料目錄權限設為 700 或更嚴格的權限 (自動) |
第 1 級 | 等效控制措施 | 755 |
etcd 資料目錄具有預設的 755 權限,但其子目錄使用 700。 |
| 1.1.12 | 確認 etcd 資料目錄擁有權已設為 etcd:etcd (自動) |
第 1 級 | 等效控制措施 | 2003:2003 |
由於採用無根控管平面,因此 etcd 資料目錄 /var/lib/etcd 由 2003:2003 擁有,可提升安全性。 |
| 1.1.16 | 確認 scheduler.conf 檔案擁有權已設為 root:root (自動) |
第 1 級 | 等效控制措施 | 2002:2002 |
由於採用無根控制層來提升安全性,因此 scheduler.conf 由 2002:2002 擁有。 |
| 1.1.18 | 確認 controller-manager.conf 檔案擁有權已設為 root:root (自動) |
第 1 級 | 等效控制措施 | 2001:2001 |
由於採用無根控制層來提升安全性,因此 controller-manager.conf 由 2001:2001 擁有。 |
| 1.1.19 | 確保 Kubernetes PKI 目錄和檔案擁有權已設為 root:root (自動) |
第 1 級 | 等效控制措施 | 因解決方案而異 | PKI 目錄 /etc/kubernetes/pki 由 root:root 擁有,目錄中的檔案則由不同擁有者擁有。這是因為採用無根控管平面,可提升安全性。 |
| 1.1.20 | 確認 Kubernetes PKI 憑證檔案權限設為 644 或更嚴格的權限 (手動) |
第 1 級 | 等效控制措施 | 644 |
這是因為採用無根控管平面,可提升安全性。 |
| 1.2 | API 伺服器 | ||||
| 1.2.3 | 確認 --DenyServiceExternalIPs 未設為「自動」 |
第 1 級 | 失敗 | ||
| 1.2.9 | 確認 --authorization-mode 引數包含 RBAC (自動) |
第 1 級 | 失敗 | 事件速率限制許可控制器是 Kubernetes Alpha 版功能。Google Distributed Cloud 不支援非正式發布版功能。 | |
| 1.2.11 | 確認未設定准入控制外掛程式 AlwaysAdmit (自動) |
第 1 級 | 失敗 | ||
| 1.2.12 | 確認已設定准入控制外掛程式 AlwaysPullImages (手動) |
第 1 級 | 失敗 | AlwaysPullImages 准入控制器可為非合作式多租戶叢集中的私人登錄檔映像檔提供部分保護,但代價是容器登錄檔會成為在整個叢集建立新 Pod 的單一故障點。Distributed Cloud 叢集不會啟用 AlwaysPullImages 准入控制器,因此叢集管理員必須自行實作准入政策,以做出取捨。 |
|
| 1.2.18 | 確認已設定 --audit-log-path 引數 (自動) |
第 1 級 | 失敗 | Distributed Cloud 會擷取稽核記錄,但不會使用這個旗標進行稽核。詳情請參閱「稽核記錄」。 | |
| 1.2.19 | 確認 --audit-log-maxage 引數已設為 30 或適當值 (自動) |
第 1 級 | 失敗 | Distributed Cloud 會擷取稽核記錄,但不會使用這個旗標進行稽核。詳情請參閱「稽核記錄」。 | |
| 1.2.20 | 確認 --audit-log-maxbackup 引數已設為 10 或適當值 (自動) |
第 1 級 | 失敗 | Distributed Cloud Connected 會擷取稽核記錄,但不會使用這個旗標進行稽核。詳情請參閱「稽核記錄」。 | |
| 1.2.21 | 確認 --audit-log-maxsize 引數已設為 100 或適當值 (自動) |
第 1 級 | 失敗 | Distributed Cloud Connected 會擷取稽核記錄,但不會使用這個旗標進行稽核。詳情請參閱「稽核記錄」。 | |
| 1.2.22 | 確認 --request-timeout 引數已適當設定 (手動) |
第 1 級 | 失敗 | Distributed Cloud Connected 會擷取稽核記錄,但不會使用這個旗標進行稽核。詳情請參閱「稽核記錄」。 | |
| 3 | 控制層設定 | ||||
| 3.2.2 | 確保稽核政策涵蓋主要安全疑慮 (手動) | 第 2 級 | 失敗 | ||
| 4 | 工作站節點安全設定 | ||||
| 4.1.1 | 確認 kubelet 服務檔案權限設為 644 或更嚴格的權限 (自動) |
第 1 級 | 失敗 | 755 |
|
| 4.1.7 | 確認憑證授權單位檔案權限設為 644 或更嚴格的權限 (手動) |
第 1 級 | 失敗 | ||
| 4.1.9 | 確認 kubelet --config 設定檔的權限設為 644 或更嚴格的權限 (自動) |
第 1 級 | 失敗 | 644 |
|
| 4.2.4 | 確認 --read-only-port 引數已設為 0 (手動) |
第 1 級 | 失敗 | Distributed Cloud connected 叢集會將 --read-only-port 引數設為 10255,以收集 kubelet 指標。 |
|
| 4.2.9 | 確認 --event-qps 引數已設為 0 或可確保擷取適當事件的層級 (手動) |
第 1 級 | 等效控制措施 | Distributed Cloud 叢集會使用 –rotate-server-certificates 旗標管理 kubelet 伺服器 TLS。 |
|
| 4.2.13 | 確保 Kubelet 只使用強效加密密碼 (手動) | 第 1 級 | 失敗 |