服务端点是否始终是访问 Azure 资源的最安全方式?

Is a service Endpoint always the securest way to access a resource on Azure?

我构建了一个体系结构,您可以在其中触发 Azure 函数将数据推送到位于我的 DMZ 后面的 Cosmos DB 中。一些实施指南指出,如果可能,应始终启用服务端点。但是,如果我这样做,Cosmos DB 可能会暴露在 Internet 中(尽管我不允许 Cosmos DB 防火墙中的任何 IP)。对于曝光,我指的是 Azure 中处理服务的顺序 (https://msdnshared.blob.core.windows.net/media/2016/05/1.bmp)。因此,Cosmos DB 默认会有一个 public 端点。

除了阻止所有 IP 地址外,我可以限制来自互联网的任何 public 访问吗?

Can I restrict any public access from the internet, except blocking all IP addresses?

实际上,通过启用服务终结点,您限制了只有来自该子网 的请求才能访问 Azure Cosmos DB。从 VNet 到 Azure 服务的流量始终保留在 Microsoft Azure backbone 网络上。因此,这是一种访问 Azure 资源的安全方式。

启用服务端点后,子网中虚拟机的源 IP 地址从使用 public IPv4 地址切换到使用其私有 IPv4 地址,当与该子网的服务通信时。此外,与该子网关联的默认 NSG 继续与服务端点一起工作,阅读 here。如果您想拒绝所有出站 Internet 流量并只允许从该子网访问 cosmos DB,您可以在 NSG 的出站规则中添加服务标记作为目标。

编辑

你可以看看这个Azure private link(preview),但它似乎还不适用于 Azure Cosmos DB 帐户。​​

Azure Private Link enables you to access Azure PaaS Services (for example, Azure Storage and SQL Database) and Azure hosted customer/partner services over a Private Endpoint in your virtual network. Traffic between your virtual network and the service traverses over the Microsoft backbone network, eliminating exposure from the public Internet.