4.21 CIS Kubernetes 基準

網際網路安全中心 ( CIS ) 發佈了 CIS Kubernetes Benchmark,作為具體步驟的架構,以更安全地配置 Kubernetes,並符合各種產業法規的標準。 本文件包含執行 Red Hat OpenShift on IBM Cloud 版本 4.21 的群集的 1.12 CIS Kubernetes 基準結果。 如需詳細資訊或協助瞭解基準,請參閱 使用基準

1 控制平面安全性設定

1.1 控制平面 Node 的設定檔

第 1.1 節 控制平面 Node 配置檔案 效能測試結果
區段 建議: 得分? 層次 結果 責任
1.1.1 確保 API 伺服器 pod 規格檔案權限設定為 600 或更嚴格的權限。 得分 1 通過 IBM
1.1.2 確保 API 伺服器 pod 規格檔案的所有權已設定為 root:root 得分 1 通過 IBM
1.1.3 確保控制器管理員 pod 規格檔案權限設定為 600 或更具限制性。 得分 1 通過 IBM
1.1.4 確保控制器管理員 pod 規格檔案擁有權設為 root:root 得分 1 通過 IBM
1.1.5 確保排程 pod 規格檔案權限設定為 600 或更嚴格的權限。 得分 1 通過 IBM
1.1.6 確保將 scheduler pod specification 檔案的所有權設定為 root:root 得分 1 通過 IBM
1.1.7 確保 etcd pod 規格檔案權限設定為 600 或更嚴格的權限。 得分 1 通過 IBM
1.1.8 確保 etcd pod 規格檔案的所有權設定為 root:root 得分 1 通過 IBM
1.1.9 確保 Container Network Interface 檔案權限設定為 600 或更具限制性。 未得分 1 通過 IBM
1.1.10 確保 Container Network Interface 檔案擁有權設為 root:root 未得分 1 通過 IBM
1.1.11 確保 etcd 資料目錄權限設定為 700 或限制性更高的權限。 得分 1 通過 IBM
1.1.12 確保 etcd 資料目錄的所有權設定為 etcd:etcd 得分 1 通過 IBM
1.1.13 確保預設管理憑證檔案權限設定為 600 得分 1 通過 IBM
1.1.14 確保預設的管理憑證檔案擁有權設為 root:root 得分 1 通過 IBM
1.1.15 確保 scheduler.conf 檔案權限設定為 600 或更嚴格的權限。 得分 1 通過 IBM
1.1.16 確保 scheduler.conf 檔案擁有權設為 root:root 得分 1 通過 IBM
1.1.17 確保 controller-manager.conf 檔案權限設定為 600 或更嚴格的權限。 得分 1 通過 IBM
1.1.18 確保 controller-manager.conf 檔案擁有權設為 root:root 得分 1 通過 IBM
1.1.19 確保 Kubernetes PKI 目錄和檔案擁有權設為 root:root 得分 1 通過 IBM
1.1.20 確保 Kubernetes PKI 憑證檔案權限設定為 644 或更嚴格的權限。 未得分 1 通過 IBM
1.1.21 確保 Kubernetes PKI 金鑰檔案權限設定為 600 未得分 1 通過 IBM

1.2 API 伺服器

1.2 API 伺服器基準結果
區段 建議: 得分? 層次 結果 責任
1.2.1 確保 --anonymous-auth 參數設定為 false 未得分 1 失敗 IBM
1.2.2 確保 --token-auth-file 參數未設定。 得分 1 通過 IBM
1.2.3 請確保已設定 DenyServiceExternalIPs 未得分 1 失敗 IBM
1.2.4 確保 --kubelet-client-certificate--kubelet-client-key 參數設定適當。 得分 1 通過 IBM
1.2.5 確保 --kubelet-certificate-authority 參數設定適當。 得分 1 通過 IBM
1.2.6 確保 --authorization-mode 參數未設定為 AlwaysAllow 得分 1 通過 IBM
1.2.7 確保 --authorization-mode 參數包含 Node。 得分 1 通過 IBM
1.2.8 確保 --authorization-mode 參數包含 RBAC。 得分 1 通過 IBM
1.2.9 確保已設定存取控制外掛程式 EventRateLimit 未得分 1 失敗 IBM
1.2.10 確保未設定存取控制外掛程式 AlwaysAdmit 得分 1 通過 IBM
1.2.11 確保已設定存取控制外掛程式 AlwaysPullImages 未得分 1 失敗 IBM
1.2.12 確保已設定存取控制外掛程式 ServiceAccount 得分 2 通過 IBM
1.2.13 確保已設定存取控制外掛程式 NamespaceLifecycle 得分 2 通過 IBM
1.2.14 確保已設定存取控制外掛程式 NodeRestriction 得分 2 通過 IBM
1.2.15 確保 --profiling 參數設定為 false 得分 1 通過 IBM
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 通過 IBM
1.2.21 確保 --service-account-lookup 參數設定為 true 得分 1 通過 IBM
1.2.22 確保 --service-account-key-file 參數設定適當。 得分 1 通過 IBM
1.2.23 確保 --etcd-certfile--etcd-keyfile 參數設定適當。 得分 1 通過 IBM
1.2.24 確保 --tls-cert-file--tls-private-key-file 參數設定適當。 得分 1 通過 IBM
1.2.25 確保 --client-ca-file 參數設定適當。 得分 1 通過 IBM
1.2.26 確保 --etcd-cafile 參數設定適當。 得分 1 通過 IBM
1.2.27 確保 --encryption-provider-config 參數設定適當。 未得分 1 失敗 共用
1.2.28 確保適當設定加密供應商。 未得分 1 失敗 共用
1.2.29 確保 API 伺服器只使用強加密密碼。 未得分 1 通過 IBM
1.2.30 確保 --service-account-extend-token-expiration 參數設定為 false 得分 1 失敗 IBM

1.3 控制器經理

1.3 控制器管理員基準結果
區段 建議: 得分? 層次 結果 責任
1.3.1 確保 --terminated-pod-gc-threshold 參數設定適當。 未得分 1 通過 IBM
1.3.2 確保 --profiling 參數設定為 false 得分 1 通過 IBM
1.3.3 確保 --use-service-account-credentials 參數設定為 true 得分 1 通過 IBM
1.3.4 確保 --service-account-private-key-file 參數設定適當。 得分 1 通過 IBM
1.3.5 確保 --root-ca-file 參數設定適當。 得分 1 通過 IBM
1.3.6 確保 RotateKubeletServerCertificate 參數設定為 true 得分 1 通過 IBM
1.3.7 確保 --bind-address 參數設定為 127.0.0.1 得分 1 通過 IBM

1.4 排程

1.4 排程器基準結果
區段 建議: 得分? 層次 結果 責任
1.4.1 確保 --profiling 參數設定為 false 得分 1 通過 IBM
1.4.2 確保 --bind-address 參數設定為 127.0.0.1 得分 1 通過 IBM

2 Etcd 節點組態

第 2 節 Etcd 節點配置基準結果

建議: 得分? 層次 結果 責任
2.1 確保 --cert-file--key-file 參數設定適當。 得分 1 通過 IBM
2.2 確保 --client-cert-auth 參數設定為 true 得分 1 通過 IBM
2.3 確保 --auto-tls 參數未設定為 true 得分 1 通過 IBM
2.4 確保 --peer-cert-file--peer-key-file 參數設定適當。 得分 1 通過 IBM
2.5 確保 --peer-client-cert-auth 參數設定為 true 得分 1 通過 IBM
2.6 確保 --peer-auto-tls 參數未設定為 true 得分 1 通過 IBM
2.7 確保 etcd 使用唯一的憑證授權。 未得分 2 通過 IBM

3 控制平面組態

3.1 身分驗證與授權

3.1 驗證與授權基準結果
區段 建議: 得分? 層次 結果 責任
3.1.1 使用者不應使用用戶端憑證認證。 未得分 1 通過 共用
3.1.2 不應對使用者使用服務帳戶令牌驗證。 未得分 1 通過 共用
3.1.3 不應對使用者使用 Bootstrap 令牌驗證。 未得分 1 通過 共用

3.2 記錄

3.2 記錄基準結果
區段 建議: 得分? 層次 結果 責任
3.2.1 確保建立最低限度的稽核政策。 未得分 1 失敗 共用
3.2.2 確保稽核政策涵蓋主要的安全問題。 未得分 2 失敗 共用

4 個工作節點 ( RHEL_9_64 )

4.1 工作節點組態檔案

4.1 節 工作節點組態檔案基準結果
區段 建議: 得分? 層次 結果 責任
4.1.1 確保 kubelet 服務檔案權限設定為 600 或更嚴格的權限。 得分 1 通過 IBM
4.1.2 確保 kubelet 服務檔案擁有權設為 root:root 得分 1 通過 IBM
4.1.3 如果存在代理 kubeconfig 檔案,請確保權限設定為 600 或限制性更高的權限。 未得分 1 通過 IBM
4.1.4 如果存在代理 kubeconfig 檔案,請確保擁有權設為 root:root 未得分 1 通過 IBM
4.1.5 確保 --kubeconfig`` kubelet.conf 檔案權限設定為 600 或更嚴格的權限。 得分 1 通過 IBM
4.1.6 確保 --kubeconfig`` kubelet.conf 檔案擁有權設為 root:root 得分 1 通過 IBM
4.1.7 確保證書授權檔案權限設定為 644 或更嚴格的權限。 未得分 1 通過 IBM
4.1.8 確保客戶端憑證授權檔案擁有權設為 root:root 未得分 1 通過 IBM
4.1.9 如果正在使用 kubelet config.yaml 配置文件,請驗證權限設定為 600 或限制性更高的權限。 得分 1 通過 IBM
4.1.10 如果使用 kubelet config.yaml 配置文件,驗證文件所有權設定為 root:root 得分 1 通過 IBM

4.2 Kubelet

4.2 Kubelet 基準結果
區段 建議: 得分? 層次 結果 責任
4.2.1 確保 --anonymous-auth 參數設定為 false 得分 1 通過 IBM
4.2.2 確保 --authorization-mode 參數未設定為 AlwaysAllow 得分 1 通過 IBM
4.2.3 確保 --client-ca-file 參數設定適當。 得分 1 通過 IBM
4.2.4 驗證 readOnlyPort (如果已定義)是否設定為 0 未得分 1 通過 IBM
4.2.5 確保 --streaming-connection-idle-timeout 參數未設定為 0 未得分 1 通過 IBM
4.2.6 確保 --make-iptables-util-chains 參數設定為 true 得分 1 通過 IBM
4.2.7 確保 --hostname-override 參數未設定。 未得分 1 失敗 IBM
4.2.8 確保 eventRecordQPS 參數設定為可確保適當事件擷取的層級。 未得分 2 通過 IBM
4.2.9 確保 --tls-cert-file--tls-private-key-file 參數設定適當。 未得分 1 通過 IBM
4.2.10 確保 --rotate-certificates 參數未設定為 false 得分 1 失敗 IBM
4.2.11 確認 RotateKubeletServerCertificate 參數設定為 true 未得分 1 通過 IBM
4.2.12 確保 Kubelet 僅使用強加密密碼。 未得分 1 通過 IBM
4.2.13 確保在 pod PIDs 上設定了限制。 未得分 1 通過 IBM
4.2.14 確保 --seccomp-default 參數設定為 true 未得分 1 通過 IBM

4.3 Kube 代理

4.3 Kube 代理基準結果
區段 建議: 得分? 層次 結果 責任
4.3.1 確保 kube-proxy metrics 服務已綁定至 localhost。 得分 1 通過 IBM

4 工作節點安全設定 (RHCOS)

4.1 工作節點組態檔案

4.1 節 工作節點組態檔案基準結果
區段 建議: 得分? 層次 結果 責任
4.1.1 確保 kubelet 服務檔案權限設定為 600 或更嚴格的權限。 得分 1 通過 IBM
4.1.2 確保 kubelet 服務檔案擁有權設為 root:root 得分 1 通過 IBM
4.1.3 如果存在代理 kubeconfig 檔案,請確保權限設定為 600 或限制性更高的權限。 未得分 1 通過 IBM
4.1.4 如果存在代理 kubeconfig 檔案,請確保擁有權設為 root:root 未得分 1 通過 IBM
4.1.5 確保 --kubeconfig`` kubelet.conf 檔案權限設定為 600 或更嚴格的權限。 得分 1 通過 IBM
4.1.6 確保 --kubeconfig`` kubelet.conf 檔案擁有權設為 root:root 得分 1 通過 IBM
4.1.7 確保證書授權檔案權限設定為 644 或更嚴格的權限。 未得分 1 通過 IBM
4.1.8 確保客戶端憑證授權檔案擁有權設為 root:root 未得分 1 通過 IBM
4.1.9 如果正在使用 kubelet config.yaml 配置文件,請驗證權限設定為 600 或限制性更高的權限。 得分 1 通過 IBM
4.1.10 如果使用 kubelet config.yaml 配置文件,驗證文件所有權設定為 root:root 得分 1 通過 IBM

4.2 Kubelet

4.2 Kubelet 基準結果
區段 建議: 得分? 層次 結果 責任
4.2.1 確保 --anonymous-auth 參數設定為 false 得分 1 通過 IBM
4.2.2 確保 --authorization-mode 參數未設定為 AlwaysAllow 得分 1 通過 IBM
4.2.3 確保 --client-ca-file 參數設定適當。 得分 1 通過 IBM
4.2.4 驗證 readOnlyPort (如果已定義)是否設定為 0 未得分 1 通過 IBM
4.2.5 確保 --streaming-connection-idle-timeout 參數未設定為 0 未得分 1 通過 IBM
4.2.6 確保 --make-iptables-util-chains 參數設定為 true 得分 1 通過 IBM
4.2.7 確保 --hostname-override 參數未設定。 未得分 1 失敗 IBM
4.2.8 確保 eventRecordQPS 參數設定為可確保適當事件擷取的層級。 未得分 2 通過 IBM
4.2.9 確保 --tls-cert-file--tls-private-key-file 參數設定適當。 未得分 1 通過 IBM
4.2.10 確保 --rotate-certificates 參數未設定為 false 得分 1 通過 IBM
4.2.11 確認 RotateKubeletServerCertificate 參數設定為 true 未得分 1 通過 IBM
4.2.12 確保 Kubelet 僅使用強加密密碼。 未得分 1 通過 IBM
4.2.13 確保在 pod PIDs 上設定了限制。 未得分 1 通過 IBM
4.2.14 確保 --seccomp-default 參數設定為 true 未得分 1 通過 IBM

4.3 Kube 代理

4.3 Kube 代理基準結果
區段 建議: 得分? 層次 結果 責任
4.3.1 確保 kube-proxy metrics 服務已綁定至 localhost。 得分 1 通過 IBM

5 項政策

5.1 RBAC 和服務帳號

5.1 RBAC 和服務帳號的基準結果
區段 建議: 得分? 層次 結果 責任
5.1.1 確保僅在需要時使用群集管理員 (cluster-admin) 角色。 未得分 1 通過 共用
5.1.2 盡量減少接觸機密的機會。 未得分 1 失敗 共用
5.1.3 RolesClusterRoles 中盡量減少通配符的使用。 未得分 1 失敗 共用
5.1.4 最小化存取建立 pod。 未得分 1 通過 共用
5.1.5 確保預設服務帳戶未被使用。 未得分 1 失敗 共用
5.1.6 確保僅在必要時才掛載服務帳戶代用權。 未得分 1 失敗 共用
5.1.7 避免使用 system:masters 群組。 未得分 1 通過 共用
5.1.8 限制在 Kubernetes 集群中使用 Bind、Impersonate 和 Escalate 權限。 未得分 1 通過 共用
5.1.9 最小化建立持久卷的存取。 未得分 1 通過 共用
5.1.10 盡量減少存取節點的代理子資源。 未得分 1 通過 共用
5.1.11 最小化對 certificatesigningrequests 物件的核准子資源的存取。 未得分 1 通過 共用
5.1.12 最小化對 webhook 配置物件的存取。 未得分 1 通過 共用
5.1.13 最小化服務帳號符記建立的存取權限。 未得分 1 通過 共用

5.2 Pod 安全標準

5.2 Pod 安全標準基準結果
區段 建議: 得分? 層次 結果 責任
5.2.1 確保叢集至少有一個作用中的政策控制機制。 未得分 1 通過 共用
5.2.2 盡量減少接納特權容器。 未得分 1 通過 共用
5.2.3 盡量減少希望共用主機程序 ID 命名空間的容器的存取。 未得分 1 通過 共用
5.2.4 盡量減少希望共用主機 IPC 命名空間的容器進入。 未得分 1 通過 共用
5.2.5 盡量減少希望共用主機網路命名空間的容器進入。 未得分 1 通過 共用
5.2.6 盡量減少集裝箱的進入,allowPrivilegeEscalation 未得分 1 通過 共用
5.2.7 盡量減少收納根部容器。 未得分 2 通過 共用
5.2.8 使用 NET_RAW 功能將容器的入場人數減至最少。 未得分 1 通過 共用
5.2.9 最小化已指派功能的容器的存取。 未得分 2 通過 共用
5.2.10 最小化 Windows HostProcess Containers 的准入。 未得分 1 通過 共用
5.2.11 盡量減少輸入 HostPath 體積。 未得分 1 通過 共用
5.2.12 盡量減少接納使用 HostPorts 的容器。 未得分 1 通過 共用

5.3 網路政策與 CNI

5.3 網路政策與 CNI 基準結果
區段 建議: 得分? 層次 結果 責任
5.3.1 確保使用中的 CNI 支援「網路政策」。 未得分 1 通過 IBM
5.3.2 確保所有命名空間都定義了網路政策。 未得分 2 通過 共用

5.4 秘密管理

5.4 節 秘密管理基準結果
區段 建議: 得分? 層次 結果 責任
5.4.1 比起使用秘密作為環境變數,更偏好使用秘密作為檔案。 未得分 2 失敗 共用
5.4.2 考慮外部秘密儲存。 未得分 2 失敗 共用

5.5 可擴充的入場控制

5.5 節 可擴充的入場控制基準結果
區段 建議: 得分? 層次 結果 責任
5.5.1 使用 ImagePolicyWebhook 驗證控制器設定影像驗證。 未得分 2 失敗 共用

5.6 一般政策

5.6 一般政策基準結果
區段 建議: 得分? 層次 結果 責任
5.6.1 使用命名空間在資源之間建立管理界限。 未得分 1 通過 共用
5.6.2 確保 seccomp 設定檔在 Pod 定義中設定為 docker/default。 未得分 2 失敗 共用
5.6.3 為 Pod 和容器套用安全情境。 未得分 2 失敗 共用
5.6.4 不應使用預設命名空間。 未得分 2 通過 共用

IBM 補救和解釋

IBM 修正和解釋基準結果
區段 Remediation and explanation.
1.2.1 Red Hat OpenShift on IBM Cloud 利用 RBAC 進行群集保護,但允許匿名發現,根據 CIS Kubernetes Benchmark,這被認為是合理的。
1.2.3 OpenShift 採用 其他緩解控制以限制服務外部 IPs
1.2.9 Red Hat OpenShift on IBM Cloud 不會啟用 EventRateLimit 因為它是 Kubernetes alpha 功能。
1.2.11 Red Hat OpenShift on IBM Cloud 不會啟用 AlwaysPullImages 因為它會覆寫容器的 _imagePullPolicy_,並可能影響效能。
1.2.17 Red Hat OpenShift on IBM Cloud 可選擇 啟用 Kubernetes API 伺服器稽核
1.2.27 Red Hat OpenShift on IBM Cloud 可選擇 啟用 Kubernetes 金鑰管理服務(KMS)提供者
1.2.28 Red Hat OpenShift on IBM Cloud 可選擇 啟用 Kubernetes 金鑰管理服務(KMS)提供者
1.2.30 OpenShift 不支援停用 --service-account-extend-token-expiration
3.2.1 Red Hat OpenShift on IBM Cloud 可選擇 啟用 Kubernetes API 伺服器稽核
3.2.2 Red Hat OpenShift on IBM Cloud 可選擇 啟用 Kubernetes API 伺服器稽核
4.2.7 Red Hat OpenShift on IBM Cloud 確保主機名稱與基礎結構所發出的名稱相符。
4.2.10 Red Hat OpenShift on IBM Cloud 會在每次重新載入或更新工作節點時輪換憑證。
5.1.2 Red Hat OpenShift on IBM Cloud 部署的某些系統元件可能會進一步限制其 Kubernetes 秘密存取。
5.1.3 Red Hat OpenShift on IBM Cloud 部署的某些系統元件可能會進一步限制其 Kubernetes 資源存取。
5.1.5 Red Hat OpenShift on IBM Cloud 不會為每個預設服務帳戶設定 automountServiceAccountToken: false
5.1.6 Red Hat OpenShift on IBM Cloud 會部署某些系統元件,這些元件可能會設定 automountServiceAccountToken: false
5.2.2 Red Hat OpenShift on IBM Cloud 可選擇設定 OpenShift 安全性上下文限制Kubernetes Pod 安全性承認,這與已廢棄的 Kubernetes Pod 安全政策類似。
5.2.3 Red Hat OpenShift on IBM Cloud 可選擇設定 OpenShift 安全性上下文限制Kubernetes Pod 安全性承認,這與已廢棄的 Kubernetes Pod 安全政策類似。
5.2.4 Red Hat OpenShift on IBM Cloud 可選擇設定 OpenShift 安全性上下文限制Kubernetes Pod 安全性承認,這與已廢棄的 Kubernetes Pod 安全政策類似。
5.2.5 Red Hat OpenShift on IBM Cloud 可選擇設定 OpenShift 安全性上下文限制Kubernetes Pod 安全性承認,這與已廢棄的 Kubernetes Pod 安全政策類似。
5.2.6 Red Hat OpenShift on IBM Cloud 可選擇設定 OpenShift 安全性上下文限制Kubernetes Pod 安全性承認,這與已廢棄的 Kubernetes Pod 安全政策類似。
5.2.7 Red Hat OpenShift on IBM Cloud 可選擇設定 OpenShift 安全性上下文限制Kubernetes Pod 安全性承認,這與已廢棄的 Kubernetes Pod 安全政策類似。
5.2.8 Red Hat OpenShift on IBM Cloud 可選擇設定 OpenShift 安全性上下文限制Kubernetes Pod 安全性承認,這與已廢棄的 Kubernetes Pod 安全政策類似。
5.2.9 Red Hat OpenShift on IBM Cloud 可選擇設定 OpenShift 安全性上下文限制Kubernetes Pod 安全性承認,這與已廢棄的 Kubernetes Pod 安全政策類似。
5.4.1 Red Hat OpenShift on IBM Cloud 部署某些系統元件,這些元件可能會偏好使用秘密檔案,而非使用秘密作為環境變數。
5.4.2 Red Hat OpenShift on IBM Cloud 可選擇 啟用 Secrets Manager 服務
5.5.1 Red Hat OpenShift on IBM Cloud 可以選擇 啟用影像安全強制執行
5.6.2 Red Hat OpenShift on IBM Cloud 不會用 seccomp profile 註釋所有 pod。
5.6.3 Red Hat OpenShift on IBM Cloud 部署某些不設定 荚或容器 securityContext 的系統元件。