如果在 Azure Web PubSub 中使用事件处理程序,则可能会具有流向使用 Azure 应用服务的 Web 应用功能创建的静态 Web 应用上游终结点的出站流量,或流向使用 Azure Functions 创建的函数的出站流量。 可以将 Web 应用和 Functions 配置为使用接受来自虚拟网络列表的连接的终结点,并拒绝源自公用网络的外部连接。 可以在 Web PubSub 服务中创建出站专用终结点连接来访问这些终结点。
本文介绍如何配置 Web PubSub 资源,以通过共享专用终结点而不是通过公用网络将上游调用发送到 Azure Functions 中的函数。
此出站方法需要符合下列要求:
- 必须使用 Azure 应用服务或 Azure Functions 部署上游终结点。
- Web PubSub 资源必须位于标准层或高级层。
- 必须通过选择可创建该资源的特定层来创建 Azure 应用服务或 Azure Functions 资源。 有关详细信息,请参阅将专用终结点用于 Azure Web 应用。
使用 Azure Web PubSub API 创建的安全资源的专用终结点称为共享专用链接资源。 你正在“共享”对与 Azure 专用链接集成的资源(例如 Azure Functions 资源)的访问权限。 这些专用终结点是在 Web PubSub 服务执行环境中创建的,不会直接显示出来。
- 具有活动订阅的 Azure 帐户。 创建试用版订阅。
- Azure Web PubSub 实例。
- 一个 Azure Functions 资源。
备注
本文中的示例使用以下值:
- 此 Azure Web PubSub 资源的资源 ID 为
_/subscriptions//00000000-0000-0000-0000-000000000000/resourceGroups/contoso/providers/Microsoft.SignalRService/webPubSub/contoso-webpubsub
。
- Azure Functions 网络资源的资源 ID 为
_/subscriptions//00000000-0000-0000-0000-000000000000/resourceGroups/contoso/providers/Microsoft.Web/sites/contoso-func
。
要使用以下示例中的步骤,请将这些值替换为自己的订阅 ID、Web PubSub 资源的名称和 Azure Functions 资源的名称。
在 Azure 门户中,转到 Azure Web PubSub 资源。
在左侧菜单中选择“网络”。
选择“专用访问”。
选择“添加共享专用终结点”。
输入共享专用终结点的名称。
要设置目标链接源,请选择“从资源中选择”,或在“指定资源 ID”中输入你的资源 ID。
(可选)可以在“请求消息”中输入文本,以向目标资源所有者发送请求。
选择 添加 。
共享专用终结点资源的“预配状态”值为“成功”。 在目标资源上批准终结点之前,“连接状态”为“挂起”。
请将以下 API 调用与 Azure CLI 一起使用,以创建共享专用链接资源。 将以下示例中的值替换为方案中的值。
```bash
az rest --method put --uri https://management.chinacloudapi.cn/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/contoso/providers/Microsoft.SignalRService/webPubSub/contoso-webpubsub/sharedPrivateLinkResources/func-pe?api-version=2021-06-01-preview --body @create-pe.json --debug
create-pe.json 文件包含 API 的请求正文。 它与以下示例类似:
{
"name": "func-pe",
"properties": {
"privateLinkResourceId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/contoso/providers/Microsoft.Web/sites/contoso-func",
"groupId": "sites",
"requestMessage": "please approve"
}
}
创建出站专用终结点的过程是一个长期(异步)操作。 与所有异步 Azure 操作一样,PUT 调用会返回 Azure-AsyncOperation
标头值,它类似于以下示例:
"Azure-AsyncOperation": "https://management.chinacloudapi.cn/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/contoso/providers/Microsoft.SignalRService/webPubSub/contoso-webpubsub/operationStatuses/c0786383-8d5f-4554-8d17-f16fcf482fb2?api-version=2021-06-01-preview"
要定期轮询此 URI 以获取操作的状态,请手动查询 Azure-AsyncOperationHeader
值。 下面是一个示例:
az rest --method get --uri https://management.chinacloudapi.cn/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/contoso/providers/Microsoft.SignalRService/webPubSub/contoso-webpubsub/operationStatuses/c0786383-8d5f-4554-8d17-f16fcf482fb2?api-version=2021-06-01-preview
等待状态更改为“成功”,然后继续执行下一步。
当共享专用终结点连接处于“挂起”状态时,必须在目标资源中批准连接请求。
重要
批准专用终结点连接后,将无法再从公用网络访问该函数。 你可能需要在自己的虚拟网络中创建其他专用终结点才能访问函数终结点。
- 在 Azure 门户中,转到 Azure Functions 应用。
- 在左侧菜单中选择“网络”。
- 在“入站流量”下选择“专用终结点”。
- 选择在 Web PubSub 资源中创建的挂起连接。
- 选择“批准”,然后选择“是”以确认。
可以选择“刷新”来检查状态。 “连接状态”可能需要几分钟时间才会更新为“已批准”。
列出专用终结点连接:
az network private-endpoint-connection list -n <function-resource-name> -g <function-resource-group-name> --type 'Microsoft.Web/sites'
检查挂起的专用终结点连接。 记下连接 ID。
[
{
"id": "<ID>",
"location": "",
"name": "",
"properties": {
"privateLinkServiceConnectionState": {
"actionRequired": "None",
"description": "Please approve",
"status": "Pending"
}
}
}
]
批准专用终结点连接:
az network private-endpoint-connection approve --id <private-endpoint-connection-ID>
批准需要几分钟时间才能反映在 Web PubSub 中。 可以使用 Azure 门户或 Azure CLI 来检查状态。
az rest --method get --uri https://management.chinacloudapi.cn/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/contoso/providers/Microsoft.SignalRService/webPubSub/contoso-webpubsub/sharedPrivateLinkResources/func-pe?api-version=2021-06-01-preview
此命令会返回 JSON。 properties
下面的 status
会指示连接状态。
{
"name": "func-pe",
"properties": {
"privateLinkResourceId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/contoso/providers/Microsoft.Web/sites/contoso-func",
"groupId": "sites",
"requestMessage": "please approve",
"status": "Approved",
"provisioningState": "Succeeded"
}
}
如果 properties.provisioningState
为 Succeeded
且 properties.status
(连接状态)为 Approved
,则表示共享专用链接资源正常运行,并且 Web PubSub 可以通过专用终结点进行通信。
此时,已在 Azure Web PubSub 和 Azure Functions 之间建立了专用终结点。
设置专用终结点后,可以通过检查上游调用的 X-Forwarded-For
标头来验证传入调用是否来自专用 IP 地址。