Amazon web services 使用Boto3时出现权限错误,但可通过aws cli工作
我在尝试创建Lambda函数时遇到了缺少权限的问题 我配置的执行角色具有以下权限: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
$ 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
}
}