我的lambda代码:
instances = [aws_instance]
ec2 = boto3.client('ec2',region_name="us-west-2")
if task == 'start':
ec2.start_instances(InstanceIds=instances)
我的IAM用户政策:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:DescribeInstances",
"ec2:DescribeVolumes",
"ec2:StartInstances",
"ec2:StopInstances",
"ec2:CreateSnapshot",
"ec2:DeleteSnapshot",
"ec2:DescribeSnapshots",
}
``` "ec2:RunInstances",
"ec2:CopySnapshot",
"ec2:CreateTags",
"rds:DescribeDBInstances",
"rds:CreateDBSnapshot",
"rds:DeleteDBSnapshot",
"rds:DescribeDBSnapshots",
"rds:ListTagsForResource",
"lambda:AddPermission",
"lambda:CreateFunction",
"lambda:InvokeFunction",
"apigateway:PUT",
"apigateway:POST",
"apigateway:GET",
"ssm:SendCommand"
],
"Resource": [
"*"
]
}
]
}
这是抛出错误“调用StartInstances操作时发生错误(UnauthorizedOperation):您无权执行此操作。”
C:\ Program Files \ Microsoft Visual Studio 11.0> aws --region us-west-2 ec2 start-instances --instance-id i-cd2cb9d5
工作正常。
我无法理解,为什么lambda函数说,我不允许执行“start_instances”
答案 0 :(得分:2)
您的Lambda不使用IAM用户,而是 IAM执行角色。 您可以在“配置”标签>>中检查与Lambda关联的角色。 “现有角色”。 然后,您可以在IAM中找到该角色并将策略添加到其中。
控制台可能为您创建了当前角色,并且只允许在CloudWatch中编写。可以“手动”创建此角色。使用以下信任关系可以将其与Lambda关联:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
答案 1 :(得分:0)
测试lambda函数时出错。
“ errorMessage”:“发生错误(UnauthorizedOperation),当 调用StopInstances操作:您无权执行 此操作...
解决方案:
- 打开IAM(身份和访问管理)页面。
- 从列表中选择Lambda函数。
- 打开“基本设置”页面。
- 在IAM页面的“角色”列表中找到所选角色。
- 在权限部分中,附加AdministratorAccess策略并将权限边界更改为AdministratorAccess。