Skip to content

Commit 5e28b5c

Browse files
Merge pull request #310982 from MicrosoftDocs/main
Auto Publish – main to live - 2026-01-28 06:00 UTC
2 parents 322c1fc + 4717ddd commit 5e28b5c

73 files changed

Lines changed: 2787 additions & 850 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.openpublishing.redirection.json

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2892,7 +2892,12 @@
28922892
},
28932893
{
28942894
"source_path_from_root": "/articles/bastion/quickstart-developer-sku.md",
2895-
"redirect_url": "/azure/bastion/quickstart-developer",
2895+
"redirect_url": "/azure/bastion/quickstart-host-portal",
2896+
"redirect_document_id": false
2897+
},
2898+
{
2899+
"source_path_from_root": "/articles/bastion/quickstart-developer.md",
2900+
"redirect_url": "/azure/bastion/quickstart-host-portal",
28962901
"redirect_document_id": false
28972902
},
28982903
{
@@ -2907,7 +2912,12 @@
29072912
},
29082913
{
29092914
"source_path_from_root": "/articles/bastion/bastion-create-host-portal.md",
2910-
"redirect_url": "/azure/bastion/tutorial-create-host-portal",
2915+
"redirect_url": "/azure/bastion/quickstart-host-portal",
2916+
"redirect_document_id": false
2917+
},
2918+
{
2919+
"source_path_from_root": "/articles/bastion/tutorial-create-host-portal.md",
2920+
"redirect_url": "/azure/bastion/quickstart-host-portal",
29112921
"redirect_document_id": false
29122922
},
29132923
{
@@ -6628,7 +6638,7 @@
66286638
{
66296639
"source_path": "articles/vpn-gateway/about-zone-redundant-vnet-gateways.md",
66306640
"redirect_url": "/azure/reliability/reliability-virtual-network-gateway",
6631-
"redirect_document_id": true
6641+
"redirect_document_id": false
66326642
},
66336643
{
66346644
"source_path": "articles/dns/dns-sdk.md",

articles/api-management/TOC.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,8 @@
129129
href: protect-with-ddos-protection.md
130130
- name: Configure Front Door
131131
href: front-door-api-management.md
132+
- name: Access resource protected by network security perimeter
133+
href: using-network-security-perimeter.md
132134
- name: Configuration management
133135
items:
134136
- name: Landing zone accelerator

articles/api-management/api-management-api-import-restrictions.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,10 @@ API Management only supports:
6464
- OpenAPI version 3.0.x (up to version 3.0.3)
6565
- OpenAPI version 3.1 (import only)
6666

67+
> [!NOTE]
68+
> API Management does not fully support OpenAPI 3.1. The platform allows 3.1 documents to be *imported*, but most 3.1-specific constructs (such as updated JSON Schema, callbacks, links, examples, requestBodies, headers, and other components) are not processed or enforced. During import, unsupported features are ignored, downgraded to 3.0-equivalent behavior, or removed.
69+
> Because of this, OpenAPI 3.1 should be treated as **import-compatible only**, not feature-compatible. For full fidelity, use OpenAPI 2.0 or 3.0.x.
70+
6771
**Size limitations**
6872

6973
| Size limit | Description |

articles/api-management/breaking-changes/trusted-service-connectivity-retirement-march-2026.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,8 @@ You can configure the networking of target resources to one of the following opt
101101

102102
- [Transition to a Network Security Perimeter in Azure](/azure/private-link/network-security-perimeter-transition)
103103

104+
- [How to front a network security perimeter-protected Azure resource with Azure API Management](../using-network-security-perimeter.md)
105+
104106
### Step 3: Disable trusted service connectivity in API Management gateway
105107

106108
After ensuring that your API Management gateway doesn't access other Azure services using trusted service connectivity, you must explicitly disable trusted connectivity in your gateway to acknowledge you have verified that the service no longer depends on trusted connectivity.
46.4 KB
Loading
57.5 KB
Loading
Lines changed: 187 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,187 @@
1+
---
2+
title: How to front a network security perimeter-protected Azure resource with Azure API Management
3+
description: Step-by-step guidance to secure an Azure service backend with a network security perimeter and access it via Azure API Management using managed identity.
4+
ms.service: azure-api-management
5+
ms.topic: how-to
6+
ms.date: 01/27/2026
7+
author: dlepow
8+
ms.author: danlep
9+
ai-usage: ai-assisted
10+
---
11+
12+
# How to front a network security perimeter-protected Azure resource with Azure API Management
13+
14+
This article shows how to secure an Azure service resource with an Azure [network security perimeter](/azure/private-link/network-security-perimeter-concepts) and access it through Azure API Management.
15+
16+
As an example, you configure an Azure Storage account with a network security perimeter to allow traffic from your subscription (containing the API Management instance), use API Management's managed identity to authenticate to Azure Storage, and verify access with the API Management test console. Trusted service connectivity and public access to the storage account will be disabled.
17+
18+
## Why use a network security perimeter with API Management?
19+
20+
A network security perimeter provides a supported, centralized perimeter to explicitly allow traffic while keeping public access disabled. It provides:
21+
22+
- **Modern token trust model:** Managed identity tokens now include trust mode claims that no longer permit implicit network bypass. A network security perimeter establishes the explicit network path your backend requires.
23+
- **Centralized governance:** A network security perimeter consolidates per‑service network rules into a single perimeter, improving consistency and observability across protected resources.
24+
- **Works without a virtual network:** For API Management instances not isolated with a virtual network, network security perimeter enables secure access by subscription or IP range. If virtual network isolation is available and preferred, you can continue to use that approach.
25+
26+
> [!NOTE]
27+
> Beginning March 2026, [API Management is retiring trusted service connectivity](breaking-changes/trusted-service-connectivity-retirement-march-2026.md) from the gateway to select backend Azure services. If those backends such as Azure storage accounts rely on trusted Microsoft services or resource instances for network access, you must migrate. A network security perimeter provides the supported, centralized perimeter to explicitly allow traffic while keeping public access disabled.
28+
29+
## Prerequisites
30+
31+
- An Azure subscription and Owner or Contributor permissions.
32+
- An Azure API Management instance with a system-assigned or user-assigned managed identity enabled.
33+
- An Azure Storage account
34+
- Configure a container and at least one test blob (for example, a JSON file).
35+
- To begin, enable public network access to the storage account. By default, this setting also enables trusted Microsoft services and resource instances to access the storage account. You modify access later when associating the network security perimeter.
36+
37+
## Overview of steps
38+
39+
1. Configure API Management to call Azure Storage using a managed identity.
40+
41+
1. Block public network access to the storage account.
42+
43+
1. Create a network security perimeter profile and associate the storage account.
44+
45+
1. Add an inbound access rule to allow API Management traffic.
46+
47+
1. Move network security perimeter access mode from **transition** to **enforced**.
48+
49+
## Step 1. Configure API Management to call Azure Storage by using managed identity
50+
51+
Configure API Management to call Azure Storage. Add a test API and operation, and configure a policy to authenticate by using API Management's managed identity.
52+
53+
1. In the [Azure portal](https://portal.azure.com/), go to your API Management instance.
54+
1. Ensure that a system-assigned or user-assigned managed identity is enabled. For steps, see [Use managed identities in API Management](api-management-howto-use-managed-service-identity.md).
55+
1. Go to the storage account and grant the managed identity access:
56+
1. In the left menu, select **Access control (IAM)** > **Add role assignment**.
57+
1. Select **Storage Blob Data Reader** role (or **Contributor**, if write access is required) and assign to the API Management managed identity.
58+
1. Complete the role assignment steps.
59+
60+
### Configure an API operation to call Azure Storage
61+
62+
1. Add an HTTP API that fronts the Azure Storage blob URI (for example, `https://<storage-account-name>.blob.core.windows.net/apimtest`).
63+
1. Add a GET operation targeting the container.
64+
:::image type="content" source="media/using-network-security-perimeter/api-operation.png" alt-text="Screenshot showing a sample API operation to access a blob container in the portal.":::
65+
66+
1. On the **Design** tab, select the operation and then select the policy editor (`</>`). Edit the operation's policy definition to add the API version header and managed identity authentication.
67+
68+
In the following example:
69+
70+
* The `authentication-managed-identity` policy assumes that the API Management instance has a system-assigned managed identity enabled and can access Azure Storage. To use a user-assigned managed identity, set a `client-id` attribute in the policy. For more information, see the [policy reference](authentication-managed-identity-policy.md).
71+
* The `set-header` policy sets the [required Storage REST API version header](/rest/api/storageservices/get-blob?tabs=microsoft-entra-id#request-headers).
72+
73+
```xml
74+
<policies>
75+
<inbound>
76+
<base />
77+
<!-- Authenticate to Storage using API Management managed identity -->
78+
<authentication-managed-identity resource="https://storage.azure.com/" />
79+
<!-- Set Storage API version header -->
80+
<set-header name="x-ms-version" exists-action="override">
81+
<value>2025-11-05</value>
82+
</set-header>
83+
</inbound>
84+
<backend>
85+
<forward-request />
86+
</backend>
87+
<outbound>
88+
<base />
89+
</outbound>
90+
<on-error>
91+
<base />
92+
</on-error>
93+
</policies>
94+
```
95+
96+
> [!NOTE]
97+
> - The `resource` value should be `https://storage.azure.com/` for Azure Storage.
98+
> - Ensure the managed identity is assigned the appropriate RBAC role.
99+
100+
### Test the API operation
101+
102+
Before configuring the network security perimeter, test that the API operation can reach the storage account.
103+
104+
1. In the left menu, under **APIs**, select your API and operation.
105+
1. Select the **Test** tab.
106+
1. Select **Test** and call the operation. Optionally select **Trace** to capture detailed telemetry.
107+
108+
Expected results:
109+
- The call succeeds with a `200 OK` response and returns the blob content.
110+
- If you enabled **Trace**, you can verify that API Management added the managed identity token to the Authorization header.
111+
112+
## Step 2. Block public network access to the storage account
113+
114+
If you now block public network access to the storage account, the API call from API Management fails because trusted service connectivity is disabled.
115+
116+
1. In the Azure portal, go to your storage account.
117+
1. In the left menu, under **Security + networking**, select **Networking**.
118+
1. On the **Public access** tab, select **Manage**. **Disable** public network access.
119+
1. Select **Save**.
120+
121+
### Test the API operation
122+
123+
Test that the API operation can no longer reach the storage account.
124+
125+
1. In the Azure portal, go to your API Management instance.
126+
1. In the left menu, under **APIs**, select your API and operation.
127+
1. Select the **Test** tab.
128+
1. Select **Test** and call the operation. Optionally select **Trace** to capture detailed telemetry.
129+
130+
Expected result:
131+
- The call fails with a `403 Forbidden` response.
132+
133+
## Step 3. Create a network security perimeter profile and associate the storage account
134+
135+
For typical steps to create a network security perimeter and associate an Azure resource with a profile, see [Create a network security perimeter and profile](/azure/private-link/create-network-security-perimeter-portal). Brief steps follow:
136+
137+
1. In the Azure portal, search for **Network Security Perimeters** and select it.
138+
1. Select **+ Create** and provide a name and region. Accept the defaults for other settings and create the perimeter.
139+
1. After deployment, go to the **Settings** > **Associated resources** blade to associate the storage account with an existing or new profile.
140+
141+
## Step 4: Add an inbound access rule to allow API Management traffic
142+
143+
To allow API Management to reach the storage account through the perimeter, add an inbound rule. The simplest approach is by Azure subscription.
144+
145+
1. In the left menu of our network security perimeter, select **Settings** > **Profiles**, then select the profile you associated with the storage account.
146+
1. In the left menu, select **Settings** > **Inbound access rules** > **+ Add**:
147+
1. Enter a name for the rule.
148+
1. Select **Source type** *Subscriptions*, then in **Allowed sources** select the subscription that contains your API Management instance.
149+
1. Select **Add**.
150+
151+
> [!NOTE]
152+
> If you select IP address-based control, specify API Management's outbound public IP address range in the inbound rule. Ensure you include all outbound [IP addresses](api-management-howto-ip-addresses.md#ip-addresses-for-outbound-traffic) for your API Management instance.
153+
>
154+
155+
### Confirm the network configuration in the storage account
156+
157+
1. In the Azure portal, go to your storage account.
158+
1. In the left menu, under **Security + networking**, select **Networking**.
159+
1. Under **Network security perimeter**, confirm that the storage account is associated with your network security perimeter profile and that the access rule is listed.
160+
161+
:::image type="content" source="media/using-network-security-perimeter/public-access-settings.png" alt-text="Screenshot of public access settings in the storage account in the portal.":::
162+
163+
### Test the API operation
164+
165+
Test that the API operation can reach the storage account in the network security perimeter.
166+
167+
1. In the Azure portal, go to your API Management instance.
168+
1. In the left menu, under **APIs**, select your API and operation.
169+
1. Select the **Test** tab.
170+
1. Select **Test** and call the operation. Optionally select **Trace** to capture detailed telemetry.
171+
172+
Expected result:
173+
- The call succeeds with a `200 OK` response and returns the blob content.
174+
175+
## Step 5. Move access mode to enforced
176+
177+
A network security perimeter supports the following [access modes](/azure/private-link/network-security-perimeter-transition):
178+
179+
- **Transition:** Applies both existing per-resource network settings and network security perimeter rules. This mode is the default when you first associate a resource.
180+
- **Enforced:** Applies only network security perimeter rules. Use this mode once you validate access.
181+
182+
After you validate access in **transition** mode, set the network security perimeter's access mode to **enforced**. For more information, see [Steps to configure publicNetworkAccess and accessMode properties](/azure/private-link/network-security-perimeter-transition#steps-to-configure-publicnetworkaccess-and-accessmode-properties).
183+
184+
## Related content
185+
186+
- Learn more about [network security perimeter concepts and capabilities](/azure/private-link/network-security-perimeter-concepts)
187+
- [Networking options in API Management](virtual-network-concepts.md)

articles/application-gateway/for-containers/alb-controller-release-notes.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ services: application-gateway
55
author: mbender-ms
66
ms.service: azure-appgw-for-containers
77
ms.topic: release-notes
8-
ms.date: 11/10/2025
8+
ms.date: 1/28/2026
99
ms.author: mbender
1010
# Customer intent: As a Kubernetes operator, I want to access the release notes for the ALB Controller, so that I can understand the latest updates and changes to optimize my configuration and deployments of Application Gateway for Containers.
1111
---
@@ -27,12 +27,13 @@ Instructions for new or existing deployments of ALB Controller are found in the
2727

2828
| ALB Controller Version | Gateway API Version | Minimum Kubernetes Version | Release Notes |
2929
| ---------------------- | ------------------- | ------------------ | ------------- |
30-
| 1.8.12 | v1.2.1 | v1.27 | WAF improvements |
30+
| 1.9.11 | v1.2.1 | v1.27 | [allowPrivilegeEscalation false](https://github.com/Azure/AKS/issues/5389), [Integration with AKS Istio Service Mesh Add-on](https://github.com/Azure/AKS/issues/5479), [fix for NAP with Karpenter](https://github.com/Azure/AKS/issues/5486), general image updates |
3131

3232
## Release history
3333

3434
| ALB Controller Version | Gateway API Version | Minimum Kubernetes Version | Release Notes |
3535
| ---------------------- | ------------------- | ------------------ | ------------- |
36+
| 1.8.12 | v1.2.1 | v1.27 | WAF improvements |
3637
| 1.8.9 | v1.2.1 | v1.27 | [Slow start load balancing algorithm](api-specification-kubernetes.md#alb.networking.azure.io/v1.BackendLoadBalancingPolicy), Image updated to use [Azure Linux 3.0](https://github.com/microsoft/azurelinux), [nodeSelector fix](https://github.com/Azure/AKS/issues/5302), miscellaneous bug fixes and enhancements |
3738
| 1.7.12 | v1.2.1 | v1.27 | Hotfix for pod crash due to [invalid Provider ID](https://github.com/Azure/AKS/issues/5310) |
3839
| 1.7.9 | v1.2.1 | v1.27 | [Web Application Firewall (WAF) Public Preview](https://aka.ms/agc/waf), Updated to Gateway API v1.2.1, [nodeSelector support](https://github.com/Azure/AKS/issues/4370#issuecomment-2894487836), [Permissions fix for Overlay networks](https://github.com/Azure/AKS/issues/5039), fix for SAN regex matching, miscellaneous performance improvements |

articles/application-gateway/for-containers/quickstart-deploy-application-gateway-for-containers-alb-controller.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ author: mbender-ms
77
ms.service: azure-appgw-for-containers
88
ms.custom: devx-track-azurecli
99
ms.topic: quickstart
10-
ms.date: 11/10/2025
10+
ms.date: 1/27/2026
1111
ms.author: mbender
1212
# Customer intent: As a Kubernetes administrator, I want to install the Application Gateway for Containers ALB Controller on my AKS cluster, so that I can efficiently manage load balancing rules and enhance application traffic handling.
1313
---
@@ -147,7 +147,7 @@ You need to complete the following tasks before deploying Application Gateway fo
147147
az aks get-credentials --resource-group $RESOURCE_GROUP --name $AKS_NAME
148148
helm install alb-controller oci://mcr.microsoft.com/application-lb/charts/alb-controller \
149149
--namespace $HELM_NAMESPACE \
150-
--version 1.8.12 \
150+
--version 1.9.11 \
151151
--set albController.namespace=$CONTROLLER_NAMESPACE \
152152
--set albController.podIdentity.clientID=$(az identity show -g $RESOURCE_GROUP -n azure-alb-identity --query clientId -o tsv)
153153
```
@@ -165,7 +165,7 @@ You need to complete the following tasks before deploying Application Gateway fo
165165
az aks get-credentials --resource-group $RESOURCE_GROUP --name $AKS_NAME
166166
helm upgrade alb-controller oci://mcr.microsoft.com/application-lb/charts/alb-controller \
167167
--namespace $HELM_NAMESPACE \
168-
--version 1.8.12 \
168+
--version 1.9.11 \
169169
--set albController.namespace=$CONTROLLER_NAMESPACE \
170170
--set albController.podIdentity.clientID=$(az identity show -g $RESOURCE_GROUP -n azure-alb-identity --query clientId -o tsv)
171171
```

articles/application-gateway/for-containers/service-mesh-integration.md

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ services: application-gateway
55
author: JackStromberg
66
ms.service: azure-appgw-for-containers
77
ms.topic: how-to
8-
ms.date: 11/15/2025
8+
ms.date: 1/28/2026
99
ms.author: jstrom
1010
---
1111

@@ -29,9 +29,6 @@ Here's a diagram of Application Gateway for Containers integrating with Istio se
2929

3030
The ALB Controller Istio Extension consists of two pods, deployed in active / standby configuration to allow resiliency during node failure, handle certificate lifecycle management between Application Gateway for Containers and Istio, and implicitly handle mTLS configuration to services part of a service mesh.
3131

32-
>[!NOTE]
33-
>Application Gateway for Containers only supports the community/open source version of Istio today. Istio-based service mesh add-on for AKS isn't supported at this time.
34-
3532
>[!NOTE]
3633
>To use ALB Controller Service Mesh Extension, you must define your ingress intent using Gateway API. Ingress API isn't supported.
3734
@@ -51,7 +48,7 @@ az aks get-credentials --resource-group $RESOURCE_GROUP --name $AKS_NAME
5148

5249
helm install alb-controller-servicemesh-extension oci://mcr.microsoft.com/application-lb/charts/alb-controller-servicemesh-extension \
5350
--namespace $HELM_NAMESPACE \
54-
--version 1.8.12
51+
--version 1.9.11
5552
```
5653

5754
### Verify the ALB Controller installation

0 commit comments

Comments
 (0)