網際網路安全中心 (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 安全性的詳細資訊,請參閱下列文章: