AWS安全组入站规则.允许lambda函数

Chr*_*ris 22 amazon-web-services aws-lambda

我在我的EC2实例上运行一个服务,我想设置一个只允许我的lambda函数访问它的入站规则.安全组允许我限制特定IP的访问,但我不认为lambda函数具有指定的特定IP.有办法做我想要的吗?

Mar*_*k B 31

如果您要为Lambda函数启用VPC访问,请参阅此博客文章,然后您将为您的VPC创建一个用于Lambda函数的安全组.此时您需要做的就是进入您的EC2实例正在使用的安全组,并授予对Lambda函数正在使用的安全组的访问权限.这是我推荐的方法.

如果您没有使用VPC访问,则您的EC2实例需要可公开访问,您基本上可以通过Internet从Lambda函数访问EC2实例.如果是这种情况,那么在安全组中没有好的方法来限制它.您可以(很难)将其打开,只发送到源自AWS的请求,但仍然可以向AWS的所有其他用户开放.如果您必须通过互联网从Lambda访问您的EC2实例,那么最好为Lambda发送的每个请求发送某种安全令牌,并忽略EC2服务器上不包含该安全令牌的任何请求.

  • @museshad 出站规则应为空(默认值允许所有出站)。入站规则也应该为空,因为 Lambda 的入站规则没有意义,因为 Lambda 函数不会监听传入的网络流量,它们仅在由 AWS API 调用时运行。您只需为 Lambda 函数分配一个安全组,以便您可以在其他 VPC 安全组的入站规则中引用它。 (3认同)
  • 假设 Lambda 使用 VPC 设置,那么应该在为 Lambda 创建的安全组中配置什么 - 意味着应该在该安全组中设置哪些入站/出站规则? (2认同)

Zoo*_*bin 5

没有VPC关联的Lambda将在Internet上并分配有一个任意的公共IP(显然来自Amazon注册IP),该IP不是固定地址。因此,几乎不可能将EC2 SG中的IP列入白名单,因为下次Lambda启动IP时,IP可能会更改并且无法预测。

但是,有一种方法可以部分地仅将网络访问权限限制为仅位于VPC中的资源(包括Lambda)(因为组件将分配有内部IP)。假设您希望仅可从内部vpc网络访问EC2服务器,因此将其放置在内部子网中,而未为其分配任何公共IP。现在,您可以在EC2上将SG设置为仅接受VPC的内部子网CIDR范围内的IP。通过将Lambda与该VPC关联并将其放置在专用子网中,Lambda将从您的VPC的内部CIDR范围中获取任意IP,该IP显然属于已经为EC2配置的SG范围(如果要并行处理很多Lambda只需确保在定义的CIDR范围内有足够数量的IP)即可。

如果希望组件同时进行内部通信,也可以访问Internet,则可以将NAT网关路由表添加到IGW,然后将路由规则添加到内部子网以指向NAT网关。因此,将为内部子网中的所有组件分配一个指向NAT以及随后指向Internet的路由表。


小智 5

如果我们希望 Lambda 函数访问 VPC 中的资源,会发生什么?这有点令人困惑,因为 Lambda 函数没有稳定的 IP 地址,我们可以将其用作 VPC 安全组或子网 ACL 中的源。

AWS 通过允许您指定要与 Lambda 函数关联的子网和安全组来克服这些限制。您会认为这个安全组和子网 ACL 会控制进出 Lambda 函数的流量,但这是错误的。首先,Lambda 函数不侦听任何端口上的流量,因此 Lambda 函数的入站流量概念不适用。其次,从 Lambda 函数到 VPC 资源的出站连接不受 Lambda 函数的安全组以任何方式限制。那么,这个神秘的 Lambda 函数安全组有什么用,它是如何工作的?

结果证明,Lambda 函数的安全组只是一个命名占位符,我们可以在其他 EC2 安全组中使用它。例如,Lambda 函数可以向您的 VPC 中私有子网上的 EC2 实例发出 GET 请求。我们从两个安全组开始。第一个是一个普通的安全组,它控制进出我们的 EC2 实例的流量,这些流量将在端口 8080 上提供文件。它有一个单独的入站规则,允许端口 8080 流量的来源是 Lambda 函数的安全组。回想一下,安全组规则可以将源或目标指定为另一个安全组,它是作为该源或目标安全组成员的所有主机的占位符。

Lambda 函数的安全组没有任何规则。不需要。它只是 Lambda 函数的占位符,允许我们将 Lambda 函数指定为其他 EC2 安全组中的源。请记住,Lambda 函数有一个随机 IP 地址,每天和每小时都在变化,因此无法将其指定为 EC2 实例的入站流量的来源。安全组通常控制进出网络接口的流量,但在 AWS Lambda 函数安全组的情况下,没有接口也没有规则——它只是一个占位符。

  • 谢谢。我认为您已经很好地解释了基本概念。然而,我的实际经验反对您关于“其次,从 Lambda 函数到 VPC 资源的出站连接不受 Lambda 函数的安全组以任何方式限制”的建议。或“Lambda 函数的安全组没有任何规则。不需要任何规则。” 我发现我仍然需要将出站规则保留在 Lambda 安全组中,否则它将无法工作。对于入站规则,正如您所说,我在 Lambda 安全组中有 0 条规则。 (2认同)