将 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 网络:
在 these instructions 之后在与您的 GAE-App 相同的区域中创建一个连接器。您可以使用 gcloud app describe
查看您的 GAE-App 当前所在的区域。现在只需为连接器提供 10.8.0.0
范围(/28
会自动添加)。记住你给它起的名字。
您的 app.yaml 必须像这样指向该连接器
runtime: nodejs10
vpc_access_connector:
name: projects/GCLOUD_PROJECT_ID/locations/REGION_WHERE_GAE_RUNS/connectors/NAME_YOU_ENTERED_IN_STEP_1
转到您的 Atlas 项目,导航至 网络访问 并将您在步骤 1 中为连接器设置的 CIDR 范围列入白名单
您可能还需要将步骤 1 中的 CIDR 范围列入 VPC 网络的白名单。您可以通过导航到 VPC-Network -> Firewall
在 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 网络:
在 these instructions 之后在与您的 GAE-App 相同的区域中创建一个连接器。您可以使用
gcloud app describe
查看您的 GAE-App 当前所在的区域。现在只需为连接器提供10.8.0.0
范围(/28
会自动添加)。记住你给它起的名字。您的 app.yaml 必须像这样指向该连接器
runtime: nodejs10
vpc_access_connector:
name: projects/GCLOUD_PROJECT_ID/locations/REGION_WHERE_GAE_RUNS/connectors/NAME_YOU_ENTERED_IN_STEP_1
转到您的 Atlas 项目,导航至 网络访问 并将您在步骤 1 中为连接器设置的 CIDR 范围列入白名单
您可能还需要将步骤 1 中的 CIDR 范围列入 VPC 网络的白名单。您可以通过导航到 VPC-Network -> Firewall
在 GCP 中执行此操作