我很难弄清楚如何为我的LoadBalancer设置正确的SecurityGroup规则。我已经制作了一个图表来尝试说明这个问题,请看下图:

我有一个面向互联网的LoadBalancer (图中的“服务A LoadBalancer”),它是从“内部”和我们的一个ECS服务(图中的“任务B”)请求的。对于内部请求,我可以为"Service A LoadBalancer“配置一个SecurityGroup规则,允许从内部IP的CIDR到端口80上的LoadBalancer的传入请求。这没有问题。但是对于另一个ECS服务,任务B,我该如何添加一个只允许来自任务B的请求的规则(用于图中的“服务A SecurityGroup”)?(或仅来自ECS集群中的任务)。因为它是一个面向internet的负载均衡器,所以请求来自机器EC2的公共ip,而不是私有ip(据我所知?)。
显然,我可以制定一条规则,允许来自0.0.0.0/0的端口80上的请求,这是可行的,但限制还远远不够。因为它是一个面向互联网的集群,所以添加一个允许来自“集群SecurityGroup”(在图中)的请求的规则将不会切断它。我假设这是因为LB无法推断请求来自哪个SecurityGroup,因为它是面向互联网的-如果它是内部LoadBalancer,这将会起作用。但我不能使用内部LoadBalancer,因为它也是来自外部亚马逊网络服务(内部)的请求。
任何帮助都会得到重视。
谢谢Frederik
发布于 2017-02-07 21:41:46
我们通过运行单独的面向Internet和内部负载均衡器来解决此问题。同一个集群可以有多个ELB或ALB (ELBv2)。假设您的ECS集群在一个IP范围上运行,比如10.X.X.X,您可以在内部ELB上打开10.X.0.0/16进行内部访问。只需确保ECS群集SG也对ELB开放即可。假设您在发出请求时使用内部ELB地址的DNS,任务B可以通过内部ELB地址到达任务A。如果您命中公共DNS的IP,它将始终是一个公共请求。
但是,您可能需要长期考虑是否真的需要一个公共ELB。下一步通常是运行openVPN之类的VPN,这样您就可以连接到私有网络并访问内网上的所有内容,而不是IP限制。我们通常只运行面向互联网的ELB,如果我们真的想在互联网上做一些事情,比如为外部客户。
https://stackoverflow.com/questions/42087480
复制相似问题