PCI-DSS 3.2.1 的 AKS 管制叢集架構(第 2 部分 9)

Azure Kubernetes Service (AKS)
Azure 防火牆
Azure 應用程式閘道
適用於雲端的 Microsoft Defender
Azure 監視器

本文說明 Azure Kubernetes Service (AKS) 叢集的參考架構,該叢集會執行工作負載,以符合支付卡產業數據安全性標準(PCI-DSS 3.2.1)。 此架構著重於基礎結構, 而不是 PCI-DSS 3.2.1工作負載。

本文是一系列文章的一部分。 閱讀簡介

建議和範例會從隨附的參考實作擷取:

GitHub logo.GitHub:適用於受管制工作負載 的 Azure Kubernetes Service (AKS) 基準叢集示範受管制的基礎結構。 此實作提供微服務應用程式。 其中包含可協助您體驗基礎結構,並說明網路和安全性控制措施。 應用程式不代表或實作實際的PCI DSS工作負載。

Architecture of an AKS PCI infrastructure.

下載此架構的 Visio 檔案

該網路架構是以中樞輪輻拓撲為基礎。 中樞虛擬網路包含防火牆來控制輸出流量、來自內部部署網路的閘道流量,以及 SRE (網站可靠性工程師) 叢集存取的第三個網路。 有兩個輪輻虛擬網路。 一個輪輻包含 AKS 叢集,該叢集是卡片持有者環境 (CDE) 的元件,並裝載 PCI DSS 工作負載。 其他輪輻會建置虛擬機映射,以用於控制環境的 SRE 存取。

重要

架構和實作建置在 AKS 基準架構。 若要充分利用本文,請熟悉基準元件。 在本節中,我們將強調這兩個架構之間的差異。

元件

以下是此架構中使用的主要元件。 如果您不熟悉這些服務,請參閱 相關 Azure 服務 ,以取得產品文件的連結。

Azure 防火牆

防火牆執行個體會保護輸出網路流量。 如果沒有這一層安全性,流程可能會與惡意的第三方服務通訊,而該服務可能會外泄機密公司數據。

Azure Bastion

基準架構提供 Azure Bastion 的子網,但未布建資源。 此架構會在子網中新增 Azure Bastion,並提供跳躍方塊的安全存取。

Azure Image Builder

在個別的虛擬網路中布建,它會建立具有基底安全性和組態的 VM 映像。 在此架構中,其自定義為使用預安裝 Azure CLI、 kubectl和 Flux CLI 等管理工具來建置安全的節點映像。

跳躍方塊實例的 Azure 虛擬機器擴展集

輪輻網路有跳躍方塊的額外計算。 此擴展集是控管的存取點, kubectl以視需要對AKS叢集執行工具。

Azure 應用程式閘道與整合式 Web 應用程式防火牆 (WAF)

Azure 應用程式閘道 第 7 層的負載平衡。 WAF 會保護來自常見 Web 流量攻擊的連入流量。 執行個體具有公用前端 IP 設定,其會接收使用者要求。

Azure Kubernetes Service (AKS)

裝載基礎結構,這是持卡人數據環境(CDE)的重要部分。 AKS 叢集會部署為私人叢集。 因此,Kubernetes API 伺服器不會公開至公用因特網,而 API 伺服器的流量僅限於您的專用網。

ACR 工作

提供建置和維護容器映像的自動化方式。

Azure Key Vault

儲存和管理叢集作業所需的秘密,例如憑證和加密密鑰。

叢集組態

以下是基準架構的一些重大變更:

節點集區分割

在此架構中,叢集有兩個用戶節點集區和一個系統節點集區。 節點集區的計算選擇會維持不變。 每個節點集區都位於專用子網中,以提供計算層之間新增的網路隔離界限。

注意

計算保護的替代方法是 Azure 機密運算。 AKS 支援機密運算節點,可讓您在硬體型受信任執行環境 (TEE) 內執行敏感性工作負載。 如需詳細資訊,請參閱 Azure Kubernetes Service 上的機密運算節點。

PCI-DSS 3.2.1 需要從作業和連線能力方面與其他工作負載隔離PCI工作負載。

  • 範圍內: PCI 工作負載、其所在的環境,以及作業。

  • 範圍外: 可能共用服務但與範圍內元件隔離的其他工作負載。

關鍵策略是提供必要的分離層級。 慣用的方式是在個別叢集中部署範圍和範圍外元件。 下側會增加新增基礎結構和維護額外負荷的成本。 為了簡單起見,此實作會將共用叢集中的所有元件共置。 如果您選擇遵循該模型,請使用嚴格的叢集內分割策略。 無論您選擇如何維持區隔,請注意,隨著解決方案的發展,某些範圍外元件可能會變成範圍內。

在參考實作中,第二種方法示範的是部署至單一叢集的微服務應用程式。 範圍和範圍外工作負載會在兩個不同的用戶節點集區中分割。 應用程式有兩組服務:一組具有範圍中的Pod,另一組則非範圍。 這兩個集合會分散到兩個用戶節點集區。 使用 Kubernetes 污點時,範圍內部和範圍外 Pod 會部署到不同的節點,且永遠不會共享節點 VM 或網路 IP 空間。

輸入控制器

叢集中的 Kubernetes 輸入控制器已變更為 NGINX。 在基準架構中,使用 Traefik。 這項變更說明此元件可以根據工作負載的需求來變更。

私人 Kubernetes API 伺服器

基準架構已以公用模式部署 AKS 叢集。 這表示所有與 AKS 受控 Kubernetes API 伺服器的通訊都是透過公用因特網進行。 因為PCI-DSS 3.2.1 禁止公開接觸任何系統元件,因此無法接受此架構。 在此受管制的架構中,叢集會部署為私人叢集。 Kubernetes API 伺服器的網路流量僅限於您的專用網。 API 伺服器會透過叢集網路中的私人端點公開。 使用網路安全組和其他內建功能時,安全性會進一步增強。 這些描述於 網路組態中。

Pod 安全性

描述工作負載的安全性需求時,請使用容器的相關 securityContext 設定。 這包括基本設定,例如 fsGrouprunAsGrouprunAsUser / 和 設定allowPrivilegeEscalation為 false (除非必要)。 請清楚定義和移除 Linux 功能,並在 中 seLinuxOptions定義您的 SELinux 選項。

請避免在部署指令清單中依映像的標籤來參考映像。 請改用實際的映像標識碼。 如此一來,您就可以可靠地將容器掃描結果對應到叢集中執行的實際內容。 您可以透過 Azure 原則 來強制執行映像名稱,以在允許的正則表示式中包含影像識別碼模式。 當您使用 Dockerfile FROM 指示時,也請遵循本指南。

網路設定

中樞輪輻全都部署在個別的虛擬網路中,每個都部署在其私人地址空間中。 根據預設,任何兩個虛擬網路之間不允許任何流量。 在網路中,建立子網會套用分割。

各種 Azure 服務和功能和原生 Kubernetes 建構的組合可提供所需的控制層級。 以下是此架構中使用的一些選項。

Diagram of the network configuration.

透過網路安全組的子網安全性 (NSG)

有數個 NSG 可控制叢集進出的流程。 以下列出一些範例:

  • 叢集節點集區會放在專用子網中。 對於每個子網,有 NSG 會封鎖節點 VM 的任何 SSH 存取,並允許來自虛擬網路的流量。 來自節點集區的流量受限於虛擬網路。

  • 來自因特網的所有輸入流量都會被 Azure 應用程式閘道 攔截。 例如,NSG 規則可確保:

    • 只允許使用 HTTPS 流量。
    • 允許來自 Azure 控制平面的流量。 如需詳細資訊,請參閱 允許存取幾個來源IP
  • 在具有 Azure Container Registry 代理程式的子網上,NSG 只允許必要的輸出流量。 例如,允許流量流向 Azure 金鑰保存庫、Microsoft Entra ID、Azure 監視器和其他容器登錄需要交談的服務。

  • 具有跳躍方塊的子網適用於管理作業。 NSG 規則只允許從中樞的 Azure Bastion 進行 SSH 存取,以及有限的輸出連線。 跳躍方塊沒有通用因特網存取權,而且會同時控制在子網 NSG 和 Azure 防火牆。

當您的工作負載、系統安全性代理程式和其他元件部署時,請新增更多 NSG 規則,以協助定義應該允許的流量類型。 流量不應該周游這些子網界限。 由於每個節點集區都位於自己的子網中,因此請觀察流量模式,然後套用更特定的規則。

具有網路原則的 Pod 對 Pod 安全性

此架構會嘗試盡可能實作 Microsoft 的「零信任」原則。

零信任 網路作為概念的範例會在 實作和a0005-o使用者提供的命名空間中a0005-i示範。 所有工作負載命名空間都應該套用嚴格的 NetworkPolicy。 原則定義將取決於在這些命名空間中執行的 Pod。 請確定您負責整備、即時線和啟動探查,以及Log Analytics代理程式所收集計量的津貼。 請考慮在工作負載的埠上進行標準化,讓您可以為允許的容器埠提供一致的 NetworkPolicy 和 Azure 原則。

在某些情況下,這不適用於叢集內的通訊。 並非所有使用者提供的命名空間都可以使用零信任網路(例如 cluster-baseline-settings ,無法使用一個)。

TLS 加密

基準架構會提供 TLS 加密的流量,直到叢集中的輸入控制器為止,但 Pod 對 Pod 通訊處於清除中。 在此架構中,TLS 會使用證書頒發機構單位 (CA) 驗證延伸至 Pod 對 Pod 流量。 該服務網狀結構會提供該 TLS,在允許通訊之前,先強制執行 mTLS 連線和驗證。

Diagram of the network configuration.

實作使用 mTLS。 mTLS 支援可以搭配或不使用服務網格來實作。 如果您使用網格,請確定它與您選擇的憑證簽發者相容。 此實作使用 Open Service Mesh

此實作中的輸入控制器會使用通配符憑證來處理輸入資源不包含特定憑證時的預設流量。 這可能是可以接受的,但如果您的組織原則不允許使用通配符憑證,您可能需要調整輸入控制器,不要使用通配符憑證。

重要

解密持卡人數據的任何元件都會被視為PCI-DSS 3.2.1的範圍,而且會受到與持卡人數據環境中其他元件相同的審查層級。 在此架構中,Azure 應用程式閘道 屬於範圍,因為它會檢查承載作為WAF功能的一部分。 替代架構選項是使用 Azure 防火牆 進階版 作為輸入元件,而不是 WAF,以利用 Azure 防火牆 簽章型 IDPS 功能。 這可讓第一個 TLS 終止位於叢集中。 不過,如果沒有專用的 WAF,您必須使用額外的補償控件來滿足 需求 6.6

Azure 金鑰保存庫 網路限制

所有秘密、金鑰和憑證都會儲存在 Azure 金鑰保存庫 中。 金鑰保存庫 會處理憑證管理工作,例如輪替。 與 金鑰保存庫的通訊是透過 Azure Private Link。 與 金鑰保存庫 相關聯的 DNS 記錄位於私人 DNS 區域中,因此無法從因特網解析。 雖然這會增強安全性,但有一些限制。

Azure 應用程式閘道 不支援從使用 Private Link 公開的 金鑰保存庫 實例,為 HTTP 接聽程式提供 TLS 憑證。 因此,實作會在混合式模型中部署 金鑰保存庫。 它仍然使用 Private Link 進行支持連線,但也允許公用存取 應用程式閘道 整合。 如果此混合式方法不適合您的部署,請將憑證管理程式移至 應用程式閘道。 這會增加管理額外負荷,但 金鑰保存庫 實例將會完全隔離。 如需詳細資訊,請參閱:

DDoS 保護

針對包含公用IP應用程式閘道子網的虛擬網路啟用 Azure DDoS 網路保護。 這麼做可保護基礎結構和工作負載免於大量詐騙要求。 這類要求可能會導致服務中斷或遮罩另一個並行攻擊。 Azure DDoS 的成本相當高,而且通常會在跨越許多IP位址的許多工作負載之間攤銷。 請與您的網路小組合作,協調工作負載的涵蓋範圍。

身分識別存取管理

根據角色的需求定義角色並設定訪問控制。 將角色對應至範圍盡可能窄的 Kubernetes 動作。 避免跨越多個函式的角色。 如果多個角色由一個人填滿,請指派該人員與對等作業函式相關的所有角色。 因此,即使有一個人直接負責叢集和工作負載,請建立 Kubernetes ClusterRoles ,就好像有個別個人一樣。 然後指派該單一個別所有相關角色。

將常設存取降至最低,特別是針對高影響帳戶,例如 SRE/Ops 與叢集的互動。 AKS 控制平面同時支援 Microsoft Entra ID Privileged Access Management (PAM) Just-In-Time (JIT)條件式存取原則,根據您建置的規則,為特殊許可權存取提供額外的必要驗證驗證層。

如需使用 PowerShell 設定條件式存取的詳細資訊,請參閱 New-MgIdentityConditionalAccessPolicy、Get-MgIdentityConditionalAccessPolicyRemove-MgIdentityConditionalAccessPolicy

磁碟加密

當您設計待用數據的加密時,請考慮記憶體磁碟、AKS 代理程序節點 VM、其他 VM,以及任何暫存和操作系統磁碟。

儲存體 磁碟

根據預設,Azure 儲存體 磁碟會以 Microsoft 管理的密鑰加密待用磁碟。 如果您使用非暫時作業系統磁碟或新增數據磁碟,建議您使用客戶管理的密鑰來控制加密金鑰。 加密儲存層外部,且只會將加密的數據寫入到儲存媒體中。 此外,請確定密鑰永遠不會與儲存層相鄰。

如需詳細資訊,請參閱 攜帶您自己的密鑰 (BYOK) 與 Azure 磁碟

請考慮將 BYOK 用於可能與叢集互動的任何其他磁碟,例如您的 Azure Bastion 前端跳躍方塊。 如果您選擇 BYOK,VM 和區域可用性的 SKU 選擇將會受到限制,因為所有 SKU 或區域都不支援此功能。

VM 主機

建議您啟用主機加密功能。 這會加密 VM 主機和任何暫存作業系統,或 VM 主機上快取的數據磁碟。 深入了解 主機型加密的 VM 支援。

此功能會透過 主機型加密 功能,擴充至 AKS 代理程式節點 VM 主機上所儲存的數據。 與 BYOK 類似,此功能可能會限制您的 VM SKU 和區域選擇。

您可以透過 Azure 原則 強制執行這些功能。

叢集備份 (狀態和資源)

如果您的工作負載需要叢集內記憶體,請具有健全且安全的備份和復原程式。 請考慮 Azure 備份 等服務(適用於 Azure 磁碟和 Azure 檔案儲存體),以進行任何 PersistantVolumeClaim的備份和復原。 如果備份系統支援原生 Kubernetes 資源,則有優點。 您可以補充將叢集與已知狀態協調的主要方法,以及備份系統,以取得重要的系統復原技術。 例如,它可以協助在 Kubernetes 資源層級進行一段時間的漂移偵測和編錄系統狀態變更。

備份程式必須分類叢集內或外部備份中的數據。 如果數據位於PCI DSS 3.2.1的範圍內,請延伸合規性界限以包含備份的生命週期和目的地,而備份將會位於叢集外部。 備份可以是攻擊媒介。 設計備份時,請考慮地理限制、待用加密、訪問控制、角色和責任、稽核、存留時間和竄改防護。

叢集內備份系統應該在其作業期間以高許可權執行。 評估將備份代理程式帶入叢集的風險和優點。 代理程式功能是否與叢集中的另一個管理解決方案重疊? 您不需要展開受攻擊面的情況下完成這項工作所需的最小工具集為何?

Azure 原則 考慮

一般而言,套用的 Azure 原則沒有工作負載微調的設定。 在實作中,我們會針對Linux型工作負載計劃套用 Kubernetes 叢集 Pod 安全性限制標準,但不允許微調設定。 請考慮匯出此方案,並自定義其特定工作負載的值。 您可以在一個自定義方案下包含所有 Gatekeeper deny Azure 原則,以及另一個方案下的所有 audit Azure 原則。 這樣做會將封鎖動作從僅限信息的原則分類。

請考慮在kube-system稽核原則中包含 gatekeeper-system 命名空間,以取得新增的可見度。 在拒絕原則中包含這些命名空間可能會導致叢集失敗,因為組態不受支援。

您可以藉由設定一些 Azure 原則 警示來強制執行數據加密。 例如,您可以使用警示來強制執行 BYOK,以偵測叢集資源上沒有 diskEncryptionSetID 的叢集。 另一個原則可以在上 agentPoolProfiles偵測主機式加密是否已啟用。 參考實作不會使用叢集中的任何磁碟,而且操作系統磁碟是暫時的。 這兩個範例原則都已就緒,以提醒安全性功能。 原則會設定為 audit,而不是 block

管理映像

針對您的工作負載使用無散發基底映像。 使用這些映射時,安全性介面區會最小化,因為會移除補充映像,例如殼層和套件管理員。 降低 CVE 命中率的好處。

Azure Container Registry 支援符合 開放式容器計劃 (OCI) 映像格式規格的映像。 這與支持驗證簽章的許可控制器結合,可確保您只執行使用私鑰簽署的映像。 有開放原始碼解決方案,例如 SSE Connaisseur 或 IBM Portieris,可整合這些程式。

保護容器映像和其他 OCI 成品,因為它們包含組織的智慧財產權。 使用客戶管理的金鑰,並加密登錄的內容。 根據預設,數據會以服務管理的密鑰進行待用加密,但有時需要客戶管理的密鑰,才能符合法規合規性標準。 將金鑰儲存在受控密鑰存放區中,例如 Azure 金鑰保存庫。 因為您建立並擁有金鑰,因此您必須負責與金鑰生命週期相關的作業,包括輪替和管理。 如需詳細資訊,請參閱 使用客戶管理的金鑰加密登錄。

Kubernetes API Server 作業存取

Diagram of Kubernetes API Server operational access with a jump box.

您可以限制針對叢集執行的命令,而不一定是以跳躍方塊為基礎建置作業程式。 如果您有 IAM 閘道的 IT 自動化平臺,請使用預先定義的動作來控制和稽核動作的類型。

組建代理程式

管線代理程式應該在受管制叢集的範圍內,因為建置程式可以是威脅向量。 雖然通常會使用 Kubernetes 作為彈性建置代理程式基礎結構,但請勿在受管制工作負載運行時間的界限內執行該程式。 您的組建代理程式不應該直接存取叢集。 例如,只提供 Azure Container Registry 的組建代理程式網路存取權,以推送容器映像、掌管圖表等等。 然後,透過 GitOps 部署。 一般做法是,建置和發行工作流程不應該直接存取您的 Kubernetes 叢集 API(或其節點)。

監視作業

叢集內活動

在中kube-system執行的叢集omsagent內 Pod 是 Log Analytics 收集代理程式。 他們會收集遙測、刮取容器 stdoutstderr 記錄,並收集 Prometheus 計量。 您可以藉由更新 ConfigMap 檔案來 container-azm-ms-agentconfig.yaml 調整其集合設定。 在此參考實作中,會跨 kube-system 和所有工作負載啟用記錄。 根據預設, kube-system 會從記錄中排除。 請確定您正在調整記錄收集程式,以在檢閱記錄和合規性需求時達到平衡成本目標、SRE 效率。

安全性監視

在 適用於雲端的 Microsoft Defender 中使用適用於容器的Defender來檢視和補救安全性建議,以及檢視容器資源的安全性警示。 在套用至持卡人數據環境的各種元件時,啟用 Microsoft Defender 方案。

整合記錄,讓您能夠有效率地檢閱、分析和查詢數據。 Azure 提供數個選項。 您可以開啟 AKS 診斷記錄,並將其傳送至屬於 Azure 監視器Log Analytics 工作區。 另一個選項是將數據整合到安全性資訊和事件管理 (SIEM) 解決方案,例如 Microsoft Sentinel

根據標準,所有 Log Analytics 工作區都會設定為 90 天的保留期間。 請考慮為長期記憶體設定連續匯出。 請勿將機密資訊儲存在記錄數據中,並確定對封存記錄數據的存取權受限於與最近的記錄數據相同的訪問控制層級。

如需完整觀點,請參閱 適用於雲端的 Microsoft Defender 企業上線指南。 本指南說明註冊、數據匯出至 SIEM 解決方案、回應警示,以及建置工作流程自動化。

以下是此架構某些重要元件的功能文件連結。

下一步

安裝及維護防火牆設定,以保護持卡人資料。 請勿針對系統密碼和其他安全性參數使用廠商提供的預設值。