无法修复“提供的执行角色无权在 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:AssignPrivateIpAddressesec2:UnassignPrivateIpAddresses 操作。

【讨论】:

我正在精确定位访问权限,从而避开受管组。这是一个更具体的答案,因为这些是 op 示例中缺少的确切操作。

以上是关于无法修复“提供的执行角色无权在 EC2 上调用 CreateNetworkInterface”的主要内容,如果未能解决你的问题,请参考以下文章

Windows 资源保护无法启动修复服务

如何修复这些漏洞? (npm audit fix 无法修复这些漏洞)

Npm 漏洞无法修复

当您无法修复表时,如何修复 MySQL“不正确的密钥文件”错误?

KVM 虚拟机挂掉 console修复方法

sh 修复ceph pg repair都无法修复的pg不连续