網際網路安全中心 (CIS) Kubernetes 基準

作為安全服務,Azure Kubernetes Service (AKS) 符合 SOC、ISO、PCI DSS 和 HIPAA 標準。 本文涵蓋以 CIS Kubernetes 基準為基礎,套用至 AKS 的安全性強化功能。 如需 AKS 安全性的詳細資訊,請參閱 Azure Kubernetes Service (AKS) 中應用程式和叢集的安全性概念。 如需 CIS 基準的詳細資訊,請參閱網際網路安全中心 (CIS) 基準

Kubernetes CIS 基準

以下是 CIS Kubernetes V1.27 基準 v1.8.0 對 AKS 所提出建議的結果。 結果適用於 AKS 1.21.x 到 AKS 1.27.x。

如果未套用評分建議,則評分建議會影響基準分數,而未評分的建議則不會影響基準分數。

CIS 基準提供兩種安全性設定等級:

  • L1 (或等級 1) 會建議可在任何系統上設定,且應該不會中斷服務或減少功能的基本安全性需求。
  • L2 (或等級 2) 會針對需要更高安全性 (但可能會因此導致部份功能降低) 的環境建議安全性設定。

建議可處於下列其中一種狀態:

  • 通過 - 已套用建議。
  • 失敗 - 未套用建議。
  • N/A - 建議與資訊清單檔案權限需求相關,但該需求與 AKS 並不相關。 Kubernetes 叢集預設會使用資訊清單模型來部署控制平面 Pod,其依賴節點 VM 的檔案。 CIS Kubernetes 基準建議這些檔案必須具有特定權限需求。 AKS 叢集會使用 Helm 圖表來部署控制平面 Pod,而且不會依賴節點 VM 中的檔案。
  • 視環境而定 - 建議會套用在使用者的特定環境中,且不受 AKS 控制。 已評分的建議會影響基準分數,不論建議是否能套用至使用者的特定環境。
  • 對等控制項 - 以不同的對等方式實作建議。
CIS 識別碼 建議描述 評分類型 層級 狀態
1 控制平面元件
1.1 控制平面節點設定檔
1.1.1 確定 API 伺服器 Pod 規格檔案權限設為 600 或更嚴格 得分 L1 N/A
1.1.2 確定 API 伺服器 Pod 規格檔案所有權設為 root:root 得分 L1 N/A
1.1.3 確定控制器管理員 Pod 規格檔案權限設為 600 或更嚴格 得分 L1 N/A
1.1.4 確定控制器管理員 Pod 規格檔案所有權設為 root:root 得分 L1 N/A
1.1.5 確定排程器 Pod 規格檔案權限設為 600 或更嚴格 得分 L1 N/A
1.1.6 確定排程器 Pod 規格檔案所有權設為 root:root 得分 L1 N/A
1.1.7 確定 etcd Pod 規格檔案權限設為 600 或更嚴格 得分 L1 N/A
1.1.8 確定 etcd Pod 規格檔案所有權設為 root:root 得分 L1 N/A
1.1.9 確定容器網路介面檔案權限設為 600 或更嚴格 未計分 L1 N/A
1.1.10 確定容器網路介面檔案所有權設為 root:root 未計分 L1 N/A
1.1.11 確定 etcd 資料目錄權限設為 700 或更嚴格 得分 L1 N/A
1.1.12 確定 etcd 資料目錄所有權設為 etcd:etcd 得分 L1 N/A
1.1.13 確定 admin.conf 檔案權限設為 600 或更嚴格 得分 L1 N/A
1.1.14 確定 admin.conf 檔案所有權設為 root:root 得分 L1 N/A
1.1.15 確定 scheduler.conf 檔案權限設為 600 或更嚴格 得分 L1 N/A
1.1.16 確定 scheduler.conf 檔案所有權設為 root:root 得分 L1 N/A
1.1.17 確定 controller-manager.conf 檔案權限設為 600 或更嚴格 得分 L1 N/A
1.1.18 確定 controller-manager.conf 檔案所有權設為 root:root 得分 L1 N/A
1.1.19 確定 Kubernetes PKI 目錄和檔案所有權設為 root:root 得分 L1 N/A
1.1.20 確定 Kubernetes PKI 憑證檔案權限設為 600 或更嚴格 得分 L1 N/A
1.1.21 確定 Kubernetes PKI 金鑰檔案權限設為 600 得分 L1 N/A
1.2 API 伺服器
1.2.1 確定 --anonymous-auth 引數設為 false 未計分 L1 通過
1.2.2 確定未設定 --token-auth-file 參數 得分 L1 失敗
1.2.3 確定沒有設定 --DenyServiceExternalIPs 得分 L1 失敗
1.2.4 確定已適當設定 --kubelet-client-certificate--kubelet-client-key 引數 得分 L1 通過
1.2.5 確定已適當設定 --kubelet-certificate-authority 引數 得分 L1 失敗
1.2.6 確定 --authorization-mode 引數未設為 AlwaysAllow 得分 L1 通過
1.2.7 確定 --authorization-mode 引數包含 Node 得分 L1 通過
1.2.8 確定 --authorization-mode 引數包含 RBAC 得分 L1 通過
1.2.9 確定已設定許可控制項外掛程式 EventRateLimit 未計分 L1 失敗
1.2.10 確定已設定許可控制項外掛程式 AlwaysAdmit 得分 L1 通過
1.2.11 確定已設定許可控制項外掛程式 AlwaysPullImages 未計分 L1 失敗
1.2.12 如果未使用 PodSecurityPolicy,請確定已設定許可控制項外掛程式 SecurityCoNtextDeny 未計分 L1 失敗
1.2.13 確定已設定許可控制項外掛程式 ServiceAccount 得分 L1 通過
1.2.14 確定已設定許可控制項外掛程式 NamespaceLifecycle 得分 L1 通過
1.2.15 確定已設定許可控制項外掛程式 NodeRestriction 得分 L1 通過
1.2.16 確定 --secure-port 引數未設為 0 得分 L1 通過
1.2.17 確定 --profiling 引數設為 false 得分 L1 通過
1.2.18 確定已設定 --audit-log-path 引數 得分 L1 對等控制項
1.2.19 確定 --audit-log-maxage 引數設為 30,或已適當設定 得分 L1 對等控制項
1.2.20 確定 --audit-log-maxbackup 引數設為 10,或已適當設定 得分 L1 通過
1.2.21 確定 --audit-log-maxsize 引數設為 100,或已適當設定 得分 L1 通過
1.2.22 確定已適當設定 --request-timeout 引數 得分 L1 通過
1.2.23 確定 --service-account-lookup 引數設為 true 得分 L1 通過
1.2.24 確定已適當設定 --service-account-key-file 引數 得分 L1 通過
1.2.25 確定已適當設定 --etcd-certfile--etcd-keyfile 引數 得分 L1 通過
1.2.26 確定已適當設定 --tls-cert-file--tls-private-key-file 引數 得分 L1 通過
1.2.27 確定已適當設定 --client-ca-file 引數 得分 L1 通過
1.2.28 確定已適當設定 --etcd-cafile 引數 得分 L1 視環境而定
1.2.29 確定已適當設定 --encryption-provider-config 引數 得分 L1 視環境而定
1.2.30 確定已適當設定加密供應商 得分 L1 視環境而定
1.2.31 確定 API 伺服器只使用強式加密編譯進行加密 未計分 L1 通過
1.3 控制器管理員
1.3.1 確定已適當設定 --terminated-pod-gc-threshold 引數 得分 L1 通過
1.3.2 確定 --profiling 引數設為 false 得分 L1 通過
1.3.3 確定 --use-service-account-credentials 引數設為 true 得分 L1 通過
1.3.4 確定已適當設定 --service-account-private-key-file 引數 得分 L1 通過
1.3.5 確定已適當設定 --root-ca-file 引數 得分 L1 通過
1.3.6 確定 RotateKubeletServerCertificate 引數設為 true 得分 L2 失敗
1.3.7 確定 --bind-address 引數設為 127.0.0.1 得分 L1 對等控制項
1.4 排程器
1.4.1 確定 --profiling 引數設為 false 得分 L1 通過
1.4.2 確定 --bind-address 引數設為 127.0.0.1 得分 L1 對等控制項
2 etcd
2.1 確定已適當設定 --cert-file--key-file 引數 得分 L1 通過
2.2 確定 --client-cert-auth 引數設為 true 得分 L1 通過
2.3 確定 --auto-tls 引數未設為 true 得分 L1 通過
2.4 確定已適當設定 --peer-cert-file--peer-key-file 引數 得分 L1 通過
2.5 確定 --peer-client-cert-auth 引數設為 true 得分 L1 通過
2.6 確定 --peer-auto-tls 引數未設為 true 得分 L1 通過
2.7 確定針對 etcd 使用唯一的憑證授權單位 未計分 L2 通過
3 控制平面設定
3.1 驗證和授權
3.1.1 不應將用戶端憑證驗證用在使用者身上 未計分 L2 通過
3.1.2 不應將服務帳戶權杖驗證用在使用者身上 未計分 L2 通過
3.1.3 不應將啟動程序權杖驗證用在使用者身上 未計分 L2 通過
3.2 記錄
3.2.1 確定建立最小稽核原則 得分 L1 通過
3.2.2 確定稽核原則涵蓋重要安全性考量 未計分 L2 通過
4 背景工作節點
4.1 背景工作角色節點設定檔
4.1.1 確定 kubelet 服務檔案權限設為 600 或更嚴格 得分 L1 通過
4.1.2 確定 kubelet 服務檔案所有權設為 root:root 得分 L1 通過
4.1.3 如果 Proxy kubeconfig 檔案存在,請確保權限設為 600 或更嚴格 得分 L1 N/A
4.1.4 如果 Proxy kubeconfig 檔案存在,請確保所有權已設定為 root:root 得分 L1 N/A
4.1.5 確定 --kubeconfig kubelet.conf 檔案權限設為 600 或更嚴格 得分 L1 通過
4.1.6 確定 --kubeconfig kubelet.conf 檔案所有權設為 root:root 得分 L1 通過
4.1.7 確定憑證授權單位檔案權限設為 600 或更嚴格 得分 L1 通過
4.1.8 確定用戶端憑證授權單位檔案所有權設為 root:root 得分 L1 通過
4.1.9 如果正在使用 kubelet config.yaml 設定檔,請確保權限設為 600 或更嚴格 得分 L1 通過
4.1.10 如果正在使用 kubelet config.yaml 設定檔,請確保檔案擁有全不是設定為 root:root 得分 L1 通過
4.2 Kubelet
4.2.1 確定 --anonymous-auth 引數設為 false 得分 L1 通過
4.2.2 確定 --authorization-mode 引數未設為 AlwaysAllow 得分 L1 通過
4.2.3 確定已適當設定 --client-ca-file 引數 得分 L1 通過
4.2.4 確定 --read-only-port 引數設為 0 得分 L1 通過
4.2.5 確定 --streaming-connection-idle-timeout 引數未設為 0 得分 L1 通過
4.2.6 確定 --protect-kernel-defaults 引數設為 true 得分 L1 通過
4.2.7 確定 --make-iptables-util-chains 引數設為 true 得分 L1 通過
4.2.8 確定未設定 --hostname-override 引數 未計分 L1 通過
4.2.9 確定 eventRecordQPS 引數設為能確保適當事件擷取的等級 未計分 L2 通過
4.2.10 確定已適當設定 --tls-cert-file--tls-private-key-file 引數 得分 L1 通過
4.2.11 確定 --rotate-certificates 引數未設為 false 得分 L1 通過
4.2.12 確定 RotateKubeletServerCertificate 引數設為 true 得分 L1 通過
4.2.13 確定 Kubelet 只使用強式加密編譯進行加密 未計分 L1 通過
5 原則
5.1 RBAC 與服務帳戶
5.1.1 確定僅於需要時才使用叢集管理員角色 未計分 L1 視環境而定
5.1.2 將存取密碼的次數降到最低 未計分 L1 視環境而定
5.1.3 將角色和 ClusterRoles 中使用萬用字元的次數降到最低 未計分 L1 視環境而定
5.1.4 將存取以建立 Pod 的次數降到最低 未計分 L1 視環境而定
5.1.5 確定未主動使用預設服務帳戶 得分 L1 視環境而定
5.1.6 確定只會在必要時裝載服務帳戶權杖 未計分 L1 視環境而定
5.1.7 避免使用 system:masters group 未計分 L1 視環境而定
5.1.8 限制在 Kubernetes 叢集中使用 Bind、Impersonate 和 Escalate 權限 未計分 L1 視環境而定
5.1.9 將存取以建立永續性磁碟區的次數降到最低 未計分 L1 視環境而定
5.1.10 將節點 Proxy 子資源的存取降至最低 未計分 L1 視環境而定
5.1.11 將 certificatesigningrequests 物件的核准子資源存取降至最低 未計分 L1 視環境而定
5.1.12 將 Webhook 組態物件的存取降至最低 未計分 L1 視環境而定
5.1.13 將服務帳戶權杖建立的存取降至最低 未計分 L1 視環境而定
5.2 Pod 安全性原則
5.2.1 確定叢集至少有一個作用中的原則控制機制已就緒 未計分 L1 視環境而定
5.2.2 將具權限容器的許可數降到最低 未計分 L1 視環境而定
5.2.3 針對想要共用主機處理序識別碼命名空間的容器,將其許可數降到最低 得分 L1 視環境而定
5.2.4 針對想要共用主機 IPC 識別碼命名空間的容器,將其許可數降到最低 得分 L1 視環境而定
5.2.5 針對想要共用主機網路命名空間的容器,將其許可數降到最低 得分 L1 視環境而定
5.2.6 針對使用 allowPrivilegeEscalation 的容器,將其許可數降到最低 得分 L1 視環境而定
5.2.6 將根容器的許可數降到最低 未計分 L2 視環境而定
5.2.7 針對使用 NET_RAW 功能的容器,將其許可數降到最低 未計分 L1 視環境而定
5.2.8 針對具備新增功能的容器,將其許可數降到最低 未計分 L1 視環境而定
5.2.9 針對具備指派功能的容器,將其許可數降到最低 未計分 L1 視環境而定
5.2.10 針對具備指派功能的容器,將其許可數降到最低 未計分 L2
5.2.11 將 Windows HostProcess 容器的許可數降到最低 未計分 L1 視環境而定
5.2.12 將 HostPath 磁碟區的許可數降到最低 未計分 L1 視環境而定
5.2.13 針對使用 HostPorts 的容器,將其許可數降到最低 未計分 L1 視環境而定
5.3 網路原則和 CNI
5.3.1 確定使用中的 CNI 支援網路原則 未計分 L1 通過
5.3.2 確定所有命名空間都已定義網路原則 得分 L2 視環境而定
5.4 祕密管理
5.4.1 偏好使用密碼作為檔案,而非將密碼作為環境變數 未計分 L1 視環境而定
5.4.2 考量外部密碼儲存體 未計分 L2 視環境而定
5.5 可延伸的許可控制項
5.5.1 使用 ImagePolicyWebhook 許可控制器設定映像來源 未計分 L2 失敗
5.7 一般原則
5.7.1 使用命名空間在資源之間建立系統管理界限 未計分 L1 視環境而定
5.7.2 確定 seccomp 設定檔已在 Pod 定義中設為 docker/default 未計分 L2 視環境而定
5.7.3 將資訊安全內容套用至 Pod 和容器 未計分 L2 視環境而定
5.7.4 不應使用預設命名空間 得分 L2 視環境而定

注意

除了 Kubernetes CIS 基準之外,也有 AKS CIS 基準可使用。

其他注意事項

  • 安全性強化的作業系統是專門針對 AKS 所建置和維護,且無法在 AKS 平台外部獲得支援。
  • 為了進一步減少受攻擊面區域,已經在作業系統中停用一些不必要的核心模組驅動程式。

下一步

如需 AKS 安全性的詳細資訊,請參閱下列文章: