Atlas 集群和 AWS 之间的 VPC 对等互连在没有 0.0.0.0/0 IP 白名单的情况下失败

问题描述 投票:0回答:1

我已经在我的 AWS VPC 和我的 mongodb 集群之间设置了 VPC 对等。 lambda 函数连接到 VPC,由 cognito 触发,并负责与 Mongo 对话。

VPC在terraform中配置如下:

data "aws_availability_zones" "available" {}

# VPC
resource "aws_vpc" "lambda_vpc" {
  cidr_block           = var.vpc_cidr
  enable_dns_hostnames = true
  enable_dns_support   = true

  tags = {
    "Name" = "${terraform.workspace}_vpc_for_lambda"
  }
}

# Subnets
resource "aws_subnet" "vpc_private_subnet" {
  depends_on        = [aws_vpc.lambda_vpc]
  count             = length(data.aws_availability_zones.available.names)
  vpc_id            = aws_vpc.lambda_vpc.id
  cidr_block        = # the cidr for the subnet (removed for this post)
  availability_zone = data.aws_availability_zones.available.names[count.index]
}

# Route table
resource "aws_route_table" "lambda_route_table" {
  vpc_id = aws_vpc.lambda_vpc.id
}


# Security Groups
resource "aws_security_group" "lambda_security" {
  name   = "lambda_vpc_security_group"
  vpc_id = aws_vpc.lambda_vpc.id

  egress {
    description = "The required network traffic rule for connecting to Atlas" # https://www.mongodb.com/docs/atlas/security-vpc-peering/#aws-vpc-peering-prerequisites"
    protocol    = "6" # this is TCP
    from_port   = 27015
    to_port     = 27017
    cidr_blocks = var.mongodb_cidr_block
  }
}

然后我有:

  • 手动创建从 MongoDB 集群到 AWS VPC 的对等连接并接受它。
  • 将对等连接的路由添加到路由表中。

从 terraform 配置可以看出,我没有互联网网关。这是有目的的,lambda 不需要与互联网对话,只需要通过 VPC 对等连接与 MongoDB 集群对话。

lambda 附加到的安全组(与配置中的相同)具有在 mongo 文档中指定的规则 --> https://www.mongodb.com/docs/atlas/security-vpc -对等/#aws-vpc-对等-先决条件

在 Mongo 方面,我列入白名单的初始 IP 地址包括 AWS VPC CIDR 块和

0.0.0.0/0
。似乎一切正常。但是,我想将列入白名单的 IP 锁定为仅 VPC CIDR 和我使用的 IP。据我所知,进入 Mongo 的流量始终来自 AWS VPC,因为这就是配置在 terraform 和 AWS 控制台中所说的内容。但是,当我删除
0.0.0.0/0
规则时,lambda 不再能够连接到 MongoDB 集群。我不明白为什么会这样,当然它不需要这条规则来连接,因为流量不是来自任何不属于 VPC CIDR 的 IP。

从那时起,我也尝试将安全组ID添加到白名单IP列表中(这是Mongo IP访问列表似乎支持的东西。)但这也没有解决问题。

有人知道为什么会这样吗?

编辑:

我已将流日志添加到 VPC 以尝试根据此处的文档调试流量 --> https://aws.amazon.com/blogs/aws/learn-from-your-vpc-flow-logs -with-additional-meta-data/

我确保让流日志显示源和目标 IP 以及我认为会有趣的其他字段。从结果来看,似乎绝对没有来自我的 lambda 的流量通过 VPC。 screenshot of log flow.

lambda 的流量是否有可能不经过 VPC,因为它附加到它?关于可能出什么问题的任何想法?

mongodb amazon-web-services amazon-vpc aws-vpc-peering
1个回答
0
投票

部分 MongoDB 实例不支持 VPC Peering

如果实例是问题所在,解决方案是将实例类型更改为任何不是:Atlas M0(免费集群)、M2、M5 或无服务器实例。

你分享的配置似乎是正确的,所以在更改实例后IP白名单中没有0.0.0.0/0的连接应该是正常的。

© www.soinside.com 2019 - 2024. All rights reserved.