如何从私有AWS ALB公开API端点

时间:2018-02-12 18:35:49

标签: amazon-web-services microservices amazon-vpc aws-ecs

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

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

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

7 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

结帐WAF。它代表Web应用程序防火墙,可作为AWS服务使用。请按照以下步骤操作:

  1. 创建WAF ACL。
  2. 为您的私人终端添加“字符串和正则表达式匹配”条件。
  3. 为允许访问私有端点的IP列表/范围添加“IP地址”条件。
  4. 如果满足上述两个条件,请在ACL中创建允许访问的规则。
  5. 将ALB分配给您的WAF ACL。

  6. <强>更新

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

答案 2 :(得分:0)

我建议这样做:

  • 一个内部ALB
  • 受ECS限制,每个微服务只有一个目标组。
  • 一个网络负载平衡器(NLB),具有一个基于IP的目标组。
  • 基于Ip的目标组将具有内部ALB IP地址,因为ALB的私有IP地址不是静态的,因此您需要使用此Lambda函数设置cloudwatch cron规则(从AWS文档中分叉并修改为可在公共环境下使用端点):

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

答案 3 :(得分:0)

这是我们最终解决的方式。

  1. 两个LB,一个在私有子网中,一个在公共子网中。
  2. 某些API是公开的,因此可以通过公共LB直接公开。
  3. 对于某些私有API,需要公开端点,在公共LB中添加一个代理,并通过该代理将这些特定路径从公共LB路由到私有LB。

答案 4 :(得分:0)

这些天,API Gateway是执行此操作的最佳方法。您可以让您的API服务于许多不同的端点,同时通过API网关仅服务于公共端点,并代理回到该API。

答案 5 :(得分:0)

我还没有看到它,因此我会注意到我们使用CloudMap进行内部路由,并使用ALB进行“外部”(在我们的情况下,简单来说是内部/内部VPC)通信。我没有深入阅读,但我认为this article描述了它。

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中的所有任务实例。

答案 6 :(得分:-1)

您想查看AWS Security Groups

  

安全组充当您的实例的虚拟防火墙,以控制入站和出站流量。

     

对于每个安全组,您可以添加控制实例的入站流量的规则,以及控制出站流量的单独规则集。

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

使用安全组,您可以指定谁有权访问哪些端点。