AWS Lambda代码在调用StartInstances操作时抛出“发生错误(UnauthorizedOperation)”

时间:2017-01-09 16:23:09

标签: amazon-web-services amazon-ec2 aws-lambda

我的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”

2 个答案:

答案 0 :(得分:2)

您的Lambda不使用IAM用户,而是 IAM执行角色。 您可以在“配置”标签>>中检查与Lambda关联的角色。 “现有角色”。 然后,您可以在IAM中找到该角色并将策略添加到其中。

控制台可能为您创建了当前角色,并且只允许在CloudWatch中编写。可以“手动”创建此角色。使用以下信任关系可以将其与Lambda关联:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

More about creating an execution role for Lambda

答案 1 :(得分:0)

测试lambda函数时出错。

“ errorMessage”:“发生错误(UnauthorizedOperation),当 调用StopInstances操作:您无权执行 此操作...

解决方案:

  1. 打开IAM(身份和访问管理)页面。
  2. 从列表中选择Lambda函数。
  3. 打开“基本设置”页面。
  4. 在IAM页面的“角色”列表中找到所选角色。
  5. 在权限部分中,附加AdministratorAccess策略并将权限边界更改为AdministratorAccess。