AWSLambdaBasicExecutionRole无法描述实例

时间:2019-11-11 10:42:49

标签: amazon-ec2 aws-lambda

我试图编写一个基本的lambda函数来启动和停止ec2实例,以下是我的代码,我通过选择现有的AWSLambdaBasicExecutionRole创建了一个角色,但我遇到了以下错误。

调用DescribeInstances操作时发生错误(UnauthorizedOperation):您无权执行此操作。:ClientError

import boto3
ec2 = boto3.client('ec2')
# get the list of all the ec2 instances
def get_all_ec2_ids():
    response = ec2.describe_instances(DryRun=False)
    instances = []
    for reservation in response["Reservations"]:
        for instance in reservation["Instances"]:
            # This sample print will output entire Dictionary object
            # This will print will output the value of the Dictionary key 'InstanceId'
            instances.append(instance["InstanceId"])
    return instances

1 个答案:

答案 0 :(得分:0)

首先,AWSLambdaBasicExecutionRole是POLICY而不是角色,尽管其名称暗示了什么。该策略仅授予以下权限:

    {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "*"
        }
    ]
}

如您所见,这不提供对DescribeInstances的任何许可。如果要添加AWS托管策略:

AmazonEC2ReadOnlyAccess

例如,

会给您的Lambda DescribeInstances权限以及其他一些权限。根据您最终希望Lambda要做的事情,您可能需要添加其他策略,或者更好的方法是,创建自己的自定义策略,该策略将完全授予Lambda需要运行的权限。