【问题标题】:How to make EC2 instance in private subnet accessible from the internet? (as in being able to visit the website)如何使私有子网中的 EC2 实例可以从 Internet 访问? (如能够访问该网站)
【发布时间】:2019-07-28 05:19:59
【问题描述】:

我知道一种方法是在公共子网中使用负载平衡器,但对于开发服务器,我们不需要负载平衡器。是否有其他选项可以允许从 Internet 访问私有子网中的应用程序?

如果不是,那么最好的选择是将开发服务器留在公共子网中吗?数据库实例仍将位于私有子网中。

【问题讨论】:

  • 你需要有一个internet gateway,然后你才能为实例分配一个弹性IP。

标签: amazon-web-services amazon-ec2 private-subnet


【解决方案1】:

私有子网中的 Amazon EC2 实例将永远无法从 Internet 直接访问,即使它具有公共 IP 地址。这是因为私有子网没有将子网连接到 Internet 网关的路由表条目。这是有意为之的。

所以,你的选择是:

  • 将您的实例放入公共子网而不是私有子网,或者
  • 创建到 VPC 的 VPN 连接,以便您可以与 VPC 中的资源(包括私有子网)进行通信,或者
  • 连接到公共子网中的实例并使用 端口转发 获取与私有实例的连接(见下文),或
  • 在公共子网中使用负载均衡器或代理将流量转发到私有子网(一个好处是它模仿了生产设置)

端口转发是一种常用技术,可提供与不可直接访问的资源的专用连接。例如:

  • Public-Instance 在公共子网中
  • Private-Instance 在私有子网中
  • 通过端口转发通过 SSH 连接到 Public-Instance,然后建立到 Private-Instance 的连接
  • 访问本地计算机上的资源,它实际上会将请求转发到Private-Instance

一个示例连接字符串是:

ssh -i pemfile ec2-user@public-instance -L 8000:private-instance:80

任何发送到本地计算机端口 8000 的请求都会被转发到 Public-Instance,然后 Public-Instance 会将请求转发到 private-instance:80。只要 SSH 会话存在,这将继续。

【讨论】:

  • 感谢您的详细回复!我认为重新评估我的想法可能是一个好主意,即应用程序应该位于私有子网中。将 EC2 实例置于具有仅允许 HTTP、HTTPS 和 SSH 的安全组(仅限于堡垒主机安全组)的公共子网中与将 EC2 实例置于私有子网中并通过代理服务器路由 HTTP 流量有效不同在公共子网中?
  • 我最初也考虑过为开发服务器 EC2 实例使用负载均衡器,因为它可以完全满足我的需要,但我认为如果我正在设置负载,我肯定会忽略一些东西将流量引导到其中只有一个实例的单个目标组的平衡器。在我看来,这更像是一项工作。我看错了吗?这是相当普遍的事情吗?
  • 您完全可以不使用私有子网(允许 Lambda 访问 VPC 资源互联网除外)。这是一个过时的概念,与网络设备用于在子网级别实施安全性的方式有关。您可以改为使用安全组在实例级别强制实施安全性。然而,一些安全人员仍然喜欢使用私有子网作为额外的安全层。对于您的开发资源,您还应该将安全组锁定为仅限 您的 IP 范围,这样其他人就无法访问它们。
  • 这很有意义。我将继续在公共子网中设置它,然后使用安全组(并限制 SSH 的 IP 范围)。再次感谢您的所有见解,这真的很有帮助!
  • @JohnRotenstein - 如果私有子网 EC2 实例具有公共 IP,那么究竟是什么限制了对私有子网 EC2 实例的请求。因为请求可能到达VPC,VPC有IGW,IGW可以将Public IP翻译成Private IP,并且可以将请求重定向到私有子网中的ec2。在这里,我无法理解在路由表中查找入站请求。
猜你喜欢
  • 1970-01-01
  • 2014-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-03
  • 2021-11-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多