Python AWS lambda函数可以';我不能上网
我正在运行一个lambda函数,我想访问私有数据库服务器和internet。我可以很好地访问数据库,但我不能访问互联网 设置:Python AWS lambda函数可以';我不能上网,python,amazon-web-services,networking,aws-lambda,vpc,Python,Amazon Web Services,Networking,Aws Lambda,Vpc,我正在运行一个lambda函数,我想访问私有数据库服务器和internet。我可以很好地访问数据库,但我不能访问互联网 设置: VPC (10.0.0.0/16) Public-Subnet (10.0.0.0/24) NAT-Security-Group (see security groups below) NAT-Server (AMI NAT instance) Private-Subnet-1 (10.0.1.0/24) & Priv
VPC (10.0.0.0/16)
Public-Subnet (10.0.0.0/24)
NAT-Security-Group (see security groups below)
NAT-Server (AMI NAT instance)
Private-Subnet-1 (10.0.1.0/24) & Private-Subnet-2 (10.0.2.0/24)
DB-Security-Group (see security groups below)
DB-Server (RDS PostgreSQL instance)
Lambda-Security-Group (see security groups below)
Lambda-Function
安全组包括:
NAT-Security-Group
Inbound:
HTTP & HTTPS from source: Lambda-Security-Group
SSH from 0.0.0.0/0
Outbound:
All traffic
DB-Security-Group
Inbound:
PostgreSQL from source: Lambda-Security-Group
Outbound:
All traffic
Lambda-Security-Group
Inbound:
HTTP & HTTPS from source: NAT-Security-Group
Outbound:
All traffic
子网的路由表包括:
Public-Subnet:
10.0.0.0/16 local
0.0.0.0/0 Internet-Gateway
Private-Subnet-1 & Private-Subnet-2
10.0.0.0/16 local
0.0.0.0/0 NAT-Server
我在这里不知所措。为什么lambda功能不能到达internet(连接超时错误)?您需要在公共子网中创建一个NAT网关,并将lambda所在子网的出口流量路由到NAT网关 要执行此操作,请将NAT网关设置为路由表中的默认网关,该路由表连接到Lambda所在的子网 有关更多详细信息,请参阅文档。公共子网中的lambda 因为您只需要从lambda与DB通信,所以将lambda放入公共子网,而不需要安装NAT网关。 无论如何,不会像ELB那样直接访问lambda,如果通过API端点进行访问,则必须连接到API网关 私有子网中的lambda
- 将NAT route out添加到与所有地址0.0.0.0/0的专用子网关联的路由表中
- 将所有0.0.0.0/0的IGW路由输出添加到与公共子网关联的路由表中
- 将NAT置于公共子网中
这将解决从lambda访问internet的问题。但只有当您使用安装在EC2中的DB进行将来的补丁管理或从bastion主机进行任何类型的其他访问时,它才非常有用。如果使用RDS,将lambda放入专用子网是没有意义的 问题在于安全组的入站/出站规则。通过上述配置,我更新了安全组以匹配:
NAT-Security-Group
Inbound:
HTTP & HTTPS from source: Lambda-Security-Group
SSH from source: 0.0.0.0/0
Outbound:
HTTP & HTTPS to destination: 0.0.0.0/0
DB-Security-Group
Inbound:
PostgreSQL from source: Lambda-Security-Group
Outbound:
None
Lambda-Security-Group
Inbound:
None
Outbound:
HTTP & HTTP to destination: NAT-Security-Group
PostgreSQL to source: DB-Security-Group
Lambda函数现在具有internet连接。您可以将EC2实例与具有相同安全组的Lambda函数放在同一子网中并访问internet吗?不确定-即使我向Lambda-security-Group添加入站SSH规则,我也无法使用SSH访问EC2实例。问题在于安全组-如果我设置了允许所有入站/出站流量的规则一切正常。NAT网关由NAT实例负责-我使用实例来避免NAT网关的成本,除非流量需要。NAT实例可以。您仍然收到错误?是-Lambda函数没有连接。将Lambda放入公共子网是否存在安全风险?文档中甚至没有讨论这个场景,论坛中也有很多“不要这样做”的评论。没有提到这样的评论,但是从上面我提到的API网关的访问角度来看,否则需要调用API调用。从安全角度看什么都没有。