Amazon web services AWS lambda通过专用Hostzone DNS连接到内部ELB

Amazon web services AWS lambda通过专用Hostzone DNS连接到内部ELB,amazon-web-services,aws-lambda,amazon-route53,amazon-vpc,elastic-load-balancer,Amazon Web Services,Aws Lambda,Amazon Route53,Amazon Vpc,Elastic Load Balancer,我想设置一个运行在私有VPC上的EC2实例。它可以从私有VPC连接到Internet,但不能从外部访问。还有一个lambda函数可以触发EC2启动与外部资源(S3、Dynamo、Internet)的一些交互 我已经建立了一个VPC,如下所示: 在专用VPC子网中运行docker的EC2实例 配置为内部和专用子网(与EC2子网相同)的ALB(应用程序负载平衡器) 正在工作的NAT网关 一个lambda函数,用于HTTPs获取和发布到Internet和ALB Route53 private Host

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

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

  • 在专用VPC子网中运行docker的EC2实例
  • 配置为内部和专用子网(与EC2子网相同)的ALB(应用程序负载平衡器)
  • 正在工作的NAT网关
  • 一个lambda函数,用于HTTPs获取和发布到Internet和ALB
  • Route53 private Hostzone有一个记录集,用于将“abcd.internal/api”路由到ALB
  • 问题就在这里。lambda函数可以使用HTTPs连接到Internet,但当它无法使用HTTPs连接到带有私有Hostzone记录的ALB(“abcd.internal”)时

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

    注意:在设置内部ALB之前,我尝试在公共子网中设置面向internet的ALB,然后将公共Hostzone记录集“abcd.public”配置到此ALB。它可以与EC2实例对话,EC2实例可以通过NAT网关与Internet交互。因此,“EC2到Internet”部分正在工作

    更新: 我最终在lambda日志中发现了一些错误消息,如下所示:

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


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

    感谢所有发表评论和建议的人

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

    事实证明HTTPS协议不起作用。在我转到私有VPC之前,我在公共VPC中设置了相同的东西,资源使用HTTPS进行通信。例如,lambda函数将获取/发布到EC2实例或ELB。在我将内容移动到私有VPC后,HTTPS命令不能使用内部DNS名称

    然而,如果我使用HTTP协议,资源最终可以通过内部DNS名称找到彼此


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

    我也有同样的问题

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


    有时ALB更新不快。因此,我使用相同的设置重新创建,它开始工作。

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

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

    Lambda功能配置为在VPC的私有子网中运行,并有到NAT网关的路由?您不能为
    abcd.internal/api
    配置记录集,并期望它执行任何操作。DNS不是这样工作的。DNS级别不处理路径。@MarkB是的,我已经确认它可以连接到Internet。@Michael sqlbot我为误解道歉。我将记录集配置为“abcd.internal”,然后,在lambda函数中,我将https访问地址“abcd.internal/api”,我认为可以将其用于此托管角色LambdaVPCAccessExecutionRole,但不确定是否涵盖了所有提到的权限。。。?