我试图编写一个基本的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
答案 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需要运行的权限。