Proposed Pull Request Change

title description author ms.author ms.date ms.service ms.subservice ms.topic ms.custom zone_pivot_groups
Secure Pod Traffic with Network Policies in Azure Kubernetes Service (AKS) Learn how to implement network policies in AKS to control and secure pod traffic by restricting communication according to the principle of least privilege. schaffererin schaffererin 08/31/2026 azure-kubernetes-service aks-networking how-to ['devx-track-azurecli', 'build-2025', 'biannual', 'aeo-round-2'] azure-cli-or-terraform
📄 Document Links
GitHub View on GitHub Microsoft Learn View on Microsoft Learn
⚠ Content Truncation Detected
The generated rewrite appears to be incomplete.
Original lines: -
Output lines: -
Ratio: -
Raw New Markdown
Generating updated version of doc...
Rendered New Markdown
Generating updated version of doc...
+0 -0
+0 -0
--- title: Secure Pod Traffic with Network Policies in Azure Kubernetes Service (AKS) description: Learn how to implement network policies in AKS to control and secure pod traffic by restricting communication according to the principle of least privilege. author: schaffererin ms.author: schaffererin ms.date: 08/31/2026 ms.service: azure-kubernetes-service ms.subservice: aks-networking ms.topic: how-to ms.custom: - devx-track-azurecli - build-2025 - biannual - aeo-round-2 zone_pivot_groups: azure-cli-or-terraform # Customer intent: As a DevOps engineer, I want to implement network policies in Azure Kubernetes Service, so that I can control and secure pod traffic by restricting communication according to the principle of least privilege. --- # Secure traffic between pods with network policies in Azure Kubernetes Service (AKS) [!INCLUDE [azure-network-policy-manager-linux-retirement](./includes/azure-network-policy-manager-linux-retirement.md)] ## Identify impacted clusters To find AKS clusters with Linux node pools using Azure Network Policy Manager (NPM), run the [Azure Resource Graph query](https://portal.azure.com/?feature.customportal=false#blade/HubsExtension/ArgQueryBlade/query/Resources%20%0A%7C%20where%20type%20%3D%3D%20%22microsoft.containerservice%2Fmanagedclusters%22%20%0A%7C%20mv-expand%20agentPool%20%3D%20properties.agentPoolProfiles%20%0A%7C%20where%20agentPool.osType%20!%3D%20%22Windows%22%20%0A%7C%20extend%20netPol%20%3D%20tolower%28tostring%28properties.networkProfile.networkPolicy%29%29%20%0A%7C%20where%20netPol%20%3D%3D%20%22azure%22%20%0A%7C%20summarize%20by%20name%2C%20location%2C%20resourceGroup%2C%20netPol) that lists all AKS clusters where `agentPool.osType != "Windows"` and `properties.networkProfile.networkPolicy == "azure"`. [!INCLUDE [kubenet-retirement](./includes/kubenet-retirement.md)] Install a network policy engine and create Kubernetes network policies to control the flow of traffic between pods in AKS clusters by using the Azure CLI or Terraform. ## Overview of network policy By default, all pods in an AKS cluster can send and receive traffic without limitations. To improve security, you can define rules that control the flow of traffic. Network policy is a Kubernetes specification that defines access policies for communication between pods. When you use network policies, you define an ordered set of rules to send and receive traffic. You apply the rules to a collection of pods that match one or more label selectors. You define the network policy rules as YAML manifests, and you can include them in wider manifests that also create a deployment or service. ## Network policy options in AKS Azure provides three network policy engines for enforcing network policies: - **Cilium** (for AKS clusters using [Azure CNI Powered by Cilium](./azure-cni-powered-by-cilium.md)) - **Azure Network Policy Manager (NPM)** - **Calico** (an open-source network and network security solution founded by [Tigera][tigera]) We recommend using Cilium, which provides robust support for Kubernetes-native policies, extended features such as [Layer 7 policy](./container-network-security-l7-policy-concepts.md) and [FQDN filtering](./container-network-security-fqdn-filtering-concepts.md), and an eBPF-based dataplane that offers better performance, scalability, and security compared to _IPTables_-based solutions. To enforce the specified policies, Azure NPM uses _IPTables_ for Linux nodes. Policies are translated into sets of allowed and disallowed IP pairs. The system programs these pairs as `IPTable` filter rules. ## Differences between network policy engines: Cilium, Azure NPM, and Calico | Network policy engine | Supported platforms | Supported networking options | Kubernetes specification compliance | Other features | Support | | --------------------- | ------------------- | ---------------------------- | ----------------------------------- | -------------- | ------- | | Cilium | Linux | Azure CNI | Supports all policy types | [FQDN](./container-network-security-fqdn-filtering-concepts.md), L3/4, [L7](./container-network-security-l7-policy-concepts.md) | Azure support and engineering team | | Azure NPM | Linux | Azure CNI | Supports all policy types | N/A | Azure support and engineering team | | Calico | Linux, Windows Server 2019, Windows Server 2022 | Azure CNI (Linux, Windows Server 2019, Windows Server 2022) and kubenet (Linux) | Supports all policy types | While Calico has many features that AKS doesn't block, AKS doesn't test or support them. For more information, see [Calico Guidance](https://docs.tigera.io/calico/latest/getting-started/kubernetes/managed-public-cloud/aks-migrate). | Azure support and engineering team | ## Azure Network Policy Manager limitations Azure NPM has the following limitations: - Scaling beyond _250 nodes_ and _20,000 pods_ isn't supported. If you attempt to scale beyond these limits, you might experience _Out of Memory (OOM)_ errors. For better scalability and IPv6 support, we recommend using or upgrading to [Azure CNI Powered by Cilium](./update-azure-cni.md) for your network policy engine. - IPv6 isn't supported. Otherwise, it fully supports the network policy specifications in Linux. - Starting on September 30, 2026, Azure Kubernetes Service (AKS) no longer supports Azure Network Policy Manager (NPM) on Windows nodes. ## Known issues with Azure Network Policy Manager You might experience temporary connectivity issues for new connections to/from pods on impacted nodes when either editing or deleting a "large enough" network policy. Hitting this race condition never impacts active connections. If this race condition occurs for a node, the Azure NPM pod on that node enters a state where it can't update security rules, which might lead to unexpected connectivity for new connections to/from pods on the impacted node. To mitigate the issue, the Azure NPM pod automatically restarts ~15 seconds after entering this state. While Azure NPM is rebooting on the impacted node, it deletes all security rules, then reapplies security rules for all network policies. While all the security rules are being reapplied, there's a chance of temporary, unexpected connectivity for new connections to/from pods on the impacted node. To limit the chance of hitting this race condition, you can reduce the size of the network policy. This issue is most likely to happen for a network policy with several `ipBlock` sections. A network policy with _four or fewer_ `ipBlock` sections is less likely to hit the issue. ## Load balancer services and network policies Kubernetes service routing for both inbound and outbound services often involves rewriting the source and destination IPs on traffic that's being processed, including traffic that comes into the cluster from a `LoadBalancer` service. This rewrite behavior means that the network policies might not properly process traffic being received from or sent to an external service. For more information, see the [Kubernetes Network Policies documentation][kubernetes-network-policies]. To restrict what sources can send traffic to a load balancer service, use `spec.loadBalancerSourceRanges` to configure traffic blocking that applies before any rewrites occur. For more information, see the [AKS Standard load balancer documentation](/azure/aks/load-balancer-standard#restrict-inbound-traffic-to-specific-ip-ranges). ## Before you begin :::zone pivot="azure-cli" You need the Azure CLI version 2.0.61 or later installed and configured. Find the version using the `az --version` command. If you need to install or upgrade, see [Install Azure CLI][install-azure-cli]. Instead of using a system-assigned identity, you can also use a user-assigned identity. For more information, see [Use managed identities](use-managed-identity.md). :::zone-end :::zone pivot="terraform" - [Terraform installed](https://developer.hashicorp.com/terraform/install), version 1.6 or later. - Azure CLI installed and authenticated. Find the version using the `az --version` command. If you need to install or upgrade, see [Install Azure CLI][install-azure-cli]. You use the Azure CLI to connect to the cluster after Terraform creates it. - [kubectl](https://kubernetes.io/releases/download/) installed. You can install it locally using the [`az aks install-cli`][az-aks-install-cli] command. You use `kubectl` to verify the network policy behavior. :::zone-end :::zone pivot="azure-cli" ## Create an AKS cluster with Azure Network Policy Manager (Linux) 1. Set environment variables for the resource group name, cluster name, and location. Replace the values as needed. ```bash export RESOURCE_GROUP=myResourceGroup export CLUSTER_NAME=myAKSCluster export LOCATION=eastus ``` 1. Create the resource group using the [`az group create`][az-group-create] command. ```azurecli-interactive az group create --resource-group $RESOURCE_GROUP --location $LOCATION ``` 1. Create an AKS cluster using the [`az aks create`][az-aks-create] and specify `azure` for the `network-plugin` and `network-policy`. ```azurecli-interactive az aks create \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --node-count 1 \ --network-plugin azure \ --network-policy azure \ --generate-ssh-keys ``` > [!CAUTION] > Azure Network Policy Manager (NPM) for Linux nodes will be retired on September 30, 2028. For new deployments, we recommend using [Azure CNI Powered by Cilium](./azure-cni-powered-by-cilium.md) with Cilium Network Policy. To migrate existing clusters, see [Migrate from NPM to Cilium Network Policy](./migrate-from-npm-to-cilium-network-policy.md). ## Create an AKS cluster with Calico Create an AKS cluster by using the [`az aks create`][az-aks-create] command. Specify `--network-plugin azure` and `--network-policy calico`. When you specify `--network-policy calico`, you enable Calico on both Linux and Windows node pools. If you plan to add Windows node pools to your cluster, include the `windows-admin-username` and `windows-admin-password` parameters that meet the [Windows Server password requirements][windows-server-password]. To create a username to use as administrator credentials for your Windows Server containers on your cluster, the following command prompts you for a username. Set it to WINDOWS_USERNAME. ```bash echo "Please enter the username to use as administrator credentials for Windows Server containers on your cluster: " && read WINDOWS_USERNAME ``` > [!IMPORTANT] > At this time, using Calico network policies with Windows nodes is available on new clusters using Kubernetes version 1.20 or later with Calico 3.17.2 and requires that you use Azure CNI networking. Windows nodes on AKS clusters with Calico enabled also have Floating IP enabled by default. > > For clusters with only Linux node pools running Kubernetes 1.20 with earlier versions of Calico, the Calico version automatically upgrades to 3.17.2. ## Install Azure Network Policy Manager or Calico on an existing cluster > [!WARNING] > Keep the following information in mind when installing Azure NPM or Calico on an existing cluster: > > - The upgrade process triggers each node pool to be reimaged simultaneously. Upgrading each node pool separately isn't supported. > - Within each node pool, nodes follow the same reimaging process as standard Kubernetes version upgrade operations. This behavior means that buffer nodes are temporarily added to minimize disruption to running applications during the node reimaging process. Any disruptions that might occur are similar to what you might encounter during a node image upgrade or [Kubernetes version upgrade](./upgrade-cluster.md). > > The following information applies to upgrades from kubenet with Calico to Azure CNI Overlay with Calico: > > - In kubenet clusters with Calico enabled, Calico is used as both a CNI and network policy engine. > - In Azure CNI clusters, Calico is used only for network policy enforcement, not as a CNI. This can cause a short delay between when the pod starts and when Calico allows outbound traffic from the pod. Update an existing cluster to install Azure NPM or Calico using the [`az aks update`][az-aks-update] command and specifying `azure` or `calico` for the `--network-policy` parameter. The following example command shows how to install either Azure NPM: ```azurecli-interactive az aks update \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --network-policy azure ``` ## Upgrade an existing cluster with Azure NPM or Calico to Cilium For clusters that already use Azure CNI, update the network data plane to Cilium. Kubenet clusters must first migrate to Azure CNI Overlay and then update the network data plane to Cilium as a separate operation. Review the prerequisites and follow the steps in [Upgrade an existing cluster to Azure CNI Powered by Cilium](upgrade-aks-ipam-and-dataplane.md). ## Connect to the AKS cluster Configure `kubectl` to connect to your cluster using the [`az aks get-credentials`][az-aks-get-credentials] command. This command downloads credentials and configures the Kubernetes CLI to use them. ```azurecli-interactive az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME ``` ## Verify network policy setup To begin verification of network policy, you create a sample application and set traffic rules. 1. Create a namespace named `demo` to run the sample pods using the `kubectl create namespace` command. ```bash kubectl create namespace demo ``` 1. Create a pod named `server` to serve on TCP port 80 using the `kubectl run` command. ```bash kubectl run server -n demo --image=k8s.gcr.io/e2e-test-images/agnhost:2.33 --labels="app=server" --port=80 --command -- /agnhost serve-hostname --tcp --http=false --port "80" ``` 1. Create a pod named `client` to run Bash using the `kubectl run` command. ```bash kubectl run -it client -n demo --image=k8s.gcr.io/e2e-test-images/agnhost:2.33 --command -- bash ``` > [!NOTE] > If you want to schedule the client or server on a particular node, add the following bit before the `--command` argument in the pod creation [`kubectl run`][kubectl-run] command: `--overrides='{"spec": { "nodeSelector": {"kubernetes.io/os": "linux|windows"}}}'`. 1. In a separate window, get the IP address of the `server` pod using the `kubectl get pod` command. ```bash kubectl get pod --output=wide -n demo ``` Your output should resemble the following example output: ```output NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES server 1/1 Running 0 30s 10.224.0.72 akswin22000001 <none> <none> ``` ## Test connectivity with network policies > [!TIP] > To test connectivity without network policies, run the following command in the client shell: `/agnhost connect <server-ip>:80 --timeout=3s --protocol=tcp`. Replace `<server-ip>` with the IP address of the server pod. If the connection is successful, there's no output. 1. Create a file named `demo-policy.yaml` and paste the following YAML manifest: ```yaml apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: demo-policy namespace: demo spec: podSelector: matchLabels: app: server ingress: - from: - podSelector: matchLabels: app: client ports: - port: 80 protocol: TCP ``` 1. Apply the network policy manifest using the [`kubectl apply`][kubectl-apply] command. ```bash kubectl apply -f demo-policy.yaml ``` 1. In the client shell, verify connectivity with the server using the following `/agnhost` command: ```bash /agnhost connect <server-ip>:80 --timeout=3s --protocol=tcp ``` Connectivity with traffic is blocked because the server is labeled with `app=server`, but the client isn't labeled. Your output should resemble the following example output: ```output TIMEOUT ``` 1. Label the `client` and verify connectivity with the server using the `kubectl label` command. ```bash kubectl label pod client -n demo app=client ``` If the connection is successful, there's no output. ## Migrate to self-managed Calico AKS only supports Calico for standard Kubernetes network policies and doesn't test other features. If you want to move to self-managed Calico, follow the Tigera instructions at [Migrate from Azure-managed Calico to self-managed Calico][calico-self-managed]. The Tigera documentation mentions that for self-managed Calico you set `--network-policy none` like in the [uninstall section](#uninstall-azure-network-policy-manager-or-calico). ## Uninstall Azure Network Policy Manager or Calico > [!NOTE] > Keep the following information in mind when uninstalling Azure NPM or Calico from a cluster: > > - The uninstall process **doesn't remove** Custom Resource Definitions (CRDs) and Custom Resources (CRs) used by Calico. These CRDs and CRs all have names ending with either _projectcalico.org_ or _tigera.io_. You can manually remove these CRDs and associated CRs _after_ successfully uninstalling Calico. > - The upgrade doesn't remove any network policy resources in the cluster, but the policies are no longer enforced after the uninstall process. Remove Azure Network Policy Manager or Calico from an existing cluster using the [`az aks update`][az-aks-update] command and specifying `none` for the `--network-policy` parameter. ```azurecli-interactive az aks update \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --network-policy none ``` ## Change cluster network policy The following steps show how to change a cluster's existing network policy to Calico. The procedure requires that the network policy is changed to `none` and then changed to `calico`. The commands use variables specified earlier in this article [Create an AKS cluster with Azure Network Policy Manager (Linux)](#create-an-aks-cluster-with-azure-network-policy-manager-linux). Otherwise, replace `$RESOURCE_GROUP` and `$CLUSTER_NAME` with your cluster's resource group and name. 1. Run the following command to show the cluster's existing network policy. ```azurecli-interactive az aks show \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --query "networkProfile" \ --output table ``` 1. Run the following command to set the network policy to `none`. ```azurecli-interactive az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --network-policy none ``` 1. Run the following command to set the network policy to `calico`. ```azurecli-interactive az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --network-policy calico ``` ## Clean up resources In this article, you created a namespace and two pods and applied a network policy. If you no longer need these resources, you can delete them. Delete the resources using the [`kubectl delete`][kubectl-delete] command. ```bash kubectl delete namespace demo ``` If you followed this article's steps to create an AKS cluster, use the [`az group delete`][az-group-delete] command to delete the AKS resource group and its related resource group with a name that begins with `MC_`. ```azurecli-interactive az group delete --resource-group $RESOURCE_GROUP --no-wait --yes ``` :::zone-end :::zone pivot="terraform" ## Create an AKS cluster with Cilium network policy using Terraform This section shows how to use Terraform to deploy an AKS cluster that uses [Azure CNI Powered by Cilium](./azure-cni-powered-by-cilium.md) for networking and network policy enforcement, and then use a Kubernetes `NetworkPolicy` resource to control pod-to-pod traffic. > [!NOTE] > The sample code for this section is located in the [Azure Terraform GitHub repo](https://github.com/Azure/terraform/tree/master/quickstart/101-aks-network-policy-cilium). You can view the log file containing the [test results from current and previous versions of Terraform](https://github.com/Azure/terraform/tree/master/quickstart/101-aks-network-policy-cilium/TestRecord.md). > > See more [articles and sample code showing how to use Terraform to manage Azure resources](/azure/terraform). This sample deploys: - A resource group. - An AKS cluster that uses Azure CNI Overlay networking with Cilium as the network policy engine and network dataplane. 1. Create a directory to test and run the sample Terraform code, and make it the current directory. 1. Create a file named `main.tf`, and insert the following code: [!code-terraform[master](~/terraform_samples/quickstart/101-aks-network-policy-cilium/main.tf)] 1. Initialize Terraform by running the [`terraform init`][terraform-init] command. This command downloads the Azure provider required to manage Azure resources with Terraform. ```console terraform init ``` 1. Format and validate the configuration by running the `terraform fmt` and `terraform validate` commands. ```console terraform fmt terraform validate ``` 1. Create a Terraform execution plan by running the [`terraform plan`][terraform-plan] command. This command shows you the resources that Terraform creates or modifies in your Azure subscription. ```console terraform plan ``` 1. Apply the Terraform execution plan by running the [`terraform apply`][terraform-apply] command. This command creates the resources defined in your `main.tf` file in your Azure subscription. ```console terraform apply ``` ## Connect to the AKS cluster using Terraform 1. Install the Kubernetes command-line tool by running the [`az aks install-cli`][az-aks-install-cli] command, and then verify the installation. ```azurecli-interactive az aks install-cli kubectl version --client ``` 1. Configure `kubectl` to connect to your cluster by running the [`az aks get-credentials`][az-aks-get-credentials] command. This command downloads credentials and configures the Kubernetes CLI to use them. ```azurecli-interactive az aks get-credentials \ --resource-group rg-aks-network-policy-example \ --name aks-network-policy-example ``` 1. Verify the cluster is running by running the `kubectl get nodes` command. ```bash kubectl get nodes ``` ## Verify network policy setup using Terraform To verify the network policy setup, create a sample application and set traffic rules. 1. Create a namespace named `demo` to run the sample pods by using the `kubectl create namespace` command. ```bash kubectl create namespace demo ``` 1. Create a pod named `server` to serve on TCP port 80 by running the [`kubectl run`][kubectl-run] command. ```bash kubectl run server \ -n demo \ --image=k8s.gcr.io/e2e-test-images/agnhost:2.33 \ --labels="app=server" \ --port=80 \ --command -- /agnhost serve-hostname --tcp --http=false --port "80" ``` 1. Create a pod named `client` to run Bash by using the `kubectl run` command. ```bash kubectl run -it client \ -n demo \ --image=k8s.gcr.io/e2e-test-images/agnhost:2.33 \ --command -- bash ``` 1. In a separate window, get the IP address of the `server` pod by using the `kubectl get pod` command. ```bash kubectl get pod --output=wide -n demo ``` Use the `server` pod IP address when you test connectivity from the `client` shell in the next section. ## Test connectivity with network policies using Terraform The sample includes a Kubernetes `NetworkPolicy` manifest that allows ingress traffic to pods labeled `app=server` only from pods labeled `app=client` on TCP port 80. 1. Create a file named `network-policy.yaml`, and insert the following code: :::code language="yaml" source="~/terraform_samples/quickstart/101-aks-network-policy-cilium/network-policy.yaml"::: 1. Apply the network policy by using the [`kubectl apply`][kubectl-apply] command. ```bash kubectl apply -f network-policy.yaml ``` 1. In the `client` shell, test connectivity to the server by using the following `/agnhost` command: ```bash /agnhost connect <server-ip>:80 --timeout=3s --protocol=tcp ``` Connectivity is blocked because the server is labeled with `app=server`, but the client isn't labeled. Your output should resemble the following example output: ```output TIMEOUT ``` 1. Label the `client` and verify connectivity with the server by using the `kubectl label` command. ```bash kubectl label pod client -n demo app=client ``` 1. In the `client` shell, test connectivity to the server again by using the same `/agnhost` command: ```bash /agnhost connect <server-ip>:80 --timeout=3s --protocol=tcp ``` If the connection is successful, there's no output. 1. Verify the network policy by using the `kubectl get networkpolicy` and `kubectl describe networkpolicy` commands. ```bash kubectl get networkpolicy -n demo kubectl describe networkpolicy demo-policy -n demo ``` The output shows that pods labeled `app=server` are selected, ingress traffic is allowed on TCP port 80, and only pods labeled `app=client` can initiate connections. ## Clean up resources by using Terraform In this section, you created a namespace, two pods, and a network policy. If you no longer need these Kubernetes resources, delete them before you remove the underlying Azure infrastructure. Use the [`kubectl delete`][kubectl-delete] command to delete the resources. ```bash kubectl delete namespace demo ``` > [!WARNING] > The following command removes the resource group, the AKS cluster, and all other resources associated with the resource group created for this sample. If you deployed other resources inside this resource group, the command deletes them too. Remove the Azure resources by using the [`terraform destroy`][terraform-destroy] command. ```console terraform destroy ``` :::zone-end ## Related content - [Network concepts for applications in Azure Kubernetes Service (AKS)][concepts-network] - [Kubernetes network policies][kubernetes-network-policies] <!-- LINKS - external --> [kubectl-apply]: https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#apply [kubectl-delete]: https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#delete [kubectl-run]: https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#run [kubernetes-network-policies]: https://kubernetes.io/docs/concepts/services-networking/network-policies/ [tigera]: https://www.tigera.io/ [calico-support]: https://www.tigera.io/tigera-products/calico/ [calico-self-managed]: https://docs.tigera.io/calico/latest/getting-started/kubernetes/managed-public-cloud/aks-migrate [terraform-init]: https://www.terraform.io/docs/commands/init.html [terraform-plan]: https://www.terraform.io/docs/commands/plan.html [terraform-apply]: https://www.terraform.io/docs/commands/apply.html [terraform-destroy]: https://www.terraform.io/docs/commands/destroy.html <!-- LINKS - internal --> [install-azure-cli]: /cli/azure/install-azure-cli [az-aks-get-credentials]: /cli/azure/aks#az-aks-get-credentials [az-aks-install-cli]: /cli/azure/aks#az-aks-install-cli [concepts-network]: concepts-network.md [az-feature-register]: /cli/azure/feature#az-feature-register [az-feature-show]: /cli/azure/feature#az-feature-show [az-provider-register]: /cli/azure/provider#az-provider-register [windows-server-password]: /windows/security/threat-protection/security-policy-settings/password-must-meet-complexity-requirements#reference [az-extension-add]: /cli/azure/extension#az-extension-add [az-extension-update]: /cli/azure/extension#az-extension-update [az-aks-create]: /cli/azure/aks#az-aks-create [az-aks-update]: /cli/azure/aks#az-aks-update [az-group-create]: /cli/azure/group#az-group-create [az-group-delete]: /cli/azure/group#az-group-delete
Success! Branch created successfully. Create Pull Request on GitHub
Error: