Amazon web services 仅允许通过ELB对AWS实例进行HTTP访问

Amazon web services 仅允许通过ELB对AWS实例进行HTTP访问,amazon-web-services,amazon-ec2,amazon-elb,Amazon Web Services,Amazon Ec2,Amazon Elb,我见过很多类似的问题,比如,但是没有一个给出一般的答案。我是AWS的新手。我现在有2个实例在我的VPC中运行。我在他们面前有一个ELB设置,它可以很好地将流量路由到两者。问题是,这两个实例目前也可以通过HTTP从整个web访问。我想改变一些事情,这样我的实例只能通过我的ELB在HTTP上被点击。我该怎么做呢?我找到了我要找的东西。在安全组中,您可以在“自定义IP”下添加另一个安全组作为源。如果亚马逊更清楚地表明这是允许的,那就太好了,因为安全组根本不是定制的IP。不管怎样,这就是你要做的:我将建

我见过很多类似的问题,比如,但是没有一个给出一般的答案。我是AWS的新手。我现在有2个实例在我的VPC中运行。我在他们面前有一个ELB设置,它可以很好地将流量路由到两者。问题是,这两个实例目前也可以通过HTTP从整个web访问。我想改变一些事情,这样我的实例只能通过我的ELB在HTTP上被点击。我该怎么做呢?

我找到了我要找的东西。在安全组中,您可以在“自定义IP”下添加另一个安全组作为源。如果亚马逊更清楚地表明这是允许的,那就太好了,因为安全组根本不是定制的IP。不管怎样,这就是你要做的:

我将建议以下额外的方法,这是在最初的解决方案被接受很久之后出现的。最初的解决方案也许是最好的,但是下面的方法是直接的,如果没有其他方法可以帮助进行故障排除的话

首先,将允许http从整个web上脱离的任何规则或安全组与实例断开关联。尤其要怀疑0.0.0.0/0,这意味着所有ip地址。然后,在应用于实例的安全组中,从VPC的专用地址空间允许端口80/http。例如,如果VPC的专用地址空间为172.31.0.0/16,则允许该范围通过直接应用于实例的安全组访问实例。此时,实例上的httpd服务器日志应该显示来自负载平衡器特定私有地址的访问尝试。假设运行状况检查的目标文件存在并由httpd正确提供服务,则目标组运行状况检查状态应从“不健康”更改为“正常”。请注意,负载平衡器健康检查器在httpd日志中清楚地将自己标识为ELB HealthChecker

172.31.3.56 - - [24/Oct/2017:17:02:36 +0000] "GET /index.html HTTP/1.1" 200 265 "-" "ELB-HealthChecker/2.0"
172.31.20.249 - - [24/Oct/2017:17:02:36 +0000] "GET /index.html HTTP/1.1" 200 265 "-" "ELB-HealthChecker/2.0"
172.31.3.56 - - [24/Oct/2017:17:03:06 +0000] "GET /index.html HTTP/1.1" 200 265 "-" "ELB-HealthChecker/2.0"
172.31.20.249 - - [24/Oct/2017:17:03:06 +0000] "GET /index.html HTTP/1.1" 200 265 "-" "ELB-HealthChecker/2.0"
此时,您可以将安全组允许的ip地址限制为仅显示在httpd日志中的ip地址,但我会小心,因为如果ELB重新启动,或者如果其配置被更改或重新加载,我怀疑它是否保证重新获取以前持有的相同的私有地址

现在,负载均衡器确认其目标是健康的,它将考虑它们为服务做好准备,并开始向它们发送流量。根据原始海报的目标(“问题是,这两个实例目前也可以通过HTTP从整个web访问。”)这种方法不允许从整个web访问实例


这里的大多数读者都熟悉私人地址。对于任何不熟悉的人来说,这都是一个很好的参考。

您熟悉AWS中的安全组吗?您还可以将EC2实例放在一个私有子网中,这意味着无法从Internet访问它们。此外,它们不需要有公共IP地址,因为ELB将使用内部IP地址来访问它们。@Eli-该安全组应用于何处?ELB或EC2实例本身?@hybrid9您编辑EC2实例安全组的规则,以允许从ELB的安全组进行HTTP/HTTPS访问。@Eli然后,在您的默认SG(分配给ELB)中,您向所有人打开了端口80,在EC2中,源是SG id,不是吗?有点像。我为我的LBs分配了一个非默认安全组。在该组上,我只为每个人打开了端口80(和端口443)。这就是我添加的在端口80上访问ec2实例的组。