无法通过同一子网中的 EC2 ping AWS IoT VPC 接口终端节点

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

我正在尝试创建一个 AWS IoT VPC 接口终端节点。我正在使用地形。 每个 AWS 账户都带有一个 IoT Core 端点,如下所示: xxxxxxxxxxxxxx-ats.iot.us-east-1.amazonaws.com

可以从公共互联网对它们进行 ping 操作。

这是我正在尝试的代码: 创建了一个带有互联网网关、路由表和公共子网的 VPC(更容易测试,稍后将在私有子网中进行)。 创建了一个安全组,允许 CIDR“172.16.0.0/16”的端口 443、80、8883、8 (ICMP) 上的传入流量。所有端口和所有 IP 均允许传出。

端点生成代码:

resource "aws_vpc_endpoint" "iot_core_vpc_interface_endpoint" {
  vpc_id = aws_vpc.main.id
  vpc_endpoint_type   = "Interface"
  subnet_ids          = [for subnet in aws_subnet.public_web_subnets : subnet.id]
  service_name        = "com.amazonaws.us-east-1.iot.data"
    
  private_dns_enabled = false
  security_group_ids  = [aws_security_group.endpoint_security_group.id]
}

对于私人托管区域

data "aws_iot_endpoint" "iot_endpoint" {
  endpoint_type = "iot:Data-ATS"
}
    
resource "aws_route53_zone" "iot_private_hosted_zone" {
  name = data.aws_iot_endpoint.iot_endpoint.endpoint_address
    
  vpc {
    vpc_id = aws_vpc.main.id
    vpc_region = var.region
  }
}

最后是 53 号公路设置。

resource "aws_route53_record" "www" {
  zone_id = aws_route53_zone.iot_private_hosted_zone.zone_id
  name    = data.aws_iot_endpoint.iot_endpoint.endpoint_address
  type    = "A"
    
  alias {
    name = aws_vpc_endpoint.iot_core_vpc_interface_endpoint.dns_entry[0].dns_name
    zone_id = aws_vpc_endpoint.iot_core_vpc_interface_endpoint.dns_entry[0].hosted_zone_id
    evaluate_target_health = true
  }
}

我在同一公有子网中创建了一个 EC2 实例,附加了相同的安全组,并尝试从中 ping 终端节点 xxxxxxxxxxxxxx-ats.iot.us-east-1.amazonaws.com 但没有给出任何答复。

dig xxxxxxxxxxxxxx-ats.iot.us-east-1.amazonaws.com

提供与 VPC 终端节点关联的私有 IP。

当我删除 Route 53 托管区域和记录时,我能够 ping 终端节点。我猜它只是开始通过互联网而不是 VPC 端点发送流量。

我认为我在这里错过了一些小但重要的细节。

amazon-web-services terraform terraform-provider-aws aws-iot
1个回答
0
投票

奇怪的是,我们一直在做同样的事情,试图节省 NAT 成本。虽然在这一天的大部分时间里都在努力解决这个问题,但我认为它必须处理路由或防火墙的问题,因为 ats 端点解析为 VPC 端点的私有 IP,并且我可以使用流日志验证 ping 请求是否超出了子网。

一时兴起,我尝试了 telnet 和curl 来测试与ats 端点的连接,并且在仅连接到端口443 时,两者似乎都可以工作。

curl -v {id}-ats.iot.eu-west-1.amazonaws.com -p 443

telnet {id}-ats.iot.eu-west-1.amazonaws.com 443

已验证我的 lambda 函数也能够连接到 IoT 端点以发布消息。我们测试连接的方式似乎存在问题。

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