Skip to content

Commit 3341dc4

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 3341dc4

File tree

4 files changed

+132
-7
lines changed

4 files changed

+132
-7
lines changed

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,17 @@ 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,
16+
either [configure Network Security Perimeter]({{< ref "/nginxaas-azure/quickstart/security-controls/certificates.md#configure-network-security-perimeter-nsp" >}}) or [integrate with a private endpoint]({{< ref "/nginxaas-azure/quickstart/security-controls/certificates.md#integrate-with-private-endpoint" >}})
17+
18+
{{< call-out "important" >}}**Known Issue:** Updating managed identity on NGINXaaS deployment after creation may result in the managed identity not being correctly delegated to the dataplane, which can cause certificate fetch failures when public access is disabled. To avoid this issue, ensure that the managed identity that has access to AKV is assigned during NGINXaaS deployment creation. {{< /call-out >}}
19+
1520
- 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:
1621

1722
- 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.
1823

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

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.
26+
- If public access is disabled on your key vault, add an inbound access rule to allow your client IP address.
2227

2328
- 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: 74 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -178,12 +178,12 @@ 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

@@ -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+
Please ensure the following environment variables are set 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+
Please ensure the following environment variables are set 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+
Please ensure the following environment variables are set 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+
Please ensure the following environment variables are set 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.

content/nginxaas-azure/quickstart/security-controls/certificates.md

Lines changed: 48 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -160,9 +160,17 @@ http {
160160

161161
For more information on using NGINX to secure traffic to upstream servers, refer to [Securing HTTP Traffic to Upstream Servers](https://docs.nginx.com/nginx/admin-guide/security-controls/securing-http-traffic-upstream/) and [Securing TCP Traffic to Upstream Servers](https://docs.nginx.com/nginx/admin-guide/security-controls/securing-tcp-traffic-upstream/).
162162

163-
## Configure Network Security Perimeter (NSP)
164163

165-
If you want to disable public access to your key vault, you can configure a [Network Security Perimeter (NSP)](https://learn.microsoft.com/en-us/azure/private-link/network-security-perimeter-concepts). This will allow you to configure access rules to allow NGINXaaS to fetch certificates from your key vault while ensuring all other public access is denied.
164+
## Restrict Public Access to Key Vault
165+
If you want to restrict public access to your key vault, you can configure:
166+
167+
- a [Network Security Perimeter (NSP)](https://learn.microsoft.com/en-us/azure/private-link/network-security-perimeter-concepts). This will allow you to configure access rules to allow NGINXaaS to fetch certificates from your key vault while ensuring all other public access is denied.
168+
169+
- Allow access from a Virtual Network. This will allow you to configure access from the Virtual Network that is delegated to NGINXaaS while ensuring all other public access is denied.
170+
171+
- Integrate Azure Key Vault with [Azure Private Link](https://learn.microsoft.com/en-us/azure/private-link/private-link-overview). To enhance network security, you can configure your vault to only allow connections through private endpoints. Traffic between NGINXaaS and AKV traverses over the Microsoft backbone network.
172+
173+
### Configure Network Security Perimeter (NSP)
166174

167175
1. Follow [Azure's documentation on prerequisites](https://learn.microsoft.com/en-us/azure/private-link/create-network-security-perimeter-portal#prerequisites) to ensure you are registed to create an NSP.
168176
1. In the Search box, enter **Network Security Perimeters** and select **Network Security Perimeters** from the search results.
@@ -174,7 +182,7 @@ If you want to disable public access to your key vault, you can configure a [Net
174182
| Subscription | Select the appropriate Azure subscription that you have access to. |
175183
| Resource group | Specify whether you want to create a new resource group or use an existing one.<br> For more information, see [Azure Resource Group overview](https://docs.microsoft.com/en-us/azure/azure-resource-manager/management/overview). |
176184
| Name | Provide a unique name for your network security perimeter. For this tutorial, we use `nginxaas-nsp`. |
177-
| Region | Select the region you want to deploy to. Refer to any [regional limitations](https://learn.microsoft.com/en-us/azure/private-link/network-security-perimeter-concepts#regional-limitations) NSP has while in public preview. |
185+
| Region | Select the region you want to deploy to. |
178186
| Profile name | Leave the profile name as the default `defaultProfile`. |
179187
{{< /table >}}
180188
1. In the **Resources** tab, select {{< icon "plus">}}**Add**.
@@ -197,3 +205,40 @@ By default, the key vault will be associated to the NSP in [Learning mode](https
197205
1. Select **Change access mode**, set to **Enforced**, and select **Apply**.
198206

199207
{{< call-out "note" >}} If you are using the Azure portal to add certificates, you will also need to add an inbound access rule to allow your IP address, so the portal can list the certificates in your key vault. {{< /call-out >}}
208+
209+
### Allow access from a Virtual Network
210+
211+
1. Go to your key vault, `nginxaas-kv`.
212+
1. Select **Networking** in the left menu.
213+
1. Select {{< icon "plus">}} **Add existing virtual network**.
214+
1. Select the virtual network and subnet that is delegated to the NGINXaaS deployment.
215+
216+
{{< call-out "note" >}} Ensure that the Network Security Group on the subnet delegated to the NGINXaaS deployment allows outbound traffic to the internet{{< /call-out >}}
217+
218+
### Integrate with Private Endpoint
219+
1. Go to your key vault, `nginxaas-kv`.
220+
1. Select **Settings** followed by **Networking** in the left menu.
221+
1. Select the **Private endpoint connections** tab.
222+
1. Select {{< icon "plus">}} **Create**
223+
1. In the **Basics** tab, provide the following information:
224+
{{< table >}}
225+
| Field | Description |
226+
|---------------------------- | ---------------------------- |
227+
| Subscription | Select the appropriate Azure subscription that you have access to. |
228+
| Resource group | Specify whether you want to create a new resource group or use an existing one.<br> For more information, see [Azure Resource Group overview](https://docs.microsoft.com/en-us/azure/azure-resource-manager/management/overview). |
229+
| Name | Provide a unique name for your private link. For this tutorial, we use `nginxaas-pl`. |
230+
| Region | Select the region you want to deploy to.
231+
{{< /table >}}
232+
233+
1. In the **Resources** tab, select **Resource Type** as `Microsoft.KeyVault/vaults` and **Resource** as `nginxaas-kv`
234+
1. In the **Virtual Network** tab, provide the following information
235+
{{< table >}}
236+
| Field | Description |
237+
|---------------------------- | ---------------------------- |
238+
| Virtual network | Select the virtual network delegated to your NGINXaaS deployment. |
239+
| Subnet | Select a subnet from your virtual network that is not being used.
240+
{{< /table >}}
241+
1. In the **DNS** tab, use the default settings to integrate your private endpoint with a private DNS zone.
242+
1. Select **Review + Create** and then **Create**.
243+
244+
Once a private link is configured and public access is disabled on Azure Key Vault, any certificates added to the NGINXaaS deployment will be fetched over the private link.

0 commit comments

Comments
 (0)