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 伺服器、排程器等。

根據預設,Kubernetes API 伺服器會使用公用 IP 位址和完整功能變數名稱) (FQDN。 您可以使用 授權的 IP 範圍來限制對 API 伺服器端點的存取。 您也可以建立完整的 私人 叢集,以將 API 伺服器存取限制為您的虛擬網路。

您可以使用 Kubernetes 角色型存取控制 (Kubernetes RBAC) 和 Azure RBAC 來控制對 API 伺服器的存取。 如需詳細資訊,請參閱 Azure AD 與 AKS 的整合

節點安全性

AKS 節點是您管理和維護 (Vm) 的 Azure 虛擬機器。

  • Linux 節點使用 containerd 或 Docker 容器執行時間執行優化的 Ubuntu 散發套件。
  • Windows 伺服器節點使用 containerd 或 Docker 容器執行時間執行優化的 Windows Server 2019 版本。

當 AKS 叢集建立或相應增加時,節點將會自動以最新的 OS 安全性更新和設定進行部署。

注意

AKS 叢集使用:

  • Linux 節點集區的 Kubernetes 1.19 版和更新版本會 containerd 用作其容器執行時間。 使用 containerd with Windows Server 2019 節點集區目前為預覽狀態。 如需詳細資訊,請參閱使用 新增 Windows 伺服器節點集區。
  • 適用于 Linux 節點集區的 v 1.19 之前的 Kubernetes 使用 Docker 作為其容器執行時間。 針對 Windows Server 2019 節點集區,Docker 是預設的容器執行時間。

節點安全性修補程式

Linux 節點

AKS 中的 Linux 節點每個晚上都會透過其發行版本安全性更新通道取得安全性修補程式。 在 AKS 叢集中部署節點時,會自動設定此行為。 為了盡可能減少中斷,並降低對正在執行之工作負載的可能影響,如果安全性修補程式或核心更新需要重新啟動時,節點不會自動重新啟動。 如需如何處理節點重新啟動的詳細資訊,請參閱將安全性和核心更新套用至 AKS 中的節點

夜間更新會將安全性更新套用至節點上的 OS,但用來建立叢集節點的節點映射仍會保持不變。 如果將新的 Linux 節點新增至您的叢集,則會使用原始映射來建立節點。 這個新節點將會在每晚進行自動檢查時,收到所有安全性和核心更新,但在所有檢查和重新開機完成之前,都將維持未修補狀態。 您可以使用節點映射升級來檢查和更新叢集所使用的節點映射。 如需節點映射升級的詳細資訊,請參閱 Azure Kubernetes Service (AKS) 節點映射升級

Windows Server 節點

針對 Windows Server 節點,Windows Update 不會自動執行並套用最新的更新。 將 AKS 叢集中的 Windows Server 節點集區升級設定為定期 Windows Update 發行週期和您自己的驗證程式。 此升級程序會建立節點來執行最新的 Windows Server 映像和修補程式,然後移除較舊的節點。 如需此程序的詳細資訊,請參閱在 AKS 中升級節點集區

節點部署

節點會部署至私人虛擬網路子網路中,且不會指派公用 IP 位址。 針對疑難排解和管理用途,預設會啟用 SSH,而且只能使用內部 IP 位址來存取。

節點儲存體

若要防止儲存,節點應使用 Azure 受控磁碟。 針對大部分的 VM 節點大小,Azure 受控磁碟是由高效能 Ssd 所支援的進階版磁片。 儲存於受控磁碟上的資料會自動加密,並在 Azure 平台內待用。 為了改善冗余,Azure 受控磁碟會在 Azure 資料中心內安全地複寫。

惡意的多租使用者工作負載

目前,Kubernetes 環境不安全,不會受到惡意的多租使用者使用。 額外的安全性功能,例如 Pod 安全性原則 或節點的 Kubernetes RBAC,可有效率地封鎖惡意探索。 若要在執行惡意多租使用者工作負載時取得真正的安全性,請只信任虛擬程式。 Kubernetes 的安全性網域會成為整個叢集,而非個別節點。

對於這些類型的惡意多租用戶工作負載,您應使用實際隔離的叢集。 如需有關隔離工作負載方式的詳細資訊,請參閱 AKS 中叢集隔離的最佳作法

計算隔離

基於合規性或法規需求,某些工作負載可能需要與其他客戶工作負載的高度隔離。 針對這些工作負載,Azure 會提供 隔離的 vm 作為 AKS 叢集中的代理程式節點。 這些 Vm 會隔離到特定的硬體類型,而且專用於單一客戶。

建立 AKS 叢集或新增節點集區時,請選取 其中一個隔離的 vm 大小 作為 節點大小

叢集升級

Azure 提供升級協調流程工具,可升級 AKS 叢集和元件、維護安全性和合規性,以及存取最新功能。 此升級協調流程包含 Kubernetes 主要元件和代理程式元件。

若要開始升級程式,請指定其中一個 列出的可用 Kubernetes 版本。 接著,Azure 會安全地隔離和耗盡每個 AKS 節點和升級。

隔離和清空

在升級過程中,系統會從叢集個別隔離 AKS 節點,以防止新的 pod 進行排程。 這些節點接著會清空並升級,如下所示:

  1. 新節點會部署到節點集區中。
    • 此節點會執行最新的 OS 映射和修補程式。
  2. 已識別其中一個現有的節點以進行升級。
  3. 已識別節點上的 pod 會在節點集區中的其他節點上正常地終止並排程。
  4. 已清空的節點會從 AKS 叢集中刪除。
  5. 步驟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 For Kubernetes 來偵測和限制對您的 pod 中執行之應用程式的網路攻擊。 執行持續的掃描以偵測應用程式的弱點狀態漂移,並執行「藍色/綠色/上階」程式來修補和取代易受攻擊的映射。

Kubernetes 秘密

使用 Kubernetes 秘密,您可以將敏感性資料插入 pod 中,例如存取認證或金鑰。

  1. 使用 Kubernetes API 建立秘密。
  2. 定義您的 pod 或部署,並要求特定的秘密。
    • 只有已排程的 pod 需要它們時,才會提供秘密給這些節點。
    • 密碼會儲存在 tmpfs中,而不會寫入磁片。
  3. 當您刪除需要秘密之節點上的最後一個 pod 時,會從節點的 tmpfs 中刪除該秘密。
    • 祕密儲存在指定的命名空間內,且僅供相同命名空間中的 Pod 存取。

使用秘密可減少 pod 或服務 YAML 資訊清單中所定義的機密資訊。 秘密會以 YAML 資訊清單的形式儲存在 Kubernetes API 伺服器中,供您要求。 此方法僅可供特定 Pod 存取祕密。

注意

未經處理的秘密資訊清單檔案包含以 base64 格式表示的機密資料 (如需詳細資訊,請參閱 官方檔) 。 將這些檔案視為機密資訊,而且永遠不會將它們認可到原始檔控制。

Kubernetes 秘密會儲存在 etcd 中,也就是分散式的索引鍵/值存放區。 Etcd store 完全受 AKS 管理,且 資料會在 Azure 平臺中待用加密

下一步

若要開始保護您的 AKS 叢集,請參閱升級 AKS 叢集

如需相關的最佳作法,請參閱 AKS 中叢集 安全性和升級的最佳做法 ,以及 AKS 中的 pod 安全性最佳作法

如需有關核心 Kubernetes 和 AKS 概念的詳細資訊,請參閱: