【问题标题】:AWS Lambda code is throwing "An error occurred (UnauthorizedOperation) when calling the StartInstances operationAWS Lambda 代码抛出“调用 StartInstances 操作时发生错误 (UnauthorizedOperation)
【发布时间】:2017-05-23 23:20:07
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    您的 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

    【讨论】:

    • 角色附加的策略是:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lambda :InvokeFunction", "lambda:CreateFunction" ], "Resource": [ "*" ] } ] }
    • 所以这个 Lambda 可以创建和调用其他 Lambda,但不能启动 EC2 实例。
    • 谢谢亚历克西斯。我有问题。
    【解决方案2】:

    我在使用 ec2:RunInstances 时遇到了这个问题,因为我试图将实例配置文件传递给 EC2 实例。解决方案是向 Lambda 函数添​​加“iam:PassRole”权限。

    【讨论】:

      【解决方案3】:

      测试 lambda 函数时出错。

      "errorMessage": "发生错误 (UnauthorizedOperation) 时 调用 StopInstances 操作:您无权执行 这个操作...

      解决方案:

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

      【讨论】:

      • 这是从某个地方引用的吗?如果有,应注明出处。如果不是,请考虑将其从块引用中删除以避免混淆,因为以这种方式格式化的原因并不明显。
      猜你喜欢
      • 1970-01-01
      • 2019-07-22
      • 2019-03-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-05
      • 1970-01-01
      • 2022-06-22
      • 2019-12-16
      相关资源
      最近更新 更多