Skip to content

Commit 45b256c

Browse files
committed
feat: NGINXaaS - Certificate Fetch via Private Endpoint support
This commit updates the NGINXaaS documentation to add instructions for fetching certificates via private endpoints.
1 parent d9bb351 commit 45b256c

File tree

5 files changed

+155
-21
lines changed

5 files changed

+155
-21
lines changed

content/includes/nginxaas-azure/ssl-tls-prerequisites.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,16 @@ NGINXaaS natively integrates with [Azure Key Vault (AKV)](https://azure.microsof
1212

1313
- If using Access Policies for AKV, ensure that your MI has *GET secrets* or higher permissions.
1414

15+
- Access to AKV through a public or private endpoint. If public access to AKV needs to be restricted, you can do one of the following:
16+
- [Configure Network Security Perimeter]({{< ref "/nginxaas-azure/quickstart/security-controls/certificates.md#configure-network-security-perimeter-nsp" >}})
17+
- [Integrate with a private endpoint]({{< ref "/nginxaas-azure/quickstart/security-controls/certificates.md#integrate-with-private-endpoint" >}})
18+
1519
- In addition to the MI permissions, if using the Azure portal to manage certificates, ensure that you have read access to list certificates inside the Key Vault:
1620

1721
- If using Azure RBAC for AKV, ensure that you have [Key Vault Reader](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles#key-vault-reader) or higher permissions.
1822

1923
- If using Access Policies for AKV, ensure that you have *LIST certificates* or higher permissions.
2024

21-
- If public access is disabled on your key vault, [configure Network Security Perimeter]({{< ref "/nginxaas-azure/quickstart/security-controls/certificates.md#configure-network-security-perimeter-nsp" >}}) and add an inbound access rule to allow your client IP address.
25+
- If public access is disabled on your key vault, add an inbound access rule to allow your client IP address.
2226

2327
- If you're unfamiliar with Azure Key Vault, check out the [Azure Key Vault concepts](https://docs.microsoft.com/en-us/azure/key-vault/general/basic-concepts) documentation from Microsoft.

content/nginxaas-azure/changelog.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ To see a list of currently active issues, visit the [Known issues]({{< ref "/ngi
1313

1414
To review older entries, visit the [Changelog archive]({{< ref "/nginxaas-azure/changelog-archive" >}}) section.
1515

16+
## TODO, 2025
17+
- {{% icon-feature %}} **Support for downloading AKV certificates via Private Endpoints**
18+
19+
NGINXaaS now supports downloading certificate from Azure Key Vault via Private Endpoints. This will allow users to increase network security by disabling public access on their Key Vault. For more information, please visit [Integrate with Private Endpoint]({{< ref "/nginxaas-azure/quickstart/security-controls/certificates.md#integrate-with-private-endpoint" >}})
1620

1721
## August 18, 2025
1822

content/nginxaas-azure/getting-started/ssl-tls-certificates/overview.md

Lines changed: 88 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ The following section describes common errors you might encounter while adding S
9595

9696
- **User assigned managed identity**
9797

98-
Please ensure the following environment variables are set before copying the below Azure CLI command.
98+
Set the following environment variables before copying the below Azure CLI command.
9999
- `MI_NAME`: the name of the managed identity
100100
- `MI_RESOURCE_GROUP`: the name of the resource group the managed identity is in
101101
```shell
@@ -106,7 +106,7 @@ The following section describes common errors you might encounter while adding S
106106

107107
- **System assigned managed identity**
108108

109-
Please ensure the following environment variables are set before copying the below Azure CLI command.
109+
Set the following environment variables before copying the below Azure CLI command.
110110
- `DEP_NAME`: the name of the NGINXaaS deployment
111111
- `DEP_RESOURCE_GROUP`: the name of the resource group the NGINXaaS deployment is in
112112
```shell
@@ -116,7 +116,7 @@ The following section describes common errors you might encounter while adding S
116116
```
117117
1. Get the resource ID of the key vault.
118118

119-
Please ensure the following environment variables are set before copying the below Azure CLI command.
119+
Set the following environment variables before copying the below Azure CLI command.
120120
- `KV_NAME`: the name of the key vault
121121
- `KV_RESOURCE_GROUP`: the name of the resource group the key vault is in
122122
```shell
@@ -145,7 +145,7 @@ The following section describes common errors you might encounter while adding S
145145
146146
- **User assigned managed identity**
147147
148-
Please ensure the following environment variables are set before copying the below Azure CLI command.
148+
Set the following environment variables before copying the below Azure CLI command.
149149
- `MI_NAME`: the name of the managed identity
150150
- `MI_RESOURCE_GROUP`: the name of the resource group the managed identity is in
151151
```shell
@@ -156,7 +156,7 @@ The following section describes common errors you might encounter while adding S
156156
157157
- **System assigned managed identity**
158158
159-
Please ensure the following environment variables are set before copying the below Azure CLI command.
159+
Set the following environment variables before copying the below Azure CLI command.
160160
- `DEP_NAME`: the name of the NGINXaaS deployment
161161
- `DEP_RESOURCE_GROUP`: the name of the resource group the NGINXaaS deployment is in
162162
```shell
@@ -167,7 +167,7 @@ The following section describes common errors you might encounter while adding S
167167
168168
1. Create the access policy.
169169
170-
Please ensure the following environment variables are set before copying the below Azure CLI command.
170+
Set the following environment variables before copying the below Azure CLI command.
171171
- `KV_NAME`: the name of the key vault
172172
- `KV_RESOURCE_GROUP`: the name of the resource group the key vault is in
173173
```shell
@@ -178,26 +178,26 @@ The following section describes common errors you might encounter while adding S
178178
```
179179
</details>
180180
181-
#### Error code: `ForbiddenByFirewall`
181+
#### Error code: `ForbiddenByFirewall` or `ForbiddenByConnection`
182182
183183
**Description:** The key vault's firewall is enabled and NGINXaaS is not authorized to fetch certificates.
184184

185-
**Resolution:** [Configure Network Security Perimeter]({{< ref "/nginxaas-azure/quickstart/security-controls/certificates.md#configure-network-security-perimeter-nsp" >}}) to allow the subscription of the NGINXaaS deployment to access the key vault.
186-
185+
**Resolution:**
186+
1. [Configure Network Security Perimeter]({{< ref "/nginxaas-azure/quickstart/security-controls/certificates.md#configure-network-security-perimeter-nsp" >}}) to allow the subscription of the NGINXaaS deployment to access the key vault.
187187
<details>
188188
<summary>Create a network security perimeter - Azure CLI</summary>
189189

190190
1. Create a network security perimeter.
191191

192-
Please ensure the following environment variables are set before copying the below Azure CLI command.
192+
Set the following environment variables before copying the below Azure CLI command.
193193
- `NSP_NAME`: the name of the network security perimeter
194194
- `NSP_RESOURCE_GROUP`: the name of the resource group the network security perimeter will be in
195195
```shell
196196
az network perimeter create --name $NSP_NAME --resource-group $NSP_RESOURCE_GROUP
197197
```
198198
1. Create a profile for the network security perimeter.
199199

200-
Please ensure the following environment variable is set before copying the below Azure CLI command.
200+
Set the following environment variable is set before copying the below Azure CLI command.
201201
- `PROFILE_NAME`: the name of the network security perimeter profile
202202
```shell
203203
az network perimeter profile create --name $PROFILE_NAME \
@@ -206,7 +206,7 @@ The following section describes common errors you might encounter while adding S
206206
```
207207
1. Get the resource ID of the key vault.
208208

209-
Please ensure the following environment variables are set before copying the below Azure CLI command.
209+
Set the following environment variables before copying the below Azure CLI command.
210210
- `KV_NAME`: the name of the key vault
211211
- `KV_RESOURCE_GROUP`: the name of the resource group the key vault is in
212212
```shell
@@ -230,7 +230,7 @@ The following section describes common errors you might encounter while adding S
230230
```
231231
1. Add an inbound access rule to allow the NGINXaaS deployment's subscription.
232232
233-
Please ensure the following environment variables are set before copying the below Azure CLI command.
233+
Set the following environment variables before copying the below Azure CLI command.
234234
- `RULE_NAME`: the name of the access rule
235235
- `DEP_SUBSCRIPTION_ID`: the subscription ID of the NGINXaaS deployment
236236
```shell
@@ -242,6 +242,77 @@ The following section describes common errors you might encounter while adding S
242242
```
243243
</details>
244244
245+
2. Integrate with a Private Endpoint to allow NGINXaaS to fetch certificates via Azure Private Link.
246+
<details>
247+
<summary>Create a Private Link - Azure CLI</summary>
248+
249+
1. Get the resource ID of the key vault.
250+
251+
Set the following environment variables before copying the below Azure CLI command.
252+
- `KV_NAME`: the name of the key vault
253+
- `KV_RESOURCE_GROUP`: the name of tshe resource group the key vault is in
254+
```shell
255+
key_vault_id=$(az keyvault show --name $KV_NAME \
256+
--resource-group $KV_RESOURCE_GROUP \
257+
--query id --output tsv)
258+
```
259+
260+
2. Create a private endpoint.
261+
262+
Set the following environment variables before copying the below Azure CLI command.
263+
- `PE_NAME`: the name of the private endpoint
264+
- `PE_RESOURCE_GROUP`: the name of the resource group the private endpoint will be in
265+
- `VNET_NAME`: the name of the virtual network that is delegated to NGINXaaS
266+
- `VNET_RESOURCE_GROUP`: the name of the resource group the virtual network is in
267+
- `SUBNET_NAME`: the name of the subnet for private endpoints
268+
- `PE_CONNECTION_NAME`: the name of the private endpoint connection
269+
- `LOCATION`: the location of the virtual network
270+
```shell
271+
az network private-endpoint create --name $PE_NAME \
272+
--resource-group $PE_RESOURCE_GROUP \
273+
--vnet-name $VNET_NAME \
274+
--subnet $SUBNET_NAME \
275+
--private-connection-resource-id $key_vault_id \
276+
--group-id vault \
277+
--connection-name $PE_CONNECTION_NAME \
278+
--location $LOCATION
279+
```
280+
281+
1. Create a private DNS zone and link VNet.
282+
283+
Set the following environment variables before copying the below Azure CLI command.
284+
- `ZONE_RESOURCE_GROUP`: the name of the resource group for the DNS zone
285+
- `ZONE_NAME`: the name of the DNS zone
286+
- `DNS_LINK_NAME`: the name of the DNS zone link
287+
```shell
288+
vnet_id=$(az network vnet show --name $VNET_NAME \
289+
--resource-group $VNET_RESOURCE_GROUP \
290+
--query id --output tsv)
291+
```
292+
```shell
293+
az network private-dns zone create --resource-group $ZONE_RESOURCE_GROUP \
294+
--name $ZONE_NAME
295+
az network private-dns link vnet create --resource-group $ZONE_RESOURCE_GROUP \
296+
--zone-name $ZONE_NAME \
297+
--name $DNS_LINK_NAME \
298+
--virtual-network $vnet_id \
299+
--registration-enabled false
300+
```
301+
302+
1. Add DNS zone group to the private endpoint.
303+
304+
Set the following environment variables before copying the below Azure CLI command.
305+
- `DNS_ZONE_GROUP_NAME`: the name of the resource group for the DNS zone
306+
```shell
307+
az network private-endpoint dns-zone-group create \
308+
--resource-group $PE_RESOURCE_GROUP \
309+
--endpoint-name $PE_NAME \
310+
--name $DNS_ZONE_GROUP_NAME \
311+
--private-dns-zone $ZONE_NAME \
312+
--zone-name $ZONE_NAME
313+
```
314+
</details>
315+
245316
#### Error code: `AnotherOperationInProgress`
246317
247318
**Description:** Another operation on this, or a dependent resource, is in progress.
@@ -273,7 +344,7 @@ The following section describes common errors you might encounter while adding S
273344
274345
- **User assigned managed identity**
275346
276-
Please ensure the following environment variables are set before copying the below Azure CLI command.
347+
Set the following environment variables before copying the below Azure CLI command.
277348
- `MI_NAME`: the name of the managed identity
278349
- `MI_RESOURCE_GROUP`: the name of the resource group the managed identity is in
279350
```shell
@@ -284,7 +355,7 @@ The following section describes common errors you might encounter while adding S
284355
285356
- **System assigned managed identity**
286357
287-
Please ensure the following environment variables are set before copying the below Azure CLI command.
358+
Set the following environment variables before copying the below Azure CLI command.
288359
- `DEP_NAME`: the name of the NGINXaaS deployment
289360
- `DEP_RESOURCE_GROUP`: the name of the resource group the NGINXaaS deployment is in
290361
```shell
@@ -295,7 +366,7 @@ The following section describes common errors you might encounter while adding S
295366
296367
1. Create the access policy.
297368
298-
Please ensure the following environment variables are set before copying the below Azure CLI command.
369+
Set the following environment variables before copying the below Azure CLI command.
299370
- `KV_NAME`: the name of the key vault
300371
- `KV_RESOURCE_GROUP`: the name of the resource group the key vault is in
301372
```shell
@@ -323,7 +394,7 @@ The following section describes common errors you might encounter while adding S
323394
324395
1. Get the resource ID of the certificate.
325396
326-
Please ensure the following environment variables are set before copying the below Azure CLI command.
397+
Set the following environment variables before copying the below Azure CLI command.
327398
- `CERT_NAME`: the name of the certificate
328399
- `KV_NAME`: the name of the key vault
329400
```shell

content/nginxaas-azure/known-issues.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,14 @@ url: /nginxaas/azure/known-issues/
99

1010
List of known issues in the latest release of F5 NGINXaaS for Azure (NGINXaaS).
1111

12+
### {{% icon-bug %}} Certificate failures when managed identities with access is added after deployment creation
13+
14+
This issue occurs when public access is disabled on Azure Key Vault (AKV) and the managed identity that has access to AKV is added to the NGINXaaS deployment after creation.
15+
16+
Updating managed identities on an NGINXaaS deployment after creation may result in the managed identity not being correctly delegated to the dataplane, which can cause certificate fetch failures.
17+
18+
**Workaround**: To avoid this issue, when you create an NGINXaaS deployment, make sure that the managed identity with access to AKV is assigned during initial creation. If managed identities need to be updated after creation, enable public access to AKV or [configure Network Security Perimeter]({{< ref "/nginxaas-azure/quickstart/security-controls/certificates.md#configure-network-security-perimeter-nsp" >}})
19+
1220
### {{% icon-bug %}} Custom and precompiled security policies cannot both be referenced in an NGINX configuration
1321

1422
When using NGINX App Protect WAF, you can only reference default or custom security policies in your NGINX configuration, not both.

0 commit comments

Comments
 (0)