容器安全保護整個端到端的管線,從建置到運行於 Azure Kubernetes Service (AKS) 中的應用程式工作負載。
安全供應鏈包括組建環境和登錄。
Kubernetes 包括安全性元件,例如「Pod 安全性標準」和「祕密」。 Azure 包含 Active Directory、Microsoft Defender for Containers、Azure 原則、Azure Key Vault、網路安全群組及編排叢集升級等元件。 AKS 合併這些安全性元件,以:
- 提供完整的驗證和授權劇本。
- 套用 AKS 內建的 Azure 原則 來保護你的應用程式。
- 使用適用於容器的 Microsoft Defender,從建置到應用程式,提供端對端深入解析。
- 讓您的 AKS 叢集持續執行最新的 OS 安全性更新和 Kubernetes 版本。
- 提供安全的 Pod 流量和敏感性認證存取。
本文將介紹對 AKS 中的應用程式進行保護的核心概念。
這很重要
自2025 年 11 月 30 日起,Azure Kubernetes Service (AKS) 將不再支援或提供 Azure Linux 2.0 的安全更新。 Azure Linux 2.0 節點映像已凍結在 202512.06.0 發行版本。 自 2026 年 3 月 31 日起,節點映像將被移除,且你將無法擴展節點池。 遷移到支援的 Azure Linux 版本時,可以升級你的節點池到 支援的 Kubernetes 版本,或遷移到 osSku AzureLinux3。 欲了解更多資訊,請參閱 退休GitHub議題 及 Azure 更新退休公告。 欲掌握最新公告與更新,請參考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 伺服器的存取。 欲了解更多資訊,請參閱 Microsoft Entra 與 AKS 的整合。
節點安全性
AKS 節點是你管理和維護的 Azure 虛擬機(VM)。
- Linux 節點運行的是優化版的 Ubuntu 或 Azure Linux。
- Windows Server節點會使用
containerd容器執行時執行優化的 Windows Server 版本。
當 AKS 叢集建立或相應增加時,節點將會自動以最新的 OS 安全性更新和設定進行部署。
附註
AKS 叢集執行:
- Kubernetes 1.19 版和更新版本 - Linux 節點集區會使用
containerd作為其容器執行階段。 Windows Server 2019 和 Windows Server 2022 節點池使用containerd作為其容器執行環境。 更多資訊請參閱 新增 Windows Server 節點池containerd。 - Kubernetes 1.19 版和較早版本 - Linux 節點集區會使用 Docker 作為其容器執行階段。
欲了解更多關於 Linux 及 Windows 工作節點安全升級流程的資訊,請參見 Security patching nodes。
運行 Azure 第二代虛擬機的 AKS 叢集支援 Trusted Launch。 此功能可結合您可以獨立啟用的技術,例如安全開機和信任平台模組 (vTPM) 的虛擬化版本,以防止進階和持續性攻擊技術。 系統管理員可使用已驗證和簽署的開機載入器、OS 核心和驅動程式來部署 AKS 背景工作角色節點,以確保基礎 VM 的整個開機鏈結完整性。
容器和安全最佳化作業系統選項
AKS 發行了對兩個新優化的 Linux OS 選項的支援。 Azure Linux OS Guard(預覽版) 是Microsoft開發並針對 Azure 進行優化。 OS Guard 是建立在 Azure Linux 之上,並採用專門配置以支援容器化工作負載並進行安全優化。 適用於 AKS 的 Flatcar 容器 Linux (預覽版) 是以 CNCF 為基礎的廠商中立容器最佳化不可變 OS,最適合在多雲端和內部部署環境中執行。 與其他 Linux 作業系統選項相比,這些作業系統選項提供了更高的安全性,例如:
- Azure Linux OS Guard 和 Flatcar Container Linux for AKS 都有不可變的作業系統,執行時無法修改。 所有作業系統二進位檔、程式庫和靜態配置都是唯讀的,並且位元完整性通常受到加密保護。 這些特殊用途的操作系統以獨立映像的形式提供,並且沒有任何類型的包管理或其他更改操作系統的傳統方法。 使用者的工作負載運行於隔離的環境中,例如容器,並與作業系統隔離,透過沙箱技術進行保護。
- Azure Linux OS Guard 和 Flatcar Container Linux for AKS 都使用 SELinux 進行強制存取控制(Mandatory 存取控制)。
- Azure Linux OS Guard 強制執行 FIPS 及 Trusted Launch啟用,結合安全開機與虛擬化的可信平台模組(vTPM),提升合規性與防範進階及持續攻擊的防護。
在決定要使用哪個容器最佳化的OS選項時,AKS建議如下:
- 如果您正在尋找具有跨雲端支援的廠商中立不可變 OS,請使用 Flatcar Container Linux for AKS (預覽版)。
- 如果你想找一個企業級的不可變作業系統,請使用 Azure Linux OS Guard(預覽版),這是 Microsoft 推薦的。
- 如果您正在尋找具有跨雲端支援的供應商中立的通用作業系統,請使用 Ubuntu 。
- 如果你想找一個企業級通用作業系統,建議使用 Azure Linux,這是 Microsoft 推薦的。
節點授權
節點授權是特殊用途的授權模式,專門授權 kubelet API 要求,以防範東-西攻擊。 AKS 1.24 + 叢集預設會啟用節點授權。
節點部署
節點會部署至私人虛擬網路子網路中,且不會獲指派公用 IP 位址。 為了進行疑難排解和管理,預設會啟用 SSH,而且只能使用內部 IP 位址進行存取。 在叢集和節點集區建立期間或針對現有叢集或節點集區停用 SSH,目前處於預覽狀態。 如需詳細資訊,請參閱管理 SSH 存取 (部分機器翻譯)。
節點儲存體
節點提供儲存時,使用Azure 受控磁碟。 對於大多數 VM 節點大小,Azure 受控磁碟都是以高效能 SSD 為後盾的進階磁碟。 儲存在管理磁碟上的資料會在 Azure 平台上自動靜止加密。 為了提升冗餘性,Azure 受控磁碟 會安全地在 Azure 資料中心內複製。
惡意多租用戶工作負載
目前,如果惡意使用多租用戶,則 Kubernetes 環境不安全。 適用於節點的額外安全性功能 (例如「Pod 安全性原則」或 Kubernetes RBAC) 會有效率地封鎖惡意探索。 執行惡意多租用戶工作負載時,若要真正確保安全性,應該只信任 Hypervisor。 Kubernetes 的安全性網域會成為整個叢集,而非個別節點。
對於這些類型的惡意多租用戶工作負載,您應使用實際隔離的叢集。 如需如何隔離工作負載的詳細資訊,請參閱 AKS 中叢集隔離的最佳做法。
計算隔離
基於合規性或法規需求,某些工作負載可能需要與其他客戶工作負載高度隔離。 針對這些工作負載,Azure 提供:
- 核心隔離容器,用來作為 AKS 叢集中的代理程式節點。 這些容器完全隔離於特定硬體類型,並與 Azure 主機結構、主機作業系統及虛擬機監控程式隔離。 他們專注於單一客戶。 在建立 AKS 叢集或新增節點集區時,請選取其中一個隔離 VM 大小作為「節點大小」。
- 機密容器 (預覽版) 也是以 Kata 機密容器為基礎,會加密容器記憶體,並在計算期間防止記憶體中的資料成為純文字、可讀取格式及遭到竄改。 它有助於將您的容器與其他容器群組/Pod 和 VM 節點 OS 核心隔離。 機密容器 (預覽版) 會使用硬體型記憶體加密 (SEV-SNP)。
- Pod 沙箱功能 (預覽版) 提供容器應用程式與容器主機的共用核心和計算資源 (CPU、記憶體與網路) 之間的隔離界限。
網路安全性
為了與本地網路的連接與安全性,你可以將 AKS 叢集部署到現有的 Azure 虛擬網路子網中。 這些虛擬網路會透過 Azure Site-to-Site 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 for Containers 來偵測並限制針對你 Pod 中運行的應用程式的網路攻擊。 執行持續掃描以偵測應用程式弱點狀態的漂移,並實作「藍色/綠色/canary」程序來修補和取代易受攻擊的映像。
保護容器對資源的存取
就如同您應授與使用者或群組所需的最低權限一樣,也應限制容器只能執行必要動作和流程。 為了將攻擊風險降到最低,請避免設定需要提升權限或根存取的應用程式和容器。 內建的 Linux 安全功能如 AppArmor 和 seccomp 被推薦作為保護容器存取資源的最佳實務。
Kubernetes 秘密
使用 Kubernetes「祕密」,您可以將敏感性資料插入至 Pod,例如存取認證或金鑰。
- 使用 Kubernetes API 來建立祕密。
- 定義 Pod 或部署,並要求特定的祕密。
- 祕密只會提供給已排程 Pod 所需要的祕密節點。
- 祕密會儲存至 tmpfs,而不會寫入至磁碟。
- 當您刪除節點上最後一個需要祕密的 Pod 時,該祕密就會從節點的 tmpfs 中刪除。
- 祕密會儲存於指定的命名空間內,且僅供相同命名空間中的 Pod 存取。
使用祕密可減少 Pod 或服務 YAML 資訊清單中所定義的敏感性資訊。 秘密會以 YAML 資訊清單的形式儲存在 Kubernetes API 伺服器中,供您要求。 此方法僅可供特定 Pod 存取祕密。
附註
原始祕密資訊清單檔包含 base64 格式的祕密資料。 如需了解更多資訊,請參閱官方文件。 請將這些檔案視為敏感性資訊,並且永遠都不要將其認可至原始檔控制。
Kubernetes 祕密會儲存至 etcd,這是分散式機碼值存放區。 AKS 允許 使用客戶管理的密鑰,在 etcd 中加密其他秘密。
後續步驟
若要開始保護您的 AKS 叢集,請參閱升級 AKS 叢集 (部分機器翻譯)。
如需相關聯的最佳做法,請參閱 AKS 中叢集安全性和升級的最佳做法以及 AKS 中 Pod 安全性的最佳做法。
如需 Kubernetes 及 AKS 核心概念的詳細資訊,請參閱: