为AWS Lambda添加VPC时遇权限错误:执行角色无EC2创建网卡权限
以下是针对该问题的具体排查和解决建议:
验证执行角色的实际有效权限
不要仅依赖托管策略的存在,直接用IAM控制台的「策略模拟器」,选择该Lambda执行角色,测试ec2:CreateNetworkInterface权限,同时指定目标VPC的子网ID、安全组ID以及对应区域。重点检查是否存在权限边界(Permission Boundary)或组织SCP策略覆盖了托管策略的权限——生产环境常通过这类机制限制权限范围。对比目标VPC与正常VPC的配置差异
既然AWSAdministrator账号能关联另一个VPC,说明问题可能出在目标VPC本身:- 检查目标VPC的子网ACL、安全组是否有特殊规则限制了网络接口创建
- 确认目标VPC是否存在资源策略(比如EC2网络接口的资源策略),禁止Lambda角色创建接口
- 查看目标VPC是否开启了VPC端点,端点策略是否限制了Lambda的访问
排查账号层面的SCP服务控制策略
生产账号通常会在AWS组织的OU层面配置SCP,可能存在限制ec2:CreateNetworkInterface调用的规则,或者限定了仅允许在特定VPC/子网执行该操作。对比非生产账号的SCP配置,找出差异项。检查操作账号的权限限制
即使是SystemAdministrator/AWSAdministrator账号,也可能被附加了会话策略或权限边界,导致无法为Lambda关联特定VPC:- 检查操作账号的权限边界,是否禁止修改目标VPC内的资源
- 确认账号是否被限制在特定区域操作,目标VPC所在区域是否在允许范围内
确认Lambda执行角色的信任关系
确保执行角色的信任策略包含lambda.amazonaws.com作为可信实体,否则Lambda无法扮演该角色发起EC2接口调用。信任策略示例:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }验证托管策略的有效性
检查AWSLambdaVPCAccessExecutionRole托管策略是否为最新版本,且未被自定义修改。旧版本的托管策略可能存在权限缺失,若被人为修改过,需恢复为官方默认版本。
内容的提问来源于stack exchange,提问作者Prasanjeet Mohanty

