Amazon web services 使用Boto3时出现权限错误,但可通过aws cli工作

Amazon web services 使用Boto3时出现权限错误,但可通过aws cli工作,amazon-web-services,aws-lambda,boto3,aws-cli,Amazon Web Services,Aws Lambda,Boto3,Aws Cli,我在尝试创建Lambda函数时遇到了缺少权限的问题 我配置的执行角色具有以下权限: $ aws --output=text iam get-role-policy --policy-name=MyRolePolicy --role-name=my-role <snip> POLICYDOCUMENT 2012-10-17 STATEMENT Allow ACTION s3:Get* ACTION s3:List* ACTION logs:CreateLogGroup AC

我在尝试创建Lambda函数时遇到了缺少权限的问题

我配置的执行角色具有以下权限:

$ aws --output=text iam get-role-policy --policy-name=MyRolePolicy --role-name=my-role
<snip>
POLICYDOCUMENT  2012-10-17
STATEMENT   Allow
ACTION  s3:Get*
ACTION  s3:List*
ACTION  logs:CreateLogGroup
ACTION  logs:CreateLogStream
ACTION  logs:PutLogEvents
ACTION  ec2:DescribeNetworkInterfaces
ACTION  ec2:CreateNetworkInterface
ACTION  ec2:DeleteNetworkInterface
Boto3结果

通过控制台创建一个具有此执行角色的函数也很有效,因此我在如何使用Boto3时肯定遗漏了一些东西,但我无法解释


希望有人能在这里发现Boto3的误用,因为我不知所措

lambda的角色允许
ec2:CreateNetworkInterface
而不是帐户执行脚本

分配给lambda函数的当前角色允许lambda创建
VpcConfig


检查运行脚本以设置lambda的帐户是否允许执行
ec2:CreateNetworkInterface
操作

您的boto3代码正在指定专有网络:

VpcConfig={
“子网”:getenv('vpc_子网_ID')。拆分(','),
'SecurityGroupIds':getenv('vpc_security_group_ids')。拆分(',')
但是,CLI版本没有指定VPC

因此,这两个请求是不相同的。这就是为什么一个有效,另一个无效

发件人:

要连接到VPC,功能的执行角色必须具有以下权限

  • ec2:CreateNetworkInterface
  • ec2:DescriptionWorkInterface
  • ec2:DeleteNetworkInterface
这些权限包括在
AWSLambdaVPCAccessExecutionRole
托管策略中


感谢您的建议!它是用于运行python脚本以及调用“aws lambda创建函数”的同一个帐户,是一个管理员帐户(即“Actions*”)。此外,错误消息非常清楚:“提供的执行角色没有调用CreateNetworkInterface的权限”--这清楚地表明问题在于提供的执行角色,而不是调用帐户。感谢您的帮助!我更改了角色定义以使用您提到的托管策略。我已定义了相同的操作(包括上面提到的3个ec2权限)作为托管策略,但它只有在我通过托管策略将它们附加到角色时才起作用。虽然我不清楚为什么我的角色不起作用,但我可以将此作为解决方案。
$ aws lambda create-function \
  --function-name=my-test --runtime=java8 \
  --role='arn:aws:iam::1234567890:role/my-role' \
  --handler=MyHandler \
  --code=S3Bucket=my-bucket,S3Key=app.zip
<result successful>
client.create_function(
  FunctionName=function_name,
  Runtime='java8',
  Role=getenv('execution_role_arn'),
  Handler='MyHandler',
  Code={
    "S3Bucket": bucket,
    "S3Key": artifact_name
  },
  Publish=True,
  VpcConfig={
    'SubnetIds': getenv('vpc_subnet_ids').split(','),
    'SecurityGroupIds': getenv('vpc_security_group_ids').split(',')
  }
)
{
   'Error':{
      'Message':'The provided execution role does not have permissions to call CreateNetworkInterface on EC2',
      'Code':'InvalidParameterValueException'
   },
   'ResponseMetadata':{
      'RequestId':'47b6640a-f3fe-4550-8ac3-38cfb2842461',
      'HTTPStatusCode':400,
      'HTTPHeaders':{
         'date':'Wed, 24 Jul 2019 10:55:44 GMT',
         'content-type':'application/json',
         'content-length':'119',
         'connection':'keep-alive',
         'x-amzn-requestid':'47b6640a-f3fe-4550-8ac3-38cfb2842461',
         'x-amzn-errortype':'InvalidParameterValueException'
      },
      'RetryAttempts':0
   }
}