AWS VPC配置中有4 scenarios。但让我们看看这两个:
由于在公共子网中启动的任何实例都没有EIP(除非已分配),因此无法从Internet寻址。然后:
答案 0 :(得分:21)
我建议使用另一种特色"私人"子网和NAT实例/网关。他们没有必要。如果您不希望从互联网访问该计算机,请不要将其放入允许此类访问的安全组中。
通过放弃NAT实例/网关,您可以消除实例/网关的运行成本,并消除速度限制(无论是250mbit还是10gbit)。
如果你的机器也不需要直接访问互联网,(我会问你是如何修补它的*),那么无论如何都不要分配公共IP地址。
*如果这里的答案是某种代理,那么,您需要承担额外费用,但每个代理都是他自己的。
答案 1 :(得分:20)
我没有在Michael的回答上添加评论的声誉,因此将我的评论添加为答案。
值得注意的是,与运行您自己的实例相比,AWS管理网关的价格是日期的3倍。这当然假设您只需要一个NAT实例(即您没有为故障转移配置多个NAT实例等),这对于大多数中小型用例场景通常都是如此。假设通过NAT网关每月传输100GB数据,
托管NAT实例每月费用= 33.48美元/月(0.045美元/小时*一个月744小时)+ 4.50美元(每GB数据处理0.045美元* 100GB)+ 10美元(所有数据的标准AWS数据传输费用为.10美元/ GB)通过NAT网关传输)= $ 47.98
n2.nano实例配置为NAT实例= $ 4.84 /月(每月$ 0.0065 * 744小时)+ $ 10(通过NAT实例传输的所有数据的$ .10 / GB标准AWS数据传输费用)= $ 14.84 < / p>
当您使用冗余NAT实例时,这当然会发生变化,因为AWS管理的NAT网关具有内置的高可用性冗余。如果你不关心额外的33美元/月,那么托管的NAT实例绝对值得减少头痛,而不必维护另一个实例。如果您正在运行VPN(例如OpenVPN)实例来访问VPC中的实例,您可以简单地将该实例配置为充当您的NAT网关,然后您不必仅为了维护一个额外的实例NAT(虽然有些人可能不赞成组合VPN和NAT的想法)。
答案 2 :(得分:10)
Michael - sqlbot的答案隐含假设私有IP地址是必需的。我认为值得质疑这个假设 - 我们是否首先需要使用私有IP地址?至少有一位评论者提出了同样的问题。
具有NAT实例的私有子网上的服务器有什么优势[对]具有严格安全策略的[在]公共子网中的服务器? - abhillman Jun 24 '14 at 23:45
想象一下您使用VPC并为所有EC2实例分配公共IP地址的情况。不要担心,这并不意味着他们必须通过互联网访问,因为您使用安全组来限制访问,其方式与EC2 classic的功能完全相同。通过使用公共IP地址,您可以轻松地将某些服务暴露给有限的受众,而无需使用像ELB这样的东西。这使您无需设置NAT实例或NAT网关。由于您需要一半的子网,您可以选择为您的VPC使用较小的CIDR分配,或者您可以使用相同大小的VPC制作更大的子网。更少的子网意味着您也将为AZ之间的流量支付更少的费用。
那么,为什么我们不这样做呢?为什么AWS说最佳做法是使用私有IP?
亚马逊网络服务提供的公共IPv4地址有限,因为整个互联网的公共IPv4地址供应有限。使用私有IP地址符合他们的最佳利益,这些私有IP地址实际上是无限制的,而不是过度消耗稀缺的公共IPv4地址。您可以在AWS价格弹性IP中看到一些证据;附加到实例的EIP是免费的,但未使用的EIP需要花钱。
但是为了争论,我们假设我们并不关心互联网上公共IPv4地址的短缺。毕竟,我的应用程序很特别。接下来会发生什么?
只有两种方法可以将公共IP地址附加到VPC中的EC2实例。
<强> 1。关联公共IP地址
您可以在启动新的EC2实例时请求公共IP地址。此选项在控制台中显示为复选框,在使用aws-cli时显示为--associate-public-ip-address标志,在使用CloudFormation时显示为嵌入式网络接口对象上的AssociatePublicIpAddress标志。在任何情况下,公共IP地址都分配给eth0
(DeviceIndex = 0)。您只能在启动新实例时使用此方法。但是,这有一些缺点。
缺点是更改正在使用嵌入式网络接口对象的实例的安全组将强制立即替换实例,至少在您使用CloudFormation时是这样。
另一个缺点是,当实例停止时,以这种方式分配的公共IP地址将丢失。
<强> 2。弹性IP
一般而言,弹性IP是首选方法,因为它们更安全。您可以保证继续使用相同的IP地址,不会意外删除任何EC2实例,您可以随时自由地附加/分离弹性IP,并且您可以自由更改应用于EC2的安全组实例
...但AWS限制您每个地区5个EIP。您可以申请更多,可能的请求将被授予。但AWS可能会基于我上面提到的推理而拒绝该请求。因此,如果您计划将基础架构扩展到每个区域超过5个EC2实例,那么您可能不想依赖EIP。
总之,使用公共IP地址确实带来了一些好处,但如果您尝试专门使用公共IP地址,则会遇到管理或扩展问题。希望这有助于说明和解释为什么最佳实践是他们的方式。