AWS:使路由对外界私有

AWS: Make route private from outside world

我目前在 EC2 实例上 运行 有一个 Web 应用程序,旁边有 MySQL 运行。

我正在构建另一个需要来自 MySQL 数据库的信息的后端批处理服务。但是,我不希望它直接访问数据库。我想做的是在 Web 应用程序中构建一些 API 路由,即只能在内部访问(例如在 VPC 内)的 /private/foo/private/bar,而所有其他路由都可以继续正常工作。

我想知道如何进行设置?

您的 VPC 使用私有子网(您可以配置地址)。您需要做的就是确保进入您服务器的流量来自同一子网。

由于您希望现有的 webapp 为这些专用路由提供服务,因此您需要在代码中查找原始 IP 地址。 (如果您不知道该怎么做,您可能会提出一个新的问题。)

另一种方法是 运行 第二个服务(或相同的服务但​​在第二个端口上侦听)。如果所有私有流量都来自端口 8081(例如)并且所有 public 流量都来自端口 8080,您可以只使用 AWS 的安全组来仅允许子网本地流量到端口 8081 和所有到 8080 的流量。

运行 一个 http/s Apache 反向代理服务器在您的 Web 应用程序前面。使用这个新的 Web 层来控制所有内部和外部 http/s 流量。

外部流量:

  1. 将 Apache 配置为在 80/443 上侦听外部流量。
  2. 使用并配置 Apache 模块 Proxy-Pass 以反向代理 Apache 虚拟主机配置中端口 80/443 中的所有 Web 应用程序流量。
  3. 使用 80/443 虚拟主机配置中的 <Location > 指令阻止对 /private 的访问
  4. 更新您的 DNS 记录以指向此网络层而不是您的网络应用程序

如何容纳您的内部流量:

  1. 让 Apache 侦听新端口,例如8080
  2. 为端口 8080 配置 Apache 虚拟主机以将内部 http 请求反向代理到您的 Web 应用程序,即 /private

如何保护设计:

  1. 使用 AWS 安全组阻止端口 8080 上的任何外部流量。
  2. 通过在 Apache 8080 虚拟主机配置中使用 Apache allow,deny 规则来加倍降低安全规则,以确保仅允许来自内部 ip-range
  3. 的流量

上面的替代 Apache 配置:

不要理会端口 8080,所有内部和外部流量都使用 80,443。内部流量会针对不同的域名发出请求,并且您的内部和外部流量可以 managed/separated 使用 Apache 基于名称的虚拟主机 https://httpd.apache.org/docs/current/vhosts/name-based.html