我在我的EC2实例上运行服务,我想设置一个只允许我的lambda函数访问它的入站规则。安全组允许我限制特定IP的访问,但我不认为lambda函数具有指定的特定IP。有办法做我想做的事吗?
答案 0 :(得分:26)
如果您按照this blog post为Lambda函数启用VPC访问,那么您将为您的VPC中的Lambda函数创建一个安全组。此时您需要做的就是进入您的EC2实例正在使用的安全组,并授予对Lambda函数正在使用的安全组的访问权限。这是我推荐的方法。
如果您没有使用VPC访问,则您的EC2实例需要可公开访问,您基本上可以通过互联网从Lambda函数访问EC2实例。如果是这种情况,那么没有好的方法来限制安全组中的那个。您可以(很难)将其打开,只发送originate within AWS的请求,但仍然可以向AWS的所有其他用户开放。如果您必须通过互联网从Lambda访问您的EC2实例,那么最好为Lambda发送的每个请求发送某种安全令牌,并忽略EC2服务器上不包含该安全令牌的任何请求
答案 1 :(得分:4)
如果我们希望Lambda函数访问VPC中的资源,会发生什么?这有点令人困惑,因为Lambda函数没有一个稳定的IP地址,我们无法将其用作VPC安全组或子网ACL中的源。
AWS通过允许您指定与Lambda函数关联的子网和安全组来克服了这些限制。您可能会认为此安全组和子网ACL将控制传入和传出Lambda函数的流量,但这是错误的。首先,Lambda函数不会在任何端口上侦听流量,因此,Lambda函数的入站流量概念不适用。其次,Lambda函数的安全组不以任何方式限制从Lambda函数到VPC资源的出站连接。那么,这个神秘的Lambda函数安全小组有什么用?它是如何工作的?
事实证明,Lambda函数的安全组只是我们可以在其他EC2安全组中使用的命名占位符。例如,Lambda函数可以对VPC中专用子网上的EC2实例发出GET请求。我们从两个安全组开始。第一个是普通安全组,用于控制往返于我们的EC2实例的流量,该实例将在端口8080上提供文件。它具有一个入站规则,该规则允许端口8080的流量以Lambda函数的安全组为源。回想一下,安全组规则可以将源或目标指定为另一个安全组,该安全组是该源或目标安全组的所有主机的占位符。
Lambda函数的安全组没有任何 没有规则 。不需要。它只是Lambda函数的占位符,它使我们可以将Lambda函数指定为其他EC2安全组中的源。请记住,Lambda函数具有一个随机IP地址,该IP地址每天都在变化,小时和小时在变化,因此无法将其指定为EC2实例的入站流量的源。 安全组通常控制进出网络接口的流量,但对于AWS Lambda功能安全组,则没有接口,也没有规则-它只是一个占位符。
答案 2 :(得分:1)
没有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的路由表。
答案 3 :(得分:1)
您的Lambda在运行时将为其分配一个临时IP。 如果配置与其关联的IAM角色,以便它可以允许/撤消安全组入口,则可以使它“进入”您的sec组。 请参阅this文章,以获取有关将IP或CIDR阻止添加到入站列表的示例。 函数完成后,我会立即清理它。
答案 4 :(得分:0)
您可以参考以下文章进行相同的操作,
1。 https://medium.com/@justanotherspyy/how-to-connect-your-lambda-function-securely-to-your-private-rds-instances-in-your-vpc-29789220a33
2。 https://medium.com/orchestrated/steps-to-secure-aws-serverless-lambda-part-1-a6e5d1b05f45
摘要将是,
1。使用以下两个策略为Lambda创建角色,
AWSLambdaBasicExecutionRole-提供CloudWatch日志记录。
AWSLambdaENIManagementAccess-提供ENI描述,创建和删除。
2。将lambda放入EC2的同一VPC中,并为lambda函数创建一个安全组。
3。将此安全组放入EC2的安全组的入站规则中。