AWS lambda 使用启动模板和 boto3 创建 ec2 实例,仅使用所需的权限
Posted
技术标签:
【中文标题】AWS lambda 使用启动模板和 boto3 创建 ec2 实例,仅使用所需的权限【英文标题】:AWS lambda to create ec2 instance using Launch template and boto3 only using the required permissions 【发布时间】:2021-03-19 14:57:49 【问题描述】:我在为我的 IAM 角色设置正确的权限时遇到问题,该角色由 lambda 函数承担。 lambda 的目的是使用提供的启动模板启动 ec2 实例。但是,由于 IAM 角色的权限不正确,我经常收到 You are not authorized to perform this operation.
errors。
我目前对该角色的唯一政策是这个:
"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 代码:
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 策略权限?
【问题讨论】:
取决于你的实例做什么。它使用实例角色还是密钥对?所有额外的东西都有自己的权限。 启动的 EC2 实例没有附加任何角色(即我使用的启动模板没有附加启动配置文件)。启动模板也附有一个密钥对。会这样吗? @Marcin 我查看了我的启动模板,它确实在模板中启动的实例上设置了一些标签。因此,在修改上述角色以包含CreateTags
操作后,它工作正常。太感谢了!我不知道权限也应该涵盖由启动模板创建的所有资源。经验教训:)
很高兴它成功了。如果您不介意,我会提供答案以供将来参考。
是的,请。那太好了 :) 再次感谢您!
【参考方案1】:
基于 cmets。
通常,RunInstances
权限不足以启动实例。需要什么权限取决于实例做什么,例如使用 KMS 加密卷、iam 实例角色/配置文件、设置标签等。
在 OPs 的情况下,要启动的实例使用标签,因此需要ec2:CreateTags
权限才能使其工作。
【讨论】:
以上是关于AWS lambda 使用启动模板和 boto3 创建 ec2 实例,仅使用所需的权限的主要内容,如果未能解决你的问题,请参考以下文章
在单个AWS Lambda中使用两个python函数boto3
使用 boto3 lib 和 AWS Lambda 从 S3 存储桶中的压缩文件中获取数据流
无法在本地和 lambda 上找到 boto3.client 的凭据