AWS lambda使用专用Hostzone DNS连接到内部ELB

问题描述 投票:3回答:4

我想设置一个在私有VPC上运行的EC2实例。它可以从专用VPC连接到Internet,但无法从外部访问。还有一个lambda函数可以触发EC2启动与外部资源(S3,Dynamo,Internet)的某些交互。

我已经建立了一个VPC如下:

  1. 在私有VPC子网中运行docker的EC2实例
  2. ALB(应用程序负载平衡器)配置为内部和私有子网(与EC2子网相同)
  3. 正在运行的NAT网关
  4. 一个lambda函数,它将对Internet和ALB执行HTTPs GET和POST
  5. Route53私有Hostzone有一个记录集,它将“abcd.internal / api”路由到ALB。

这是问题所在。 lambda函数可以使用HTTP连接到Internet,但是当它无法使用私有Hostzone记录(“abcd.internal”)向ALB进行HTTP连接时。

我的理解是我的ALB,EC2,lambda,NAT网关和Route53配置在同一个VPC中,它们应该能够通过私有DNS名称相互通信。我不知道为什么会失败。

注意:在设置内部ALB之前,我尝试在公有子网中设置面向Internet的ALB,然后为此ALB配置公共Hostzone记录集“abcd.public”。它可以与EC2实例通信,EC2实例可以通过NAT网关与Internet进行交互。因此,“EC2 to Internet”部分正在发挥作用。

更新:我终于在lambda日志中挖掘了一些错误消息,如下所示:

错误:主机名/ IP与证书的altnames不匹配:“Host:abcd.internal。不在证书的altnames中:DNS:.public”]原因:'Host:abcd.internal。不在证书的altnames中:DNS:.public',host:'abcd.internal。',

这太有趣了。我确实有一个公共主机区域与私有主机区域共存,但公共主机区域用于其他目的。我不知道为什么lambda函数使用公共DNS而不是私有DNS,因为它是在私有子网内配置的。

amazon-web-services aws-lambda amazon-route53 amazon-vpc elastic-load-balancer
4个回答
3
投票

感谢发表评论并提出建议的所有人。

为了解决这个问题,我几乎在网上找到了所有可能的解决方案。我把一切都放在了正确的位置。 Lambda函数,ELB和EC2位于同一VPC私有子网中。正确设置Route53,NAT和IGW。我确实尝试过使用DHCP选项设置,但没有用。也许我不完全理解这个DHCP,我找不到一个例子。

事实证明,HTTPS协议无法正常工作。在我转移到私有VPC之前,我在公共VPC中设置相同的东西,资源使用HTTPS进行通信。例如,lambda函数将GET / POST到EC2实例或ELB。将内容移动到私有VPC后,HTTPS命令无法使用内部DNS名称。

但是,如果我使用HTTP协议,资源最终可以通过内部DNS名称找到对方。

我仍然不知道为什么HTTPS不能在私有VPC中使用,但我可以使用这个解决方案。


0
投票

我有同样的问题。

ALB未被添加为Lambda的触发器,这导致了类似的证书问题。在我的情况下,安全组配置错误。我注意到我分配给Lambda的角色应该包含具有创建/删除ENI权限的策略

有时ALB更新不是很快。所以我用相同的设置重新创建,它开始工作。


0
投票

您是否确定检查附加到Lambda的IAM角色是否可以访问ec2网络相关操作?以下是IAM策略的示例:

{
"Version": "2012-10-17",
"Statement": [
    {
        "Action": [
            "ec2:CreateNetworkInterface",
            "ec2:DescribeNetworkInterfaces",
            "ec2:DeleteNetworkInterface",
            "ec2:DescribeSecurityGroups",
            "ec2:DescribeSubnets"
        ],
        "Resource": [
            "*"
        ],
        "Effect": "Allow"
    }
]
}

-1
投票

将负载均衡器放置在私有子网中时,只能从VPC内部访问Internet。如果这是你的意图,那好吧。如果您希望Lambda函数能够访问内部负载均衡器,那么您需要将Lambda函数放在同一个VPC中。

[评论后编辑]

如果在VPC私有子网中同时具有负载均衡器和Lambda,并且您希望使用专用DNS名称,则需要配置DHCP选项集以在Route53中使用您自己的DNS服务器,以便Lambda函数可以解析私有DNS名称。

DHCP Options Sets

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