Skip to content

Commit 2679d30

Browse files
authored
Merge pull request #212639 from ArchangelSDY/kv-shrpe
Add accessing private keyvault doc
2 parents 6eb8091 + 2525672 commit 2679d30

11 files changed

+193
-1
lines changed

articles/azure-signalr/TOC.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,8 @@
119119
href: howto-network-access-control.md
120120
- name: Secure outbound traffic through Shared Private Endpoints
121121
href: howto-shared-private-endpoints.md
122+
- name: Access Key Vault in private network through Shared Private Endpoints
123+
href: howto-shared-private-endpoints-key-vault.md
122124
- name: Use managed identity
123125
href: howto-use-managed-identity.md
124126
- name: Authorize from Azure Application

articles/azure-signalr/howto-custom-domain.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,15 @@ $ curl -vvv https://contoso.example.com/api/health
176176

177177
It should return `200` status code without any certificate error.
178178

179+
180+
## Key Vault in private network
181+
182+
If you have configured [Private Endpoint](../private-link/private-endpoint-overview.md) to your Key Vault, Azure SignalR Service cannot access the Key Vault via public network. You need to set up a [Shared Private Endpoint](./howto-shared-private-endpoints-key-vault.md) to let Azure SignalR Service access your Key Vault via private network.
183+
184+
After you create a Shared Private Endpoint, you can create a custom certificate as usual. **You don't have to change the domain in Key Vault URI**. For example, if your Key Vault base URI is `https://contoso.vault.azure.net`, you still use this URI to configure custom certificate.
185+
186+
You don't have to explicitly allow Azure SignalR Service IPs in Key Vault firewall settings. For more info, see [Key Vault private link diagnostics](../key-vault/general/private-link-diagnostics.md).
187+
179188
## Next steps
180189

181190
+ [How to enable managed identity for Azure SignalR Service](howto-use-managed-identity.md)
Lines changed: 181 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,181 @@
1+
---
2+
title: Access Key Vault in private network through Shared Private Endpoints
3+
titleSuffix: Azure SignalR Service
4+
description: How to access key vault in private network through Shared Private Endpoints
5+
services: signalr
6+
author: ArchangelSDY
7+
ms.service: signalr
8+
ms.topic: article
9+
ms.date: 09/23/2022
10+
ms.author: dayshen
11+
---
12+
13+
# Access Key Vault in private network through Shared Private Endpoints
14+
15+
Azure SignalR Service can access your Key Vault in private network through Shared Private Endpoints. In this way you don't have to expose your Key Vault on public network.
16+
17+
:::image type="content" alt-text="Diagram showing architecture of shared private endpoint." source="media\howto-shared-private-endpoints-key-vault\shared-private-endpoint-overview.png" :::
18+
19+
## Shared Private Link Resources Management
20+
21+
Private endpoints of secured resources that are created through Azure SignalR Service APIs are referred to as *shared private link resources*. This is because you're "sharing" access to a resource, such as an Azure Key Vault, that has been integrated with the [Azure Private Link service](https://azure.microsoft.com/services/private-link/). These private endpoints are created inside Azure SignalR Service execution environment and aren't directly visible to you.
22+
23+
> [!NOTE]
24+
> The examples in this article are based on the following assumptions:
25+
> * The resource ID of this Azure SignalR Service is _/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/contoso/providers/Microsoft.SignalRService/signalr/contoso-signalr_.
26+
> * The resource ID of Azure Key Vault is _/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/contoso/providers/Microsoft.KeyVault/vaults/contoso-kv_.
27+
28+
The rest of the examples show how the *contoso-signalr* service can be configured so that its outbound calls to Key Vault go through a private endpoint rather than public network.
29+
30+
### Step 1: Create a shared private link resource to the Key Vault
31+
32+
#### [Azure portal](#tab/azure-portal)
33+
34+
1. In the Azure portal, go to your Azure SignalR Service resource.
35+
1. In the menu pane, select **Networking**. Switch to **Private access** tab.
36+
1. Click **Add shared private endpoint**.
37+
38+
:::image type="content" alt-text="Screenshot of shared private endpoints management." source="media\howto-shared-private-endpoints-key-vault\portal-shared-private-endpoints-management.png" lightbox="media\howto-shared-private-endpoints-key-vault\portal-shared-private-endpoints-management.png" :::
39+
40+
1. Fill in a name for the shared private endpoint.
41+
1. Select the target linked resource either by selecting from your owned resources or by filling a resource ID.
42+
1. Click **Add**.
43+
44+
:::image type="content" alt-text="Screenshot of adding a shared private endpoint." source="media\howto-shared-private-endpoints-key-vault\portal-shared-private-endpoints-add.png" :::
45+
46+
1. The shared private endpoint resource will be in **Succeeded** provisioning state. The connection state is **Pending** approval at target resource side.
47+
48+
:::image type="content" alt-text="Screenshot of an added shared private endpoint." source="media\howto-shared-private-endpoints-key-vault\portal-shared-private-endpoints-added.png" lightbox="media\howto-shared-private-endpoints-key-vault\portal-shared-private-endpoints-added.png" :::
49+
50+
#### [Azure CLI](#tab/azure-cli)
51+
52+
You can make the following API call with the [Azure CLI](/cli/azure/) to create a shared private link resource:
53+
54+
```dotnetcli
55+
az rest --method put --uri https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/contoso/providers/Microsoft.SignalRService/signalr/contoso-signalr/sharedPrivateLinkResources/kv-pe?api-version=2021-06-01-preview --body @create-pe.json
56+
```
57+
58+
The contents of the *create-pe.json* file, which represent the request body to the API, are as follows:
59+
60+
```json
61+
{
62+
"name": "contoso-kv",
63+
"properties": {
64+
"privateLinkResourceId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/contoso/providers/Microsoft.KeyVault/vaults/contoso-kv",
65+
"groupId": "vault",
66+
"requestMessage": "please approve"
67+
}
68+
}
69+
```
70+
71+
The process of creating an outbound private endpoint is a long-running (asynchronous) operation. As in all asynchronous Azure operations, the `PUT` call returns an `Azure-AsyncOperation` header value that looks like the following:
72+
73+
```plaintext
74+
"Azure-AsyncOperation": "https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/contoso/providers/Microsoft.SignalRService/signalr/contoso-signalr/operationStatuses/c0786383-8d5f-4554-8d17-f16fcf482fb2?api-version=2021-06-01-preview"
75+
```
76+
77+
You can poll this URI periodically to obtain the status of the operation.
78+
79+
If you're using the CLI, you can poll for the status by manually querying the `Azure-AsyncOperationHeader` value,
80+
81+
```dotnetcli
82+
az rest --method get --uri https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/contoso/providers/Microsoft.SignalRService/signalr/contoso-signalr/operationStatuses/c0786383-8d5f-4554-8d17-f16fcf482fb2?api-version=2021-06-01-preview
83+
```
84+
85+
Wait until the status changes to "Succeeded" before proceeding to the next steps.
86+
87+
-----
88+
89+
### Step 2a: Approve the private endpoint connection for the Key Vault
90+
91+
#### [Azure portal](#tab/azure-portal)
92+
93+
1. In the Azure portal, select the **Networking** tab of your Key Vault and navigate to **Private endpoint connections**. After the asynchronous operation has succeeded, there should be a request for a private endpoint connection with the request message from the previous API call.
94+
95+
:::image type="content" alt-text="Screenshot of the Azure portal, showing the Private endpoint connections pane." source="media\howto-shared-private-endpoints-key-vault\portal-key-vault-approve-private-endpoint.png" :::
96+
97+
1. Select the private endpoint that Azure SignalR Service created. Click **Approve**.
98+
99+
Make sure that the private endpoint connection appears as shown in the following screenshot. It could take one to two minutes for the status to be updated in the portal.
100+
101+
:::image type="content" alt-text="Screenshot of the Azure portal, showing an Approved status on the Private endpoint connections pane." source="media\howto-shared-private-endpoints-key-vault\portal-key-vault-approved-private-endpoint.png" :::
102+
103+
#### [Azure CLI](#tab/azure-cli)
104+
105+
1. List private endpoint connections.
106+
107+
```dotnetcli
108+
az network private-endpoint-connection list -n <key-vault-resource-name> -g <key-vault-resource-group-name> --type 'Microsoft.KeyVault/vaults'
109+
```
110+
111+
There should be a pending private endpoint connection. Note down its ID.
112+
113+
```json
114+
[
115+
{
116+
"id": "<id>",
117+
"location": "",
118+
"name": "",
119+
"properties": {
120+
"privateLinkServiceConnectionState": {
121+
"actionRequired": "None",
122+
"description": "Please approve",
123+
"status": "Pending"
124+
}
125+
}
126+
}
127+
]
128+
```
129+
130+
1. Approve the private endpoint connection.
131+
132+
```dotnetcli
133+
az network private-endpoint-connection approve --id <private-endpoint-connection-id>
134+
```
135+
136+
-----
137+
138+
### Step 2b: Query the status of the shared private link resource
139+
140+
It takes minutes for the approval to be propagated to Azure SignalR Service. You can check the state using either Azure portal or Azure CLI.
141+
142+
#### [Azure portal](#tab/azure-portal)
143+
144+
:::image type="content" alt-text="Screenshot of an approved shared private endpoint." source="media\howto-shared-private-endpoints-key-vault\portal-shared-private-endpoints-approved.png" lightbox="media\howto-shared-private-endpoints-key-vault\portal-shared-private-endpoints-approved.png" :::
145+
146+
#### [Azure CLI](#tab/azure-cli)
147+
148+
```dotnetcli
149+
az rest --method get --uri https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/contoso/providers/Microsoft.SignalRService/signalr/contoso-signalr/sharedPrivateLinkResources/func-pe?api-version=2021-06-01-preview
150+
```
151+
152+
This would return a JSON, where the connection state would show up as "status" under the "properties" section.
153+
154+
```json
155+
{
156+
"name": "contoso-kv",
157+
"properties": {
158+
"privateLinkResourceId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/contoso/providers/Microsoft.KeyVault/vaults/contoso-kv",
159+
"groupId": "vaults",
160+
"requestMessage": "please approve",
161+
"status": "Approved",
162+
"provisioningState": "Succeeded"
163+
}
164+
}
165+
166+
```
167+
168+
If the "Provisioning State" (`properties.provisioningState`) of the resource is `Succeeded` and "Connection State" (`properties.status`) is `Approved`, it means that the shared private link resource is functional and Azure SignalR Service can communicate over the private endpoint.
169+
170+
-----
171+
172+
At this point, the private endpoint between Azure SignalR Service and Azure Key Vault is established.
173+
174+
Now you can configure features like custom domain as usual. **You don't have to use a special domain for Key Vault**. DNS resolution is automatically handled by Azure SignalR Service.
175+
176+
## Next steps
177+
178+
Learn more:
179+
180+
+ [What are private endpoints?](../private-link/private-endpoint-overview.md)
181+
+ [Configure custom domain](howto-custom-domain.md)

articles/azure-signalr/howto-shared-private-endpoints.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ Private endpoints of secured resources that are created through Azure SignalR Se
3232
> [!NOTE]
3333
> The examples in this article are based on the following assumptions:
3434
> * The resource ID of this Azure SignalR Service is _/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/contoso/providers/Microsoft.SignalRService/signalr/contoso-signalr_.
35-
> * The resource ID of upstream Azure Function is _/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/contoso/providers/Microsoft.Web/sites/contoso-func.
35+
> * The resource ID of upstream Azure Function is _/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/contoso/providers/Microsoft.Web/sites/contoso-func_.
3636
3737
The rest of the examples show how the *contoso-signalr* service can be configured so that its upstream calls to function go through a private endpoint rather than public network.
3838

Loading
Loading
14 KB
Loading
35.2 KB
Loading
26.9 KB
Loading
Loading

0 commit comments

Comments
 (0)