如何将出站流量从与包含服务终结点的 VNet 集成的应用服务路由到外部 Azure 托管 API?

How can I route outbound traffic from an App Service integrated with a VNet containing a Service Endpoint to an external Azure hosted API?

我正在尝试使用高级 V2 应用服务计划来保护我的容器化 Web 应用。我已经为不同应用程序服务的集成子网启用了服务端点,以限制来自彼此的传入流量,但前端除外(因此它们都与 VNet 集成,并且除了前端之外,所有传入流量都限制在该 VNet 中) .

我还有其他 Azure 服务,例如 Azure Functions 或存储帐户,它们可以通过使用这些服务终结点来限制入站流量。但是,其中一个应用程序服务也调用位于 Azure 上的外部第三方 API。 API 可能在也可能不在静态 IP 后面。但是,它有一个关联的自定义域。

当我尝试从其中一个 VNet 集成应用服务连接到 API 时出现问题。由于目标 IP 位于使用服务终结点添加到路由的 IP 范围之一内,因此流量通过该服务终结点而不是简单的 Azure 路由发送。我已经尝试使用与该子网关联的 Route Table 覆盖该路由,但这似乎是不可能的,无论是否有 NAT 网关连接到该子网。我猜这里优先考虑 Azure 路由。我确定路由无效,因为我在部署 VM 的不同子网上使用它。

有什么方法可以仅将服务端点用于我的内部流量,这样当它进入 Azure 托管时就不会使用它 API 或者我需要切换到其他方法,如专用端点或日月光?

我不确定你在寻找什么,但如果你想明确定义路由,你应该尝试使用应用程序服务设置“WEBSITE_VNET_ROUTE_ALL”= 1,它会覆盖路由的默认优先级并确保每个出站呼叫遵循子网路由 table 内定义的路由。 使用以下步骤在您的应用中添加 WEBSITE_VNET_ROUTE_ALL 设置: 转到您的应用程序门户中的配置 UI。 Select 新的应用程序设置。

在名称框中输入 WEBSITE_VNET_ROUTE_ALL,在值框中输入 1。

当 WEBSITE_VNET_ROUTE_ALL 设置为 1 时,出站流量仍从应用属性中列出的地址发送,除非您提供将流量定向到其他地方的路由。

我们已经能够要求第 3 方禁用阻止规则。事实证明,他们有一条规则可以阻止此特定流量。 我已经尝试更改该设置,但没有尝试在其上放置路由 table。但是,这没有什么区别,因为我无法定义属于 Azure 的允许出站 IP 列表,因为我们没有要调用的静态 IP。