NSG 是否适用于子网的服务端点

Do NSGs apply to Servic Endpoints of the Subnet

我创建了一个子网,我在其中连接了一个 Cosmos DB 作为服务端点。除了 Cosmos DB 的 IP 防火墙外,我还想通过 NSG 规则控制出站。但是,如果我创建一个规则,拒绝所有出站(也通过拒绝所有入站进行测试),当通过 Mongo 客户端连接到数据库时,它似乎必须生效。

这是预期的行为吗?

是的,这是从启用服务终结点的 VNet 访问 Cosmos DB 时的预期行为。 你的问题有两点:

  • NSG 可以与子网或网络接口级别相关联。在这种情况下,当 NSG 与子网关联时,规则适用于连接到该子网的所有资源。如果子网 NSG 具有拒绝流量的匹配规则,则数据包将被丢弃,即使 VM\NIC NSG 具有允许流量的匹配规则也是如此。阅读 here1 and here2.

  • 当您在 VNet 中启用 Cosmos DB 作为服务端点时,它会通过直接连接将您的虚拟网络专用地址 space 和 VNet 的标识扩展到 Azure 服务。从 VNet 到 Azure 服务的流量始终保持在 Microsoft Azure backbone 网络 上。

    Today, Azure service traffic from a virtual network uses public IP addresses as source IP addresses. With service endpoints, service traffic switches to use virtual network private addresses as the source IP addresses when accessing the Azure service from a virtual network. This switch allows you to access the services without the need for reserved, public IP addresses used in IP firewalls.

因此,如果您从 VNet 访问 Cosmos DB,它将使用该 VNet 中的专用 IP 地址来访问 Azure Cosmos DB 服务。如果您在 Azure 之外访问 Cosmos DB,您将被 Cosmos DB 的防火墙 IP 地址限制。