Azure Kubernetes Service (AKS) 中應用程式和叢集的安全性概念
容器安全性可保護從組建到 Azure Kubernetes Service (AKS) 中所執行應用程式工作負載的整個端對端管線。
安全供應鏈包括組建環境和登錄。
Kubernetes 包括安全性元件,例如「Pod 安全性標準」和「祕密」。 Azure 包括 Active Directory、適用於容器的 Microsoft Defender、Azure 原則、Azure Key Vault、網路安全性群組與協調叢集升級等元件。 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 伺服器的存取。 如需詳細資訊,請參閱 Microsoft Entra 與 AKS 的整合 (部分機器翻譯)。
節點安全性
AKS 節點是您所管理和維護的 Azure 虛擬機器 (VM)。
- Linux 節點會執行 Ubuntu 或 Azure Linux 的最佳化版本。
- Windows Server 節點會使用
containerd
容器運行時間執行優化的 Windows Server 2022 版本。
建立或擴大 AKS 叢集時,節點會自動使用最新的作業系統安全性更新和設定進行部署。
注意
AKS 叢集執行:
- Kubernetes 1.19 版和更新版本 - Linux 節點集區會使用
containerd
作為其容器執行階段。 Windows Server 2019 和 Windows Server 2022 節點集區會用作containerd
其容器運行時間。 如需詳細資訊,請參閱使用containerd
新增 Windows 伺服器節點集區。 - Kubernetes 1.19 版和較早版本 - Linux 節點集區會使用 Docker 作為其容器執行階段。
如需 Linux 和 Windows 背景工作角色節點安全性升級流程的詳細資訊,請參閱安全性修補節點 (部分機器翻譯)。
執行 Azure 第 2 代 VM 的 AKS 叢集包含信任啟動的支援,其可結合可獨立啟用的技術,例如安全開機和虛擬化版本的受信任平臺模組 (vTPM),以防範進階和持續性的攻擊技術。 系統管理員可使用已驗證和簽署的開機載入器、OS 核心和驅動程式來部署 AKS 背景工作角色節點,以確保基礎 VM 的整個開機鏈結完整性。
節點授權
節點授權是特殊用途的授權模式,專門授權 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 主機網狀架構、主機作業系統和 Hypervisor 隔離。 其專屬於單一客戶。 在建立 AKS 叢集或新增節點集區時,請選取其中一個隔離 VM 大小作為「節點大小」。
- 機密容器 (預覽版) 也是以 Kata 機密容器為基礎,會加密容器記憶體,並在計算期間防止記憶體中的資料成為純文字、可讀取格式及遭到竄改。 其有助於將您的容器與其他容器群組/Pod 以及 VM 節點 OS 核心隔離。 機密容器 (預覽版) 會使用硬體型記憶體加密 (SEV-SNP)。
- Pod 沙箱功能 (預覽版) 提供容器應用程式與容器主機的共用核心和計算資源 (CPU、記憶體與網路) 之間的隔離界限。
網路安全性
針對內部部署網路的連線和安全性,您可以將 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」程序來修補和取代易受攻擊的映像。
保護資源的容器存取
就如同您應授與使用者或群組所需的最低權限一樣,也應限制容器只能執行必要動作和流程。 為了將攻擊風險降到最低,請避免設定需要提升權限或根存取的應用程式和容器。 建議使用 AppArmor 和 seccomp 等內建 Linux 安全性功能,作為 [保護資源存取容器][secure-container-access] 的最佳作法。
Kubernetes 秘密
使用 Kubernetes「祕密」,您可以將敏感性資料插入至 Pod,例如存取認證或金鑰。
- 使用 Kubernetes API 來建立祕密。
- 定義 Pod 或部署,並要求特定的祕密。
- 祕密只會提供給已排程 Pod 所需要的祕密節點。
- 祕密會儲存至 tmpfs,而不會寫入至磁碟。
- 當您刪除節點上最後一個需要祕密的 Pod 時,該祕密就會從節點的 tmpfs 中刪除。
- 祕密會儲存於指定的命名空間內,且僅供相同命名空間中的 Pod 存取。
使用祕密可減少 Pod 或服務 YAML 資訊清單中所定義的敏感性資訊。 相反地,您會要求 Kubernetes API 伺服器中儲存的祕密作為 YAML 資訊清單的一部分。 此方法只會提供特定 Pod 對祕密的存取。
注意
原始祕密資訊清單檔包含 base64 格式的祕密資料。 如需了解更多資訊,請參閱官方文件。 請將這些檔案視為敏感性資訊,並且永遠都不要將其認可至原始檔控制。
Kubernetes 祕密會儲存至 etcd,這是分散式機碼值存放區。 AKS 可完全管理 etcd 存放區,而且會在 Azure 平台內將待用資料加密 (部分機器翻譯)。
下一步
若要開始保護您的 AKS 叢集,請參閱升級 AKS 叢集 (部分機器翻譯)。
如需相關聯的最佳做法,請參閱 AKS 中叢集安全性和升級的最佳做法以及 AKS 中 Pod 安全性的最佳做法。
如需 Kubernetes 及 AKS 核心概念的詳細資訊,請參閱:
- Kubernetes/AKS 叢集和工作負載 (部分機器翻譯)
- Kubernetes/AKS 身分識別 (部分機器翻譯)
- Kubernetes/AKS 虛擬網路 (部分機器翻譯)
- Kube / AKS 儲存體
- Kube / AKS 調整