了解適用於 Kubernetes 叢集的 Azure 原則 \(部分機器翻譯\)

Azure 原則擴充網關守衛 v3 是開放原則代理程式 (OPA) 的許可控制站 Webhook,以集中且一致的方式在叢集元件上套用大規模強制執行和保護。 叢集元件包括Pod、容器和命名空間。

Azure 原則可讓您從一個位置管理和報告 Kubernetes 叢集元件的合規性狀態。 藉由使用 Azure 原則 的附加元件或延伸模組,使用 Azure 原則 功能來控管叢集元件,例如使用選取器和覆寫進行安全原則推出和復原的能力。

適用於 Kubernetes 的 Azure 原則支援下列叢集環境:

重要

Azure 原則 附加元件 Helm 模型和 AKS 引擎的附加元件已被取代。 請依照指示 移除附加元件

概觀

藉由在 Kubernetes 叢集上安裝 Azure 原則的附加元件或延伸項目,Azure 原則會制定下列功能:

  • 使用 Azure 原則服務檢查叢集的原則指派。
  • 將原則定義部署至叢集作為 條件約束範本條件約束 自定義資源,或部署為突變範本資源(視原則定義內容而定)。
  • 將稽核和合規性詳細資料回報給 Azure 原則服務。

若要啟用 Azure 原則並與 Kubernetes 叢集搭配使用,請採取下列動作:

  1. 設定 Kubernetes 叢集,並針對啟用 Arc 的 Kubernetes 叢集,安裝 Azure Kubernetes Service (AKS) 附加元件,或 Azure 原則延伸項目 (視叢集類型而定)。

    注意

    如需安裝常見問題,請參閱疑難解答 - Azure 原則 附加元件

  2. 建立或使用面向 Kubernetes 的範例 Azure 原則定義

  3. 將定義指派給 Kubernetes 叢集

  4. 等候驗證

  5. 記錄疑難排解

  6. 檢閱常見問題一節中的限制建議

安裝適用於 AKS 的 Azure 原則 附加元件

必要條件

  1. 註冊資源提供者和預覽功能。

    • Azure 入口網站︰

      Microsoft.PolicyInsights註冊資源提供者。 如需步驟,請參閱 資源提供者和類型

    • Azure CLI:

      # Log in first with az login if you're not using Cloud Shell
      
      # Provider register: Register the Azure Policy provider
      az provider register --namespace Microsoft.PolicyInsights
      
  2. 您需要安裝並設定 Azure CLI 2.12.0 版或更新版本。 執行 az --version 以尋找版本。 如果您需要安裝或升級,請參閱安裝 Azure CLI 模組

  3. AKS 叢集必須是 Azure Kubernetes Service (AKS) 中支援的 Kubernetes 版本。 使用下列腳本來驗證您的 AKS 叢集版本:

    # Log in first with az login if you're not using Cloud Shell
    
    # Look for the value in kubernetesVersion
    az aks list
    
  4. 開啟 Azure 原則延伸模組的連接埠。 Azure 原則 擴充功能會使用這些網域和埠來擷取原則定義和指派,並將叢集的合規性回報回 Azure 原則。

    網域 連接埠
    data.policy.core.windows.net 443
    store.policy.core.windows.net 443
    login.windows.net 443
    dc.services.visualstudio.com 443

完成必要條件之後,請在您想要管理的 AKS 叢集中安裝 Azure 原則 附加元件。

  • Azure 入口網站

    1. 選取 [所有服務],然後搜尋並選取 [Kubernetes 服務],以啟動 Azure 入口網站 中的 AKS 服務

    2. 選取其中一個 AKS 叢集。

    3. 選取 Kubernetes 服務頁面左側的原則。

    4. 在主頁面中,選取 [ 啟用附加元件] 按鈕。

  • Azure CLI

    # Log in first with az login if you're not using Cloud Shell
    
    az aks enable-addons --addons azure-policy --name MyAKSCluster --resource-group MyResourceGroup
    

若要驗證附加元件安裝是否成功,且 azure-policygatekeeper Pod 正在執行,請執行下列命令:

# azure-policy pod is installed in kube-system namespace
kubectl get pods -n kube-system

# gatekeeper pod is installed in gatekeeper-system namespace
kubectl get pods -n gatekeeper-system

最後,執行此 Azure CLI 命令來確認已安裝最新的附加元件,並將 取代為您的資源組名,並以 <cluster-name> AKS 叢集的名稱取代<rg>az aks show --query addonProfiles.azurepolicy -g <rg> -n <cluster-name>。 結果看起來應該類似下列使用服務主體的叢集輸出:

{
  "config": null,
  "enabled": true,
  "identity": null
}

以及使用受控識別之叢集的下列輸出:

 {
   "config": null,
   "enabled": true,
   "identity": {
     "clientId": "########-####-####-####-############",
     "objectId": "########-####-####-####-############",
     "resourceId": "<resource-id>"
   }
 }

安裝已啟用 Azure Arc 的 Kubernetes Azure 原則 擴充功能

kubernetes 的 Azure 原則 可讓您從一個地方管理和報告 Kubernetes 叢集的合規性狀態。 透過 Azure 原則 已啟用 Arc 的 Kubernetes 叢集擴充功能,您可以控管已啟用 Arc 的 Kubernetes 叢集元件,例如 Pod 和容器。

本文說明如何建立顯示擴充功能狀態,以及刪除 Kubernetes 擴充功能的 Azure 原則。

如需延伸模組平臺的概觀,請參閱 Azure Arc 叢集延伸模組

必要條件

如果您已在 Azure Arc 叢集上使用 Helm 直接部署 kubernetes Azure 原則,而不需延伸模組,請遵循指示來刪除 Helm 圖表。 完成刪除之後,您就可以繼續進行。

  1. 請確定您的 Kubernetes 叢集是支援的散發套件。

    注意

    下列 Kubernetes 散發套件支援 arc 擴充功能 Azure 原則。

  2. 請確定您已符合此處所列 Kubernetes 擴充功能的所有常見必要條件,包括將叢集連線至 Azure Arc

    注意

    這些區域中已啟用 Arc 的 Kubernetes 叢集支援 Azure 原則 擴充功能

  3. 開啟 Azure 原則延伸模組的連接埠。 Azure 原則 擴充功能會使用這些網域和埠來擷取原則定義和指派,並將叢集的合規性回報回 Azure 原則。

    網域 連接埠
    data.policy.core.windows.net 443
    store.policy.core.windows.net 443
    login.windows.net 443
    dc.services.visualstudio.com 443
  4. 安裝 Azure 原則 擴充功能或啟用任何服務功能之前,您的訂用帳戶必須啟用Microsoft.PolicyInsights資源提供者。

    注意

    若要啟用資源提供者,請遵循資源提供者和類型中的步驟,或執行 Azure CLI 或 Azure PowerShell 命令。

    • Azure CLI

      # Log in first with az login if you're not using Cloud Shell
      # Provider register: Register the Azure Policy provider
      az provider register --namespace 'Microsoft.PolicyInsights'
      
    • Azure PowerShell

      # Log in first with Connect-AzAccount if you're not using Cloud Shell
      
      # Provider register: Register the Azure Policy provider
      Register-AzResourceProvider -ProviderNamespace 'Microsoft.PolicyInsights'
      

建立 Azure 原則擴充功能

注意

請注意下列 Azure 原則 擴充功能建立:

  • 默認會啟用自動升級,如果部署任何新的變更,將會更新 Azure 原則 擴充功能次要版本。
  • 傳遞為 參數connectedk8s的任何 Proxy 變數都會傳播至 Azure 原則 延伸模組,以支持輸出 Proxy。

若要為已啟用 Arc 的叢集建立擴充實例,請執行下列命令來取代 <> 您的值:

az k8s-extension create --cluster-type connectedClusters --cluster-name <CLUSTER_NAME> --resource-group <RESOURCE_GROUP> --extension-type Microsoft.PolicyInsights --name <EXTENSION_INSTANCE_NAME>

範例:

az k8s-extension create --cluster-type connectedClusters --cluster-name my-test-cluster --resource-group my-test-rg --extension-type Microsoft.PolicyInsights --name azurepolicy

範例輸出:

{
  "aksAssignedIdentity": null,
  "autoUpgradeMinorVersion": true,
  "configurationProtectedSettings": {},
  "configurationSettings": {},
  "customLocationSettings": null,
  "errorInfo": null,
  "extensionType": "microsoft.policyinsights",
  "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/my-test-rg/providers/Microsoft.Kubernetes/connectedClusters/my-test-cluster/providers/Microsoft.KubernetesConfiguration/extensions/azurepolicy",
 "identity": {
    "principalId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "tenantId": null,
    "type": "SystemAssigned"
  },
  "location": null,
  "name": "azurepolicy",
  "packageUri": null,
  "provisioningState": "Succeeded",
  "releaseTrain": "Stable",
  "resourceGroup": "my-test-rg",
  "scope": {
    "cluster": {
      "releaseNamespace": "kube-system"
    },
    "namespace": null
  },
  "statuses": [],
  "systemData": {
    "createdAt": "2021-10-27T01:20:06.834236+00:00",
    "createdBy": null,
    "createdByType": null,
    "lastModifiedAt": "2021-10-27T01:20:06.834236+00:00",
    "lastModifiedBy": null,
    "lastModifiedByType": null
  },
  "type": "Microsoft.KubernetesConfiguration/extensions",
  "version": "1.1.0"
}

顯示 Azure 原則擴充功能

若要檢查擴充實例建立是否成功,並檢查延伸模組元數據,請執行下列命令來取代 <> 您的值:

az k8s-extension show --cluster-type connectedClusters --cluster-name <CLUSTER_NAME> --resource-group <RESOURCE_GROUP> --name <EXTENSION_INSTANCE_NAME>

範例:

az k8s-extension show --cluster-type connectedClusters --cluster-name my-test-cluster --resource-group my-test-rg --name azurepolicy

若要驗證延伸模組安裝是否成功,且 azure-policy 和 gatekeeper Pod 正在執行,請執行下列命令:

# azure-policy pod is installed in kube-system namespace
kubectl get pods -n kube-system

# gatekeeper pod is installed in gatekeeper-system namespace
kubectl get pods -n gatekeeper-system

刪除 Azure 原則擴充功能

若要刪除擴充實例,請執行下列命令來取代 <> 您的值:

az k8s-extension delete --cluster-type connectedClusters --cluster-name <CLUSTER_NAME> --resource-group <RESOURCE_GROUP> --name <EXTENSION_INSTANCE_NAME>

建立原則定義

用來管理 Kubernetes 的語言結構 Azure 原則 遵循現有原則定義的語言結構。 Azure 原則 內建原則連結庫中有可用來控管叢集元件的範例定義檔案。

適用於 Kubernetes 的 Azure 原則 也支援在 Azure Kubernetes Service 叢集和已啟用 Azure Arc 的 Kubernetes 叢集的元件層級建立自定義定義。 條件約束範本和突變範例可在 Gatekeeper 社群連結庫中取得Azure 原則的 VS Code 擴充功能可用來協助將現有的條件約束範本或突變範本轉譯為自定義 Azure 原則 原則定義。

使用的資源提供者模式Microsoft.Kubernetes.Data,會使用效果稽核拒絕停用變動來管理 Kubernetes 叢集。

核和拒絕必須提供使用 OPA 條件約束架構和 Gatekeeper v3 的特定詳細數據屬性。

做為原則定義中 details.templateInfo 或 details.constraintInfo 屬性的一部分,Azure 原則 將這些 CustomResourceDefinitions(CRD) 的 URI 或 Base64Encoded 值傳遞至附加元件。 Rego 是 OPA 和 Gatekeeper 支援以驗證 Kubernetes 叢集要求的語言。 藉由支援 Kubernetes 管理的現有標準,Azure 原則 可讓您重複使用現有的規則,並將其與 Azure 原則 配對,以取得統一的雲端合規性報告體驗。 如需詳細資訊,請參閱 什麼是 Rego?

指派原則定義

若要將原則定義指派給 Kube 叢集,您必須獲指派適當的 Azure 角色型存取控制 (Azure RBAC) 原則指派作業。 Azure 內建角色資源原則參與者擁有者具有這些作業。 若要深入瞭解,請參閱 Azure 原則 中的 Azure RBAC 許可權。

使用 Azure 入口網站搭配下列步驟,尋找用於管理叢集的內建原則定義。 如果使用自訂原則定義,請依名稱或您所建立的類別來搜尋它。

  1. 在 Azure 入口網站 中啟動 Azure 原則 服務。 選取 左窗格中的 [所有服務 ],然後搜尋並選取 [ 原則]。

  2. 在 [Azure 原則] 頁面的左窗格中,選取 [定義]

  3. 從 [類別] 下拉式清單方塊中,使用 [全選] 來清除篩選,然後選取 [Kubernetes]

  4. 選取原則定義,然後選取 [指派] 按鈕。

  5. [範圍 ] 設定為將套用原則指派之 Kubernetes 叢集的管理群組、訂用帳戶或資源群組。

    注意

    指派 Kubernetes 定義的 Azure 原則 時,Scope 必須包含叢集資源。

  6. 為原則指派指定一個名稱描述,您可以輕鬆地用來識別它。

  7. 將 [原則 強制執行 ] 設定為下列其中一個值:

    • [已啟用]: 在叢集上強制執行原則。 會拒絕具有違規的 Kube 許可要求。

    • [已啟用]: 不要在叢集上強制執行原則。 會拒絕具有違規的 Kube 許可要求。 合規性評定結果仍可供使用。 當您將新的原則定義推出至執行中的叢集時, Disabled 選項有助於測試原則定義,因為不允許違規的許可要求。

  8. 選取 [下一步]。

  9. 設定參數值

    • 若要從原則評估中排除 Kubernetes 命名空間,請在參數 命名空間排除中指定命名空間清單。 建議您排除:kube-system、gatekeeper-systemazure-arc
  10. 選取 [檢閱 + 建立]。

或者,使用 指派原則 - 入口網站 快速入門來尋找並指派 Kubernetes 原則。 搜尋 Kubernetes 原則定義,而不是範例 稽核 VM

重要

內建原則定義適用於 Kubernetes 類別 中的 Kubernetes 叢集。 如需內建原則定義的清單,請參閱 Kubernetes 範例

原則評估

此附加元件會每隔 15 分鐘向 Azure 原則服務檢查原則指派中的變更。 在此重新整理週期期間,附加元件會檢查是否有變更。 這些變更會觸發條件約束範本和條件約束的建立、更新或刪除。

在 Kubernetes 叢集中,如果命名空間具有叢集適當的標籤,則不會拒絕違規的許可要求。 合規性評定結果仍可供使用。

  • 已啟用 Azure Arc 的 Kubernetes 叢集: admission.policy.azure.com/ignore

注意

雖然叢集管理員可能有權建立及更新 Azure 原則 附加元件所安裝的條件約束範本和條件約束資源,但不支持這些案例,因為會覆寫手動更新。 Gatekeeper 會繼續評估在安裝附加元件之前存在的原則,並指派 Azure 原則 原則定義。

每隔 15 分鐘,附加元件就會呼叫叢集的完整掃描。 在收集完整掃描的詳細資料以及嘗試變更叢集的任何即時評估 (由 Gatekeeper 執行) 之後,此附加元件會將結果回報給 Azure 原則以納入合規性詳細資料,例如任何 Azure 原則指派。 在稽核週期期間,只會傳回作用中原則指派的結果。 稽核結果也可以視為失敗條件約束 [狀態] 欄位中所列的違規。 如需不符合規範資源的詳細資訊,請參閱資源提供者模式的元件詳細數據。

注意

Kubernetes 叢集中 Azure 原則 中的每個合規性報告都包含過去 45 分鐘內的所有違規。 時間戳表示發生違規的時間。

其他一些考慮:

  • 如果叢集訂用帳戶已向 適用於雲端的 Microsoft Defender 註冊,則會自動在叢集上套用 kubernetes 原則 適用於雲端的 Microsoft Defender。

  • 在具有現有 Kubernetes 資源的叢集上套用拒絕原則時,任何不符合新原則的既有資源會繼續執行。 當不符合規範的資源重新排程在不同的節點上時,Gatekeeper 會封鎖資源建立。

  • 當叢集有驗證資源的拒絕原則時,使用者不會在建立部署時收到拒絕訊息。 例如,請考慮包含複本集和 Pod 的 Kubernetes 部署。 當使用者執行 kubectl describe deployment $MY_DEPLOYMENT時,它不會傳回拒絕訊息做為事件的一部分。 不過, kubectl describe replicasets.apps $MY_DEPLOYMENT 傳回與拒絕相關聯的事件。

注意

Init 容器可能會在原則評估期間包含。 若要查看是否包含 init 容器,請檢閱 CRD 以取得下列或類似的宣告:

input_containers[c] {
   c := input.review.object.spec.initContainers[_]
}

條件約束範本衝突

如果條件約束範本具有相同的資源元數據名稱,但原則定義會參考位於不同位置的來源,則會將原則定義視為衝突。 範例:兩個原則定義會參考儲存在不同來源位置的相同template.yaml檔案,例如 Azure 原則 範本存放區 (store.policy.core.windows.net) 和 GitHub。

當指派原則定義及其條件約束範本,但尚未安裝在叢集上且發生衝突時,它們會回報為衝突,而且在解決衝突之前不會安裝到叢集中。 同樣地,任何現有的原則定義及其已存在於與新指派原則定義衝突的叢集上的條件約束範本,會繼續正常運作。 如果現有的指派已更新且無法同步處理條件約束範本,叢集也會標示為衝突。 如需所有衝突訊息,請參閱 AKS 資源提供者模式合規性原因

記錄

身為 Kubernetes 控制器/容器, azure 原則閘道守衛 Pod 都會在 Kubernetes 叢集中保留記錄。 一般而言, azure 原則 記錄可用來針對叢集和合規性報告的原則擷取問題進行疑難解答。 gatekeeper-controller-manager Pod 記錄可用來針對運行時間拒絕進行疑難解答。 網關守衛-稽核 Pod 記錄可用來針對現有資源的稽核進行疑難解答。 記錄可以在 Kubernetes 叢集的 [見解] 頁面中公開。 如需詳細資訊,請參閱使用適用於容器的 Azure 監視器來監視您的 Kubernetes 叢集效能

若要檢視附加元件記錄,請使用 kubectl

# Get the azure-policy pod name installed in kube-system namespace
kubectl logs <azure-policy pod name> -n kube-system

# Get the gatekeeper pod name installed in gatekeeper-system namespace
kubectl logs <gatekeeper pod name> -n gatekeeper-system

如果您嘗試針對出現在合規性結果中的特定 ComplianceReasonCode 進行疑難解答,您可以搜尋該程式碼的 azure 原則 Pod 記錄,以查看完整的隨附錯誤。

如需詳細資訊,請參閱 Gatekeeper 文件中的 Gatekeeper 偵錯。

檢視閘道守衛成品

附加元件下載原則指派,並在叢集上安裝條件約束範本和條件約束之後,它會使用原則指派標識符和原則定義標識符等 Azure 原則 信息來標註這兩者。 若要設定用戶端以檢視附加元件相關成品,請使用下列步驟:

  1. 設定 kubeconfig 叢集。

    針對 Azure Kubernetes Service 叢集,請使用下列 Azure CLI:

    # Set context to the subscription
    az account set --subscription <YOUR-SUBSCRIPTION>
    
    # Save credentials for kubeconfig into .kube in your home folder
    az aks get-credentials --resource-group <RESOURCE-GROUP> --name <CLUSTER-NAME>
    
  2. 測試叢集連線。

    執行 kubectl cluster-info 命令。 成功執行的每個服務都會以執行所在位置的 URL 回應。

檢視附加元件條件約束範本

若要檢視附加元件下載的條件約束範本,請執行 kubectl get constrainttemplates。 開頭 k8sazure 的條件約束範本是附加元件所安裝的條件約束範本。

檢視附加元件突變範本

若要檢視附加元件下載的突變範本,請執行 kubectl get assignkubectl get assignmetadatakubectl get modifyset

取得 Azure 原則 對應

若要識別下載至叢集的條件約束範本與原則定義之間的對應,請使用 kubectl get constrainttemplates <TEMPLATE> -o yaml。 結果看起來類似下列輸出:

apiVersion: templates.gatekeeper.sh/v1beta1
kind: ConstraintTemplate
metadata:
    annotations:
    azure-policy-definition-id: /subscriptions/<SUBID>/providers/Microsoft.Authorization/policyDefinitions/<GUID>
    constraint-template-installed-by: azure-policy-addon
    constraint-template: <URL-OF-YAML>
    creationTimestamp: "2021-09-01T13:20:55Z"
    generation: 1
    managedFields:
    - apiVersion: templates.gatekeeper.sh/v1beta1
    fieldsType: FieldsV1
...

<SUBID> 是訂用帳戶標識碼,而 <GUID> 是對應原則定義的標識碼。 <URL-OF-YAML> 是附加元件下載以在叢集上安裝的條件約束範本來源位置。

一旦您擁有附加元件下載條件約束範本的名稱,您就可以使用名稱來查看相關的條件約束。 使用 kubectl get <constraintTemplateName> 來取得清單。 附加元件所安裝的條件約束從 開始 azurepolicy-

檢視條件約束詳細數據

條件約束具有原則定義和指派之違規和對應的詳細數據。 若要檢視詳細資料,請使用 kubectl get <CONSTRAINT-TEMPLATE> <CONSTRAINT> -o yaml。 結果看起來類似下列輸出:

apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sAzureContainerAllowedImages
metadata:
  annotations:
    azure-policy-assignment-id: /subscriptions/<SUB-ID>/resourceGroups/<RG-NAME>/providers/Microsoft.Authorization/policyAssignments/<ASSIGNMENT-GUID>
    azure-policy-definition-id: /providers/Microsoft.Authorization/policyDefinitions/<DEFINITION-GUID>
    azure-policy-definition-reference-id: ""
    azure-policy-setdefinition-id: ""
    constraint-installed-by: azure-policy-addon
    constraint-url: <URL-OF-YAML>
  creationTimestamp: "2021-09-01T13:20:55Z"
spec:
  enforcementAction: deny
  match:
    excludedNamespaces:
    - kube-system
    - gatekeeper-system
    - azure-arc
  parameters:
    imageRegex: ^.+azurecr.io/.+$
status:
  auditTimestamp: "2021-09-01T13:48:16Z"
  totalViolations: 32
  violations:
  - enforcementAction: deny
    kind: Pod
    message: Container image nginx for container hello-world has not been allowed.
    name: hello-world-78f7bfd5b8-lmc5b
    namespace: default
  - enforcementAction: deny
    kind: Pod
    message: Container image nginx for container hello-world has not been allowed.
    name: hellow-world-89f8bfd6b9-zkggg

針對附加元件進行疑難解答

如需針對 Kubernetes 附加元件進行疑難解答的詳細資訊,請參閱 Azure 原則 疑難解答文章的 Kubernetes 一節

如需 Arc 延伸模組相關問題的 Azure 原則 延伸模組,請移至:

如需 Azure 原則 相關問題,請移至:

Azure 原則 AKS 變更記錄的附加元件

Azure 原則 的 AKS 附加元件有一個版本號碼,表示附加元件映射版本。 當附加元件上新引進功能支援時,版本號碼就會增加。

本節將協助您識別叢集上安裝的附加元件版本,並共用每個 AKS 叢集所安裝之 Azure 原則 附加元件版本的歷程記錄數據表。

識別叢集上安裝的附加元件版本

Azure 原則 附加元件會針對每個版本使用標準語意版本控制架構。 若要識別所使用的 Azure 原則 附加元件版本,您可以執行下列命令:kubectl get pod azure-policy-<unique-pod-identifier> -n kube-system -o json | jq '.spec.containers[0].image'

若要識別 Azure 原則 附加元件所使用的 Gatekeeper 版本,您可以執行下列命令:kubectl get pod gatekeeper-controller-<unique-pod-identifier> -n gatekeeper-system -o json | jq '.spec.containers[0].image'

最後,若要識別您使用的 AKS 叢集版本,請遵循此連結的 AKS 指引。

每個 AKS 叢集版本可用的附加元件版本

1.3.0

引進錯誤原則的錯誤狀態,使其與不符合規範狀態的原則區別開來。 新增 v1 條件約束範本的支援,以及在突變原則中使用 excludedNamespaces 參數。 在安裝後新增條件約束範本的錯誤狀態檢查。

  • 發行於 2024 年 2 月
  • Kubernetes 1.25+
  • 閘道守衛 3.14.0

1.2.1

  • 發行於 2023 年 10 月
  • Kubernetes 1.25+
  • 閘道守衛 3.13.3

1.1.0

  • 發行日期:2023年7月
  • Kubernetes 1.27+
  • 閘道守衛 3.11.1

1.0.1

  • 發行於 2023 年 6 月
  • Kubernetes 1.24+
  • 閘道守衛 3.11.1

1.0.0

適用於 Kubernetes 的 Azure 原則 現在支援突變以大規模補救 AKS 叢集!

拿掉附加元件

從 AKS 移除附加元件

若要從 AKS 叢集移除 Azure 原則 附加元件,請使用 Azure 入口網站 或 Azure CLI:

  • Azure 入口網站

    1. 選取 [所有服務],然後搜尋並選取 [Kubernetes 服務],以啟動 Azure 入口網站 中的 AKS 服務

    2. 選取您想要停用 Azure 原則 附加元件所在的 AKS 叢集。

    3. 選取 Kubernetes 服務頁面左側的原則。

    4. 在主頁面中,選取 [ 停用附加元件] 按鈕。

  • Azure CLI

    # Log in first with az login if you're not using Cloud Shell
    
    az aks disable-addons --addons azure-policy --name MyAKSCluster --resource-group MyResourceGroup
    

從已啟用 Azure Arc 的 Kubernetes 移除附加元件

注意

Azure 原則 附加元件 Helm 模型現在已被取代。 請改為為已啟用 Azure Arc 的 Kubernetes 選擇 Azure 原則 延伸模組。

若要從已啟用 Azure Arc 的 Kubernetes 叢集中移除 Azure 原則 附加元件和 Gatekeeper,請執行下列 Helm 命令:

helm uninstall azure-policy-addon

從 AKS 引擎移除附加元件

注意

AKS 引擎產品現在已針對 Azure 公用雲端客戶淘汰。 請考慮針對受控 Kubernetes 使用 Azure Kubernetes Service (AKS),或針對自我管理的 Kubernetes 使用叢集 API 提供者 Azure 沒有規劃的新功能;此專案只會更新 CVE 和類似的專案,而 Kubernetes 1.24 是接收更新的最終版本。

若要從 AKS 引擎叢集中移除 Azure 原則 附加元件和 Gatekeeper,請使用與附加元件安裝方式一致的 方法:

  • 如果在 AKS 引擎的叢集定義中設定 附加元件 屬性來安裝:

    將 azure 原則的 addons 屬性變更為 false 之後,將叢集定義重新部署至 AKS 引擎:

    "addons": [{
        "name": "azure-policy",
        "enabled": false
    }]
    

    如需詳細資訊,請參閱 AKS 引擎 - 停用 Azure 原則 附加元件

  • 如果與 Helm Chart 一起安裝,請執行下列 Helm 命令:

    helm uninstall azure-policy-addon
    

限制

  • 如需一般 Azure 原則 定義和指派限制,請檢閱 Azure 原則 記載的限制
  • Azure 原則 Kubernetes 的附加元件只能部署到 Linux 節點集區。
  • 每個叢集 Azure 原則 附加元件支援的 Pod 數目上限:10,000 個
  • 每個叢集每個原則的不符合規範記錄數目上限: 500
  • 每個訂用帳戶不符合規範的記錄數目上限: 100 萬筆
  • 不支援在 Azure 原則 附加元件外部安裝 Gatekeeper。 在啟用 Azure 原則 附加元件之前,請先卸載先前的 Gatekeeper 安裝所安裝的任何元件。
  • Microsoft.Kubernetes.Data Resource Provider 模式無法使用不符合規範的原因。 使用 元件詳細數據
  • 資源提供者模式不支援元件層級豁免。 Azure 原則 定義中提供參數支援,以排除並包含特定命名空間。
  • metadata.gatekeeper.sh/requires-sync-data使用條件約束範本中的註釋來設定將數據從叢集復寫到 OPA 快取,目前只允許內建原則使用。 這是因為若未小心使用,閘道守衛 Pod 的資源使用量可能會大幅增加。

下列限制僅適用於 AKS 的 Azure 原則 附加元件:

常見問題集

在安裝時,Azure 原則 附加元件/Azure 原則 延伸模組會在我的叢集上部署什麼?

Azure 原則附加元件需要三個 Gatekeeper 元件才能執行:一個稽核 Pod 和兩個 Webhook Pod 複本。 也會安裝一個 Azure 原則 Pod 和一個 Azure 原則 Webhook Pod。

我應該預期 Azure 原則 附加元件/擴充功能在每個叢集上使用多少資源耗用量?

在叢集上執行的 Kubernetes 元件 Azure 原則 會耗用更多資源,因為 Kubernetes 資源和原則指派計數在叢集中增加,這需要稽核和強制執行作業。 以下是協助您規劃的估計值:

  • 對於單一叢集中少於500個Pod,其限制上限為20個:每個元件的兩個 vCPU 和350 MB的記憶體。
  • 對於單一叢集中超過 500 個 Pod,其限制上限為 40 個:每個元件的 3 個 vCPU 和 600 MB 的記憶體。

是否可以在 Windows Pod 上套用 Kubernetes 定義的 Azure 原則?

Windows Pod 不支援安全性內容。 因此,某些 Azure 原則 定義,例如不允許根許可權,無法在 Windows Pod 中呈報,而且僅適用於 Linux Pod。

Azure 原則 附加元件會收集哪些類型的診斷數據?

Kubernetes 的 Azure 原則 附加元件會收集有限的叢集診斷數據。 此診斷數據是與軟體和效能相關的重要技術數據。 其使用方式如下:

  • 將 Azure 原則 附加元件保持在最新狀態
  • 保持 Azure 原則 附加元件安全、可靠、高效能
  • 改善 Azure 原則 附加元件 - 透過匯總分析使用附加元件

附加元件收集的資訊不是個人資料。 目前會收集下列詳細數據:

  • Azure 原則 附加元件代理程式版本
  • 叢集類型
  • 叢集區域
  • 叢集資源群組
  • 叢集資源標識碼
  • 叢集訂用帳戶標識碼
  • 叢集 OS (範例:Linux)
  • 叢集城市(範例:西雅圖)
  • 叢集州或省(範例:華盛頓)
  • 叢集國家或地區(範例:美國)
  • 在原則評估的代理程式安裝期間,Azure 原則 附加元件所遇到的例外狀況/錯誤
  • Azure 原則 附加元件未安裝閘道守衛原則定義的數目

安裝 Azure 原則 附加元件時,請記住哪些一般最佳做法?

  • 使用系統節點集區搭配 CriticalAddonsOnly Taint 來排程 Gatekeeper Pod。 如需詳細資訊,請參閱 使用系統節點集區
  • 保護來自 AKS 叢集的輸出流量。 如需詳細資訊,請參閱 控制叢集節點的輸出流量
  • 如果叢集已啟用 aad-pod-identity,節點受控身分識別 (NMI) Pod 會修改節點的 iptable,來攔截對 Azure 執行個體中繼資料端點的呼叫。 此設定表示即使 Pod 不使用 aad-pod-identity,NMI 也會攔截對元數據端點所做的任何要求。
  • AzurePodIdentityException CRD 可以設定為通知 aad-pod-identity,任何源自於 CRD 中所定義卷標的元數據端點要求,都應該進行 Proxy 處理,而不需在 NMI 中進行任何處理。 具有 kubernetes.azure.com/managedby 的系統 Pod:kube-system 命名空間中的 aks 卷標應該藉由設定 AzurePodIdentityException CRD,在 aad-pod-identity 中排除。 如需詳細資訊,請參閱 停用特定 Pod 或應用程式的 aad-pod-identity。 若要設定例外狀況,請安裝 麥克風例外狀況 YAML

下一步