我们在 AWS ECS 上有几个微服务。我们有一个 ALB,它对不同的微服务有不同的目标组。我们希望在外部公开一些端点,而一些端点仅用于内部通信。
问题是,如果我们将负载均衡器放在公共 VPC 中,这意味着我们将所有注册端点都暴露在外部。如果我们将负载均衡器移动到私有 VPC,我们必须在公共 VPC 中使用某种代理,这需要额外的基础设施/成本以及所有安全问题(如 D-DOS 等)的自定义实现。
我们可以有哪些可能的方法,或者 AWS 是否为此提供了某种开箱即用的解决方案?
我们在 AWS ECS 上有几个微服务。我们有一个 ALB,它对不同的微服务有不同的目标组。我们希望在外部公开一些端点,而一些端点仅用于内部通信。
问题是,如果我们将负载均衡器放在公共 VPC 中,这意味着我们将所有注册端点都暴露在外部。如果我们将负载均衡器移动到私有 VPC,我们必须在公共 VPC 中使用某种代理,这需要额外的基础设施/成本以及所有安全问题(如 D-DOS 等)的自定义实现。
我们可以有哪些可能的方法,或者 AWS 是否为此提供了某种开箱即用的解决方案?
结帐 WAF。它代表 Web 应用程序防火墙,可作为 AWS 服务使用。请按照以下步骤操作:
更新:
在这种情况下,您必须在公共子网中使用面向外部的 ALB,如 Dan Farrell 在下面的评论中提到的。
我强烈建议为此运行 2 个 alb。当然,它会花费你更多(不是加倍,因为流量成本不会加倍),但是拥有一个内部负载均衡器和一个外部负载均衡器要简单得多。工作时间也要花钱!运行 2 个 albs 将是最少的管理员,并且可能是最便宜的整体。
我建议这样做:
https://github.com/talal-shobaita/populate-nlb-tg-withalb/
ALB 和 NLB 都是可扩展的,并且由 AWS 保护免受 DDOS 攻击,AWS WAF 是另一个很棒的工具,可以直接附加到您的 ALB 侦听器以提供扩展保护。
或者,您可以等待 AWS 支持每个服务的多个目标组注册,这已经在他们的路线图中:
如今,API Gateway 是做到这一点的最佳方式。您可以让您的 API 为多个不同的端点提供服务,同时通过 API Gateway 只为公共端点提供服务并代理回 API。
这就是我们最终解决的方法。
我还没有看到它提到它,所以我会注意到我们使用 CloudMap 进行内部路由,使用 ALB 进行“外部”(在我们的例子中只是内部/VPC 间)通信。我没有深入阅读,但我认为这篇文章描述了它。
AWS Cloud Map 是一种托管解决方案,可让您将逻辑名称映射到应用程序的组件/资源。它允许应用程序使用 AWS 开发工具包、RESTful API 调用或 DNS 查询之一来发现资源。AWS Cloud Map 为注册资源提供服务,这些资源可以是 Amazon DynamoDB 表、Amazon Simple Queue Service (SQS) 队列、使用 EC2 实例或 ECS 任务或使用无服务器堆栈构建的任何更高级别的应用程序服务。
...
Amazon ECS 与 AWS Cloud Map 紧密集成,为在 ECS 中运行的计算工作负载启用服务发现。当您为 ECS 服务启用服务发现时,它会自动跟踪 AWS Cloud Map 中的所有任务实例。
您想查看AWS 安全组。
安全组充当您的实例的虚拟防火墙,以控制入站和出站流量。
对于每个安全组,您可以添加控制入站流量到实例的规则,以及一组单独的控制出站流量的规则。
更具体到您的用例可能是他们关于ELB Security Groups的文档。正如您所料,这些是在 ELB 级别而不是在实例级别应用的安全组。
使用安全组,您可以指定谁有权访问哪些端点。