将 Node.js 应用程序(托管在 GAE 上)的 IP 列入白名单以访问 MongoDB Atlas(托管在 GCP 上)

Whitelisting IPs of a Node.js App (hosted on GAE) to access MongoDB Atlas (hosted on GCP)

我希望我的后端服务器(Node.js,托管在 Google App Engine 上,灵活的环境,如果这很重要)能够从我的数据库中获取和传递数据(MongoDB ,通过 Atlas,也托管在 Google 云平台上,与我的后端服务器位于同一区域)。理想情况下,我想保留一个可以访问我的数据库的 IP 的严格白名单,但我不确定如何识别它们。

我的理解是 Google 将使用一系列 IP。我也许可以通过不时查询 Google (Google App Engine - list of IP addresses?) 来访问这些内容。

我还从 Google 找到了一个关于如何将 App Engine 连接到 MongoDB Atlas 的很好的教程,但是他们很方便地忽略了如何将正确的 IP 列入白名单 (https://cloud.google.com/community/tutorials/mongodb-atlas-appengineflex-nodejs-app)。

我还从 Atlas 中找到了一些关于在 GCP 中使用网络对等互连的注释(我有资格使用它?请参阅 link:https://docs.atlas.mongodb.com/security-vpc-peering/),但存在重大限制,包括其他 IP 不适用允许?我很难理解他们的文档。

关键问题:有没有比上面第一个 link 更简单的方法?还是我经常查询并手动更改它?

在 App Engine 中使用 IP 不是很容易,也不是很好。对于这种情况,我会说在 GCE 上使用 VM - 您可以配置外部和内部静态 IP 地址 - 使用代理。

您可以找到有关 Reserving a static external IP address 保留静态内部 IP 地址的更多信息 ,如果你觉得这个方法对你有帮助的话

有一个打开的功能请求,供静态 IP 检查并可能由 Google 实施,您可以在此处访问:

除此之外,您还可以访问文档 Static IP Addresses and App Engine apps,以了解有关 App Engine 上已有选项的更多信息。

如果这些信息对您有帮助,请告诉我。

我相信 Google App Engine 有不同的帐户。很难准确找到连接到 MongoDB Atlas 的 GAE IP。

因此,准确地说,我建议您使用 mongoDB Atlas 的 VPC 对等功能。

如果您是 运行 Atlas 上的 M10-Cluster(或更高版本),VPC-Peering 是您的选择。正如您所说,您很难阅读文档。我建议尝试 this tutorial。他们正在解释将哪些 CIDR 范围(您称为 IP)列入白名单。

这里要注意一件事,他们正在使用 GCP 的 Kubernetes 引擎。使用 App Engine 需要一些额外的努力,因为它是 GCP 的“无服务器”解决方案之一,这就是为什么你不应该使用静态 IP 或类似的东西的原因。您需要通过连接器将您的应用程序连接到 VPC 网络:

  1. these instructions 之后在与您的 GAE-App 相同的区域中创建一个连接器。您可以使用 gcloud app describe 查看您的 GAE-App 当前所在的区域。现在只需为连接器提供 10.8.0.0 范围(/28 会自动添加)。记住你给它起的名字。

  2. 您的 app.yaml 必须像这样指向该连接器

runtime: nodejs10

vpc_access_connector:
  name: projects/GCLOUD_PROJECT_ID/locations/REGION_WHERE_GAE_RUNS/connectors/NAME_YOU_ENTERED_IN_STEP_1
  1. 转到您的 Atlas 项目,导航至 网络访问 并将您在步骤 1 中为连接器设置的 CIDR 范围列入白名单

  2. 您可能还需要将步骤 1 中的 CIDR 范围列入 VPC 网络的白名单。您可以通过导航到 VPC-Network -> Firewall

    在 GCP 中执行此操作