作为标题中的问题,我在 Azure Cloud 上设置了以下架构,并且在限制从 Internet 直接访问 VM 时遇到了麻烦。
以下是架构要求:
- 两个虚拟机都必须有公共 ips(系统管理员才能通过 SSH 访问)
- 必须拒绝从 Internet 到 VM 上的 WebService 的直接流量(通过端口 80)
- 来自 Internet 的 Web 流量必须通过公共 LB 到 VM
假设两个 VM 都在 WebASG(应用程序安全组)中,在应用于 VM 子网的 NSG 设置中,我添加了一些规则(其优先级高于 3 个 Azure NSG 默认规则):
- 场景 A(添加 1 条自定义规则):
端口:80 - 协议:Tcp - 源:Internet - 目标: WebASG - 操作:允许
使用此 NSG 设置,我可以从 LoadBalancer IP 访问 WebService(满足 #3 要求),但是两个 VM 的端口 80 上的 WebService 将暴露给 Internet(这违反了 #2 要求)
- 场景 B(添加 2 条自定义规则):
端口:80 - 协议:Tcp - 源:AzureLoadBalancer - 目标:WebASG - 操作:允许
端口:80 - 协议:Tcp - 来源:Internet - 目的地: WebASG - 操作:拒绝
使用此 NSG 设置,满足 #2 要求,但访问 LoadBalancer IP 时无法访问 WebService(违反 #3 要求)
请注意:使用 AGW(Azure 应用程序网关,我可以通过这些 NSG 配置实现所有要求:
规则名称:AllowSSH端口:22 - 协议:Tcp - 源: sys-admin-ip-address - 目标:WebASG - 操作:允许
规则名称:DenyInternet2Web端口:任意- 协议:任意- 源:Internet - 目标:WebASG - 操作:拒绝
规则名称:AllowProbe2Web端口:80 - 协议:Tcp - 源:VirtualNetwork - 目标:WebASG - 操作: 允许
规则名称:AllowProbe2Web端口:80 - 协议:Tcp - 源:VirtualNetwork - 目标:WebASG - 操作: 允许
我不想使用 AGW,因为它会比 Azure LoadBalancer 花费更多的钱(实际上 Basic LoadBalancer 是免费的)。那么,在使用 LoadBalancer 时如何更改 NSG 以满足所有要求?
提前感谢您的帮助!