Azure Kubernetes Service (AKS) 中的應用程式和叢集的安全性概念
容器安全性可保護從組建到 Azure Kubernetes Service (AKS) 中所執行應用程式工作負載的整個端對端管線。
安全供應鏈包括組建環境和登錄。
Kubernetes 包括安全性元件,例如「Pod 安全性標準」和「祕密」。 Azure 包含 Active Directory、容器Microsoft Defender、Azure 原則、Azure 金鑰保存庫、網路安全性群組和協調叢集升級等元件。 AKS 合併這些安全性元件,以:
- 提供完整的驗證和授權案例。
- 套用 AKS 內建Azure 原則來保護您的應用程式。
- 使用適用於容器的 Microsoft Defender 透過應用程式所建置的端對端深入解析。
- 讓您的 AKS 叢集持續執行最新的 OS 安全性更新和 Kubernetes 版本。
- 提供安全的 Pod 流量和敏感性認證存取。
本文介紹在 AKS 中保護應用程式的核心概念。
組建安全性
作為供應鏈的進入點,請務必先對映射組建進行靜態分析,再將其升階至管線,其中包括弱點和合規性評估。 它不是因為建置有弱點而失敗,因為這會中斷開發。 這是關於查看 廠商狀態 ,以根據開發小組可採取動作的弱點進行區隔。 也請使用 寬限期 ,讓開發人員有時間補救已識別的問題。
登錄安全性
評估登錄中映射的弱點狀態會偵測漂移,並攔截不是來自組建環境的映射。 使用 Notary V2 將簽章附加至映像,以確保部署來自信任的位置。
叢集安全性
在 AKS 中,Kubernetes 主機元件是 Microsoft 所提供、管理和維護的受控服務的一部分。 每個 AKS 叢集都有自己的單一租使用者專用 Kubernetes 主機,以提供 API 伺服器、排程器等。如需詳細資訊,請參閱Azure Kubernetes Service 的弱點管理。
根據預設,Kubernetes API 伺服器會使用公用 IP 位址和完整網域名稱 (FQDN)。 您可以使用已授權的 IP 範圍來限制對 API 伺服器端點的存取。 您也可以建立完全私人叢集,以限制 API 伺服器對虛擬網路的存取。
您可以使用 Kubernetes 角色型存取控制 (Kubernetes RBAC) 和 Azure RBAC 來控制對 API 伺服器的存取。 如需詳細資訊,請參閱 Azure AD 與 AKS 的整合。
節點安全性
AKS 節點是您所管理和維護的 Azure 虛擬機器 (VM)。
- Linux 節點會執行 Ubuntu 或 Azure Linux 的優化版本。
- Windows Server 節點會使用
containerd
或 Docker 容器執行階段來執行最佳化 Windows Server 2019 版本。
當 AKS 叢集建立或相應增加時,節點將會自動以最新的 OS 安全性更新和設定進行部署。
注意
AKS 叢集:
- 若針對 Linux 節點集區使用 Kubernetes 1.19 版和以上版本,則會使用
containerd
作為其容器執行階段。 使用containerd
搭配 Windows Server 2019 節點集區目前為預覽狀態。 如需詳細資訊,請參閱使用containerd
新增 Windows 伺服器節點集區。 - 若針對 Linux 節點集區使用 1.19 版之前的 Kubernetes,則會使用 Docker 作為其容器執行階段。 針對 Windows Server 2019 節點集區,Docker 是預設容器執行階段。
如需 Linux 和 Windows 背景工作角色節點安全性升級程式的詳細資訊,請參閱 安全性修補節點。
節點授權
節點授權是特殊用途的授權模式,專門授權 kubelet API 要求,以防止 East-West 攻擊。 AKS 1.24 + 叢集預設會啟用節點授權。
節點部署
節點會部署到未指派公用 IP 位址的私人虛擬網路子網。 預設會啟用 SSH 以進行疑難排解和管理,而且只能使用內部 IP 位址來存取。
節點儲存體
若要防止儲存,節點應使用 Azure 受控磁碟。 就大部分的 VM 節點大小而言,Azure 受控磁碟是高效能 SSD 所支援的進階磁碟。 儲存於受控磁碟上的資料會自動加密,並在 Azure 平台內待用。 為了改善備援,會在 Azure 資料中心內安全地複寫 Azure 受控磁碟。
惡意多租用戶工作負載
目前,如果惡意使用多租用戶,則 Kubernetes 環境不安全。 適用於節點的額外安全性功能 (例如「Pod 安全性原則」或 Kubernetes RBAC) 會有效率地封鎖惡意探索。 執行惡意多租用戶工作負載時,若要真正確保安全性,應該只信任 Hypervisor。 Kubernetes 的安全性網域會成為整個叢集,而非個別節點。
對於這些類型的惡意多租用戶工作負載,您應使用實際隔離的叢集。 如需如何隔離工作負載的詳細資訊,請參閱 AKS 中叢集隔離的最佳做法。
計算隔離
基於合規性或法規需求,某些工作負載可能需要與其他客戶工作負載高度隔離。 針對這些工作負載,Azure 提供隔離 VM 以用作 AKS 叢集中的代理程式節點。 這些 VM 不受特定硬體類型的限制,並且專用於單一客戶。
在建立 AKS 叢集或新增節點集區時,請選取其中一個隔離 VM 大小作為「節點大小」。
叢集升級
Azure 提供升級協調流程工具來升級 AKS 叢集和元件、維護安全性和合規性,以及存取最新功能。 此升級協調流程包含 Kubernetes 主要元件和代理程式元件。
若要啟動升級程序,請指定其中一個列出的可用 Kubernetes 版本。 然後,Azure 會安全地隔離和清空每個 AKS 節點,並升級。
隔離和清空
在升級程序期間,AKS 節點會個別與叢集隔離,防止對其排程新的 Pod。 這些節點接著會清空並升級,如下所示:
- 新的節點會部署至節點集區。
- 此節點會執行最新的 OS 映像和修補程式。
- 已識別其中一個現有節點以進行升級。
- 已識別節點上的 Pod 會正常終止,並排程於節點集區中的其他節點。
- 從 AKS 叢集刪除已清空的節點。
- 除非在升級程序期間成功取代所有節點,否則會重複執行步驟 1-4。
如需詳細資訊,請參閱升級 AKS 叢集。
網路安全性
針對內部部署網路的連線和安全性,您可以將 AKS 叢集部署到現有的 Azure 虛擬網路子網路中。 這些虛擬網路可能會使用 Azure 站對站 VPN 或 Express Route 連線回您的內部部署網路。 使用私人內部 IP 位址來定義 Kubernetes 輸入控制器,以限制服務對內部網路連線的存取。
Azure 網路安全性群組
為了篩選虛擬網路流量流程,Azure 會使用網路安全性群組規則。 這些規則可定義允許或拒絕存取資源的來源和目的地 IP 範圍、連接埠和通訊協定。 系統會建立預設規則,以允許 Kubernetes API 伺服器的 TLS 流量。 您可以使用負載平衡器、連接埠對應或輸入路由來建立服務。 AKS 會自動針對流量修改網路安全性群組。
如果您為 AKS 叢集提供您自己的子網路 (無論是使用 Azure CNI 還是 Kubenet),則請「不」要修改 AKS 所管理的 NIC 層級網路安全性群組。 您應建立更多子網路層級的網路安全性群組,以修改流量的流程。 請確定它們不會干擾管理叢集的必要流量,例如負載平衡器存取、與控制平面的通訊或 輸出。
Kubernetes 網路原則
為了限制叢集中 Pod 之間的網路流量,AKS 支援 Kubernetes 網路原則。 透過網路原則,您可以根據命名空間和標籤選取器,允許或拒絕叢集內的特定網路路徑。
應用程式安全性
若要保護在 AKS 上執行的 Pod,請考慮針對容器Microsoft Defender,以偵測及限制對 Pod 中執行之應用程式的網路攻擊。 執行持續掃描以偵測應用程式弱點狀態的漂移,並實作「藍色/綠色/canary」程序來修補和取代易受攻擊的映像。
Kubernetes 秘密
使用 Kubernetes「祕密」,您可以將敏感性資料插入至 Pod,例如存取認證或金鑰。
- 使用 Kubernetes API 來建立祕密。
- 定義 Pod 或部署,並要求特定的祕密。
- 祕密只會提供給已排程 Pod 所需要的祕密節點。
- 祕密會儲存至 tmpfs,而不會寫入至磁碟。
- 當您在需要秘密的節點上刪除最後一個 Pod 時,秘密會從節點的 tmpfs中刪除。
- 秘密會儲存在指定的命名空間內,而且只能從相同命名空間內的 Pod 存取。
使用祕密可減少 Pod 或服務 YAML 資訊清單中所定義的敏感性資訊。 秘密會以 YAML 資訊清單的形式儲存在 Kubernetes API 伺服器中,供您要求。 此方法僅可供特定 Pod 存取祕密。
注意
原始秘密資訊清單檔案包含 base64 格式的秘密資料。 如需了解更多資訊,請參閱官方文件。 請將這些檔案視為敏感性資訊,並且永遠都不要將其認可至原始檔控制。
Kubernetes 秘密會儲存在 etcd中,這是分散式金鑰值存放區。 AKS 會完全管理 etcd 存放區,並在 Azure 平臺內加密待用資料。
後續步驟
若要開始保護您的 AKS 叢集,請參閱升級 AKS 叢集。
如需相關聯的最佳做法,請參閱 AKS 中叢集安全性和升級的最佳做法以及 AKS 中 Pod 安全性的最佳做法。
如需 Kubernetes 及 AKS 核心概念的詳細資訊,請參閱: