CIS Kubernetes 基準

本文將介紹 CIS Kubernetes 基準,說明如何稽核基準的相容性,以及在您無法自行實作建議時,Google Distributed Cloud (GDC) 氣隙設定會設定哪些項目。

關於 CIS 基準

網際網路安全中心 (CIS) 會發布最佳做法基準,提供安全性建議。CIS Kubernetes 基準提供一系列建議,協助您設定 Kubernetes 來支援強大的安全防護機制。基準與特定 Kubernetes 版本相關。CIS Kubernetes 基準是為開放原始碼 Kubernetes 發行版本編寫,盡可能適用於各種發行版本。

存取基準

如要查看 CIS Kubernetes 基準,請前往 CIS 網站

建議等級

下表說明 CIS Kubernetes 基準中的建議等級。

等級 說明
1 級

建議具有下列一或多項特徵:

  • 實用且謹慎。
  • 明確說明安全優勢。
  • 請勿以不當方式限制技術的實用性。
  • 第 2 級

    擴充第 1 級設定檔。

    建議具有下列一或多項特徵:

  • 適用於講求安全的環境或用途。
  • 做為縱深防禦措施。
  • 可能會對技術的實用性或效能造成負面影響。
  • 評估狀態

    每項建議都會附上評估狀態。評估狀態會指出特定建議是否可自動套用,或需要手動步驟才能導入。這兩種狀態同樣重要,且會根據下表定義判斷及支援。

    版本

    評估作業會參考下列版本:

    Bare Metal 適用的 GDC 版本 Kubernetes 版本 CIS Kubernetes 基準版本
    1.30 1.30.9 v0.10.4

    GDC 氣隙 Kubernetes 叢集的狀態

    # 建議 等級 狀態
    1 控制層安全性設定
    1.1 控制層節點設定檔
    1.1.1 確認 API 伺服器 Pod 規格檔案權限設為 600 或更嚴格的權限 (自動) 第 1 級 通過
    1.1.2 確保 API 伺服器 Pod 規格檔案擁有權已設為 root:root (自動) 第 1 級 通過
    1.1.3 確保控制器管理員 Pod 規格檔案權限設為 600 或更嚴格的權限 (自動) 第 1 級 通過
    1.1.4 確認控制器管理員 Pod 規格檔案擁有權已設為 root:root (自動) 第 1 級 通過
    1.1.5 確認排程器 Pod 規格檔案權限設為 600 或更嚴格的權限 (自動) 第 1 級 通過
    1.1.6 確認排程器 Pod 規格檔案擁有權已設為 root:root (自動) 第 1 級 通過
    1.1.7 確保 etcd Pod 規格檔案權限設為 600 或更嚴格 (自動) 第 1 級 通過
    1.1.8 確認 etcd Pod 規格檔案擁有權已設為 root:root (自動) 第 1 級 通過
    1.1.9 確認容器網路介面檔案權限設為 600 或更嚴格的權限 (手動) 第 1 級 警告
    1.1.10 確保容器網路介面檔案擁有權設為 root:root (手動) 第 1 級 警告
    1.1.11 確認 etcd 資料目錄權限設為 700 或更嚴格的權限 (自動) 第 1 級 通過
    1.1.12 確保 etcd 資料目錄擁有權設為 etcd:etcd (自動) 第 1 級 失敗
    1.1.13 確保預設管理憑證檔案權限設為 600 (自動) 第 1 級 通過
    1.1.14 確保預設管理憑證檔案擁有權設為 root:root (自動) 第 1 級 通過
    1.1.15 確認 scheduler.conf 檔案權限設為 600 或更嚴格的權限 (自動) 第 1 級 通過
    1.1.16 確認 scheduler.conf 檔案擁有權已設為 root:root (自動) 第 1 級 失敗
    1.1.17 確認 controller-manager.conf 檔案權限設為 600 或更嚴格的權限 (自動) 第 1 級 通過
    1.1.18 確認 controller-manager.conf 檔案擁有權已設為 root:root (自動) 第 1 級 失敗
    1.1.19 確保 Kubernetes PKI 目錄和檔案擁有權已設為 root:root (自動) 第 1 級 失敗
    1.1.20 確認 Kubernetes PKI 憑證檔案權限設為 600 或更嚴格的權限 (手動) 第 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 確保已設定准入控制外掛程式 ServiceAccount (自動) 第 1 級 通過
    1.2.13 確保已設定准入控制外掛程式 NamespaceLifecycle (自動) 第 1 級 通過
    1.2.14 確保已設定准入控制外掛程式 NodeRestriction (自動) 第 1 級 通過
    1.2.15 確認 --profiling 引數已設為 false (自動) 第 1 級 通過
    1.2.16 確認已設定 --audit-log-path 引數 (自動) 第 1 級 通過
    1.2.17 確認 --audit-log-maxage 引數已設為 30 或適當的值 (自動) 第 1 級 通過
    1.2.18 確認 --audit-log-maxbackup 引數已設為 10 或適當的值 (自動) 第 1 級 通過
    1.2.19 確認 --audit-log-maxsize 引數已設為 100 或適當的值 (自動) 第 1 級 通過
    1.2.20 確認 --request-timeout 引數已適當設定 (手動) 第 1 級 警告
    1.2.21 確認 --service-account-lookup 引數已設為 true (自動) 第 1 級 通過
    1.2.22 確認 --service-account-key-file 引數已適當設定 (自動) 第 1 級 通過
    1.2.23 確認 --etcd-certfile--etcd-keyfile 引數已適當設定 (自動) 第 1 級 通過
    1.2.24 確認 --tls-cert-file--tls-private-key-file 引數已適當設定 (自動) 第 1 級 通過
    1.2.25 確認 --client-ca-file 引數已適當設定 (自動) 第 1 級 通過
    1.2.26 確認 --etcd-cafile 引數已適當設定 (自動) 第 1 級 通過
    1.2.27 確認 --encryption-provider-config 引數已適當設定 (手動) 第 1 級 通過
    1.2.28 確認加密服務供應商設定正確無誤 (手動) 第 1 級 通過
    1.2.29 確保 API 伺服器只使用高強度加密密碼 (手動) 第 1 級 通過
    1.3 控制器管理員
    1.3.1 確認 --terminated-pod-gc-threshold 引數已適當設定 (手動) 第 1 級 通過
    1.3.2 確認 --profiling argument 已設為 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 級 失敗

    稽核基準

    如要瞭解如何稽核各項建議,請參閱相關的 CIS 基準。不過,您可能會想自動執行部分檢查,簡化環境中這些控制項的驗證程序。您可以使用下列工具進行這項作業。

    自動稽核 CIS Kubernetes 基準

    您可以使用開放原始碼工具 kube-bench,根據 CIS Kubernetes 基準測試叢集設定。

    請務必指定適當版本。例如:

    kube-bench --benchmark BENCHMARK_VERSION
    

    BENCHMARK_VERSION 替換為您用來評估叢集的 CIS Kubernetes 基準版本。

    如要執行特定 CIS 基準部分 (例如主節點、節點或 etcd),請使用 run --targets 指令。例如:

    kube-bench run --targets master,node
    

    詳情請參閱 kube-bench 說明文件,瞭解如何執行 kube-bench,以及指令和標記