我们在AWS ECS上有几个微服务 . 我们有单个ALB,它针对不同的微服务具有不同的目标组 . 我们希望在外部公开一些 endpoints ,而某些 endpoints 仅用于内部通信 .
问题是,如果我们将负载均衡器放在公共VPC中,那么就意味着我们在外部暴露所有寄存器 endpoints . 如果我们将负载均衡器移动到私有VPC,我们必须在公共VPC中使用某种代理,这需要额外的基础设施/成本和自定义实现所有安全问题,如D-DOS等 .
我们可以采用哪些可行的方法或AWS为此提供某种开箱即用的解决方案?
5 回答
我强烈建议为此运行2个albs . 当然,它会花费你更多(不是因为流量成本不会翻倍),但是拥有内部负载均衡器和外部负载均衡器会更加直接 . 工作时间也要花钱!运行2个albs将是最少的管理员,可能是最便宜的整体 .
结帐WAF . 它代表Web应用程序防火墙,可作为AWS服务使用 . 请遵循以下步骤作为指导:
创建WAF ACL .
为您的私有 endpoints 添加"String and regex matching"条件 .
为允许访问私有 endpoints 的IP列表/范围添加"IP addresses"条件 .
如果满足上述两个条件,请在ACL中创建允许访问的规则 .
将ALB分配给您的WAF ACL .
UPDATE:
在这种情况下,您必须在公共子网中使用外部ALB,如Dan Farrell在下面的评论中所述 .
我建议这样做:
一个内部ALB
每个微服务一个目标组,受ECS限制 .
一个网络负载均衡器(NLB),具有一个基于IP的目标组 .
基于Ip的目标组将具有内部ALB IP地址,因为ALB的私有IP地址不是静态的,您需要使用此lambda函数设置cloudwatch cron规则(从aws文档分叉并修改为在公共 endpoints 上工作)好):
https://github.com/talal-shobaita/populate-nlb-tg-withalb/
ALB和NLB都可以通过AWS进行扩展并受DDOS保护,AWS WAF是另一个可以直接附加到ALB侦听器以获得扩展保护的强大工具 .
或者,您可以等待AWS支持每个服务的多个目标组注册,它已经在他们的路线图中:
https://github.com/aws/containers-roadmap/issues/104
这是我们最终如何解决的 .
两个LB私有,一个在公有子网 .
有些API意味着公开,所以直接通过公共LB公开 .
对于某些私有API endpoints 需要公开,在公共LB中添加代理,并通过此代理将这些特定路径从公共LB路由到私有LB.
你想看看AWS Security Groups .
更具体的是你的用例虽然可能是他们在ELB Security Groups上的文档 . 正如您所料,这些是在ELB级别而不是实例级别应用的安全组 .
使用安全组,您可以指定谁有权访问哪些 endpoints .