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

标签 node.js mongodb google-app-engine mongodb-atlas whitelist

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

我的理解是 Google 将使用一系列 IP。我可能可以通过不时查询谷歌来访问这些( 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 中使用网络对等互连的说明(我有资格使用?请参阅链接:https://docs.atlas.mongodb.com/security-vpc-peering/),但存在重大限制,包括不允许使用其他 IP?我很难理解他们的文档。

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

最佳答案

如果您在 Atlas 上运行 M10-Cluster(或更高版本),VPC-Peering 是您的最佳选择。正如您所说,您很难阅读文档。我建议尝试 this tutorial .他们正在解释要列入白名单的 CIDR 范围(您所说的 IP)。
这里要注意一件事,他们使用 GCP Kubernetes Engine。使用 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 中 VPC 网络的 CIDR 范围列入白名单。您可以通过导航到 在 GCP 中执行此操作VPC-网络 -> 防火墙
  • 关于node.js - 将 Node.js 应用程序(托管在 GAE 上)的 IP 列入白名单以访问 MongoDB Atlas(托管在 GCP 上),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59997999/

    相关文章:

    javascript - 从循环内更新数据

    javascript - 如果条件直接转到 else 总是在我的情况下在 Node js

    java - 使用来自java的自动增量字段在mongodb中插入文档

    c++ - Node.js 插件对象销毁

    mongodb - Istio envoy 代理 sidecar 与容器文件系统有什么关系吗?

    mongodb - 过滤集合但按内部属性排序

    ios - 带有iOS客户端的Google App Engine Channel API?

    java - objectify v5 按嵌入类中的属性进行查询过滤

    javascript - 未处理的 promise 拒绝 - 关键路径不完整

    node.js - 错误: Cannot find module './lodash'