AWS lambda для создания экземпляра ec2 с использованием шаблона запуска и boto3 только с использованием требуемых разрешений

#amazon-web-services #amazon-ec2 #aws-lambda #boto3

#amazon-web-services #amazon-ec2 #aws-lambda #boto3

Вопрос:

У меня возникли проблемы с настройкой правильных разрешений для моей роли IAM, которая предполагается функцией lambda. Целью lambda является запуск экземпляра ec2 с использованием предоставленного шаблона запуска. Однако я постоянно получаю You are not authorized to perform this operation. ошибки из-за неправильных разрешений роли IAM.

Единственная политика, которую я на данный момент привязываю к роли, — это:

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

Lambda boto3 / python code:

 import boto3

ec2 = boto3.resource('ec2')

lt = {
    # 'LaunchTemplateId': 'lt-0b91c7e5c5437a1c1',
    'LaunchTemplateName': 'template_name',
    'Version': '$Latest'
}


def handler(event, context):

    instances = ec2.create_instances(
        LaunchTemplate=lt,
        MinCount=1,
        MaxCount=1
        # UserData=user_data
    )

 

Примечание: Если я прикреплю AmazonEC2FullAccess управляемую политику AWS к роли lambda, она будет работать нормально

Чего мне не хватает?

Кроме того, есть ли простой способ найти «минимальные» разрешения политики IAM, которые необходимы ресурсу для работы?

Комментарии:

1. Зависит от того, что делает ваш экземпляр. Использует ли он роль экземпляра или пары ключей? Все дополнительные вещи имеют свои собственные разрешения.

2. К запущенному экземпляру EC2 не привязаны никакие роли (т. Е. К используемому мной шаблону запуска не привязан профиль запуска).). К шаблону запуска также прикреплена пара ключей. Может ли это быть?

3. @Marcin Я просмотрел свой шаблон запуска, и он установил несколько тегов для запущенных экземпляров из шаблона. Итак, после изменения вышеуказанной роли, чтобы включить CreateTags действие, оно работало нормально. Большое вам спасибо! Я не знал, что разрешения должны охватывать все ресурсы, которые также создаются шаблоном запуска. Извлеченный урок 🙂

4. Рад, что это сработало. Если вы не возражаете, я предоставлю ответ для дальнейшего использования.

5. Да, пожалуйста. Это было бы здорово 🙂 Еще раз спасибо!

Ответ №1:

На основе комментариев.

Часто RunInstances для запуска экземпляра недостаточно разрешения. Требуемые разрешения зависят от того, что делает экземпляр, например, использует зашифрованные тома KMS, роли / профили экземпляра iam, установленные теги и многое другое.

В случае OPs запускаемый экземпляр использовал теги, поэтому ec2:CreateTags для его работы требовалось разрешение.