#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
для его работы требовалось разрешение.