首先,我是 docker-compose 和 AWS 服务的新手,但我已经尝试了解它并正确准备它,欢迎任何建议。
我需要使用 ECS 发布应用程序(这部分工作得很好,我使用 docker-compose 来完成它。它使用弹性公共 IP 正确发布并且有效),但必须通过允许的 IP 限制对应用程序的访问。我的想法是使用公共 IP(分配给负载均衡器的弹性 IP)发布应用程序,并在那里限制安全组的访问。
但是我可以向负载均衡器添加任何类型的安全组,如果我修改了服务的安全组,它们就无法工作。
我的问题是,我可以为 NLB 分配白名单 IP 吗?我已经看到我可以在 ALB 中执行类似白名单 IP 的操作,但它不会分配弹性 IP。
答案1
您是否正在发布 Web 应用程序/API?如果是,您可能应该使用应用程序负载平衡器而不是网络负载平衡器。NLB 通常用于非 http(s) 应用程序,您可以将它们与 http(s) 一起使用,但 ALB 往往更适合。
设计注意事项
我建议你考虑一下是否真的需要静态 IP。一些旧系统或嵌入式系统可能需要它,但大多数系统都可以使用 DNS 地址。如果你真的需要静态 IP,你可以使用这些技术之一(或者您在 Google 上找到的其他方法)为 ALB 提供静态 IP,AWS Global Accelerator 可以做到这一点,但我不确定这对您来说是否是一个好的解决方案。您还必须考虑高可用性。
关于白名单的静态 IP,您可以考虑使用与 ALB 集成的 AWS Cognito(最佳)或在容器内进行身份验证。我们通常与 Azure AD 联合,但您可以在 Cognito 中定义用户/组。只有当 Cognito 授权流量时,用户到 ALB 的流量才会到达目标容器/服务器。
主要建议:AWS ALB 与 AWS Cognito 集成以进行身份验证,如果您愿意,可以围绕 ALB 进行安全组,但不需要白名单。
原始问题
ALB 有安全组。网络负载均衡器没有。NLB 对流量不可见,因此您需要在资源(容器)周围而不是负载均衡器周围放置一个安全组。
ALB IP 白名单选项:
- 您可以使用安全组将 ALB 的访问权限列入白名单,但不能使用安全组将访问权限列入黑名单。规则数量有上限,但每个 ALB 可能可以附加多个 SG - 但要小心,因为它会影响性能。如果您不想使用 Cognito,这是我对您的第二个建议。
- 您可以使用网络访问控制列表 (NACL) 列入白名单或黑名单
- 您可以使用本地防火墙在容器内执行某些操作,但我不建议这样做
NLB IP 白名单选项:
- ECS 容器周围的安全组
- 子网周围的 NACL