首页 文章

如何从私有AWS ALB公开API endpoints

提问于
浏览
2

我们在AWS ECS上有几个微服务 . 我们有单个ALB,它针对不同的微服务具有不同的目标组 . 我们希望在外部公开一些 endpoints ,而某些 endpoints 仅用于内部通信 .

问题是,如果我们将负载均衡器放在公共VPC中,那么就意味着我们在外部暴露所有寄存器 endpoints . 如果我们将负载均衡器移动到私有VPC,我们必须在公共VPC中使用某种代理,这需要额外的基础设施/成本和自定义实现所有安全问题,如D-DOS等 .

我们可以采用哪些可行的方法或AWS为此提供某种开箱即用的解决方案?

5 回答

  • 0

    我强烈建议为此运行2个albs . 当然,它会花费你更多(不是因为流量成本不会翻倍),但是拥有内部负载均衡器和外部负载均衡器会更加直接 . 工作时间也要花钱!运行2个albs将是最少的管理员,可能是最便宜的整体 .

  • -1

    结帐WAF . 它代表Web应用程序防火墙,可作为AWS服务使用 . 请遵循以下步骤作为指导:

    • 创建WAF ACL .

    • 为您的私有 endpoints 添加"String and regex matching"条件 .

    • 为允许访问私有 endpoints 的IP列表/范围添加"IP addresses"条件 .

    • 如果满足上述两个条件,请在ACL中创建允许访问的规则 .

    • 将ALB分配给您的WAF ACL .


    UPDATE:

    在这种情况下,您必须在公共子网中使用外部ALB,如Dan Farrell在下面的评论中所述 .

  • 1

    我建议这样做:

    • 一个内部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

  • 0

    这是我们最终如何解决的 .

    • 两个LB私有,一个在公有子网 .

    • 有些API意味着公开,所以直接通过公共LB公开 .

    • 对于某些私有API endpoints 需要公开,在公共LB中添加代理,并通过此代理将这些特定路径从公共LB路由到私有LB.

  • 0

    你想看看AWS Security Groups .

    安全组充当实例的虚拟防火墙,以控制入站和出站流量 . 对于每个安全组,您可以添加控制实例的入站流量的规则,以及控制出站流量的单独规则集 .

    更具体的是你的用例虽然可能是他们在ELB Security Groups上的文档 . 正如您所料,这些是在ELB级别而不是实例级别应用的安全组 .

    使用安全组,您可以指定谁有权访问哪些 endpoints .

相关问题