无法修复“提供的执行角色无权在 EC2 上调用 CreateNetworkInterface”
Posted
技术标签:
【中文标题】无法修复“提供的执行角色无权在 EC2 上调用 CreateNetworkInterface”【英文标题】:Cannot fix "The provided execution role does not have permissions to call CreateNetworkInterface on EC2" 【发布时间】:2020-03-01 23:48:42 【问题描述】:我尝试了this answer 中的解决方案,但它对我不起作用。我收到错误消息:
提供的执行角色无权调用 EC2 上的 CreateNetworkInterface(服务:AWSLambdaInternal;状态代码:400;错误代码:InvalidParameterValueException;请求 ID:4c8d047c-2710-4334-86cd-51b7467c6f08 )
这是与错误相关的 CloudFormation:
EventLambdaFunction:
Type: AWS::Lambda::Function
Properties:
FunctionName: !Sub $DeveloperPrefixevent-lambda-$Environment-$DeployPhase
Handler: EventHandler
Runtime: java8
Code:
S3Bucket: !Ref SharedBucketName
S3Key: !Sub $WorkspacePrefix/event-subscriber-$AppVersion.jar
S3ObjectVersion: !Ref EventLambdaS3Version
Role: !GetAtt EventLambdaRole.Arn
Environment:
Variables:
retry_event_table_name: !Sub "$DeveloperPrefix$AppName-$RetryEventTableName-$Environment-$DeployPhase"
test_enabled: true # TODO: Remove once endpoint provided.
VpcConfig:
SecurityGroupIds:
- !Ref LambdaSecurityGroup
SubnetIds:
- Fn::ImportValue: !Sub $VPCStackName-SubnetPrivateL
- Fn::ImportValue: !Sub $VPCStackName-SubnetPrivateR
Timeout: 28
MemorySize: 256
EventLambdaRole:
Type: AWS::IAM::Role
Properties:
RoleName: !Sub $DeveloperPrefix$AppName-$Environment-$DeployPhase-EventLambdaRole
AssumeRolePolicyDocument:
Statement:
- Effect: Allow
Principal:
Service: [lambda.amazonaws.com]
Action: ['sts:AssumeRole']
ManagedPolicyArns:
- arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
Policies:
- PolicyName: !Sub $DeveloperPrefix$AppName-$Environment-$DeployPhase-EventLambdaPolicy
PolicyDocument:
Statement:
- Sid: DynamoDbPermissions
Effect: Allow
Action:
- dynamodb:PutItem
Resource: !Sub 'arn:aws:dynamodb:$AWS::Region:$AWS::AccountId:table/$DeveloperPrefix$AppName-EventRetry-$Environment-$DeployPhase'
- Sid: LambdaVPCPermissions
Effect: Allow
Action:
- ec2:AttachNetworkInterface
- ec2:CreateNetworkInterface
- ec2:CreateNetworkInterfacePermission
- ec2:DeleteNetworkInterface
- ec2:DeleteNetworkInterfacePermission
- ec2:DescribeDhcpOptions
- ec2:DescribeNetworkInterfaces
- ec2:DescribeNetworkInterfacePermissions
- ec2:DescribeSubnets
- ec2:DescribeVpcs
- ec2:DescribeInstances
Resource: '*'
我已经搜索了这个问题的答案,并尝试了一些找到的建议,但无济于事。我犯了什么明显的错误?我担心我现在只见树木不见森林。
【问题讨论】:
这里只是一个健全性检查 - 在使用此 CF 模板创建堆栈后,IAM 中的EventLambdaRole
是否确实附加了两个策略文档,每个文档都有各自的权限?
是的@TomNijs,他们这样做了。
您可以尝试使用管理策略AWSLambdaVPCAccessExecutionRole
而不是AWSLambdaBasicExecutionRole
吗?
奇怪的是我在这个项目中有多个 Lambda,而这是我改变这个角色的唯一一个。我从另一个人那里继承了这段代码,所以我还没有完全弄清楚做了什么,但是为什么只有这个 Lambda 需要这个角色而其他人使用AWSLambdaBasicExecutionRole
?
这很有趣。我只是交叉检查了我所拥有的。基本上我用的和你的CF几乎一样,唯一的区别是我用的是AWS:: Serverless::Function
而不是AWS::Lambda::Function
【参考方案1】:
由于 lambda 在 VPC 中运行,您可以使用 AWSLambdaVPCAccessExecutionRole
代替 AWSLambdaBasicExecutionRole
。理想情况下,它应该与您拥有的相同。从开发运营的角度来看,一个优势是维护工作量更少。
!重要 该错误不是警告我们有关用户的权限,而是警告我们与 lambda 函数关联的角色 的权限。确保
-
您拥有 lambda 函数的角色,并且
此角色具有
AWSLambdaBasicExecutionRole
权限策略
此角色具有如下信任关系:
`
"Version": "2012-10-17",
"Statement": [
"Effect": "Allow",
"Principal":
"Service": "lambda.amazonaws.com"
,
"Action": "sts:AssumeRole"
]
【讨论】:
【参考方案2】:您还必须在权限中包含 ec2:AssignPrivateIpAddresses
和 ec2:UnassignPrivateIpAddresses
操作。
【讨论】:
我正在精确定位访问权限,从而避开受管组。这是一个更具体的答案,因为这些是 op 示例中缺少的确切操作。以上是关于无法修复“提供的执行角色无权在 EC2 上调用 CreateNetworkInterface”的主要内容,如果未能解决你的问题,请参考以下文章
如何修复这些漏洞? (npm audit fix 无法修复这些漏洞)