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 加密卷、i​​am 实例角色/配置文件、设置标签等。

在 OPs 的情况下,要启动的实例使用标签,因此需要ec2:CreateTags 权限才能使其工作。

【讨论】:

以上是关于AWS lambda 使用启动模板和 boto3 创建 ec2 实例,仅使用所需的权限的主要内容,如果未能解决你的问题,请参考以下文章

在单个AWS Lambda中使用两个python函数boto3

使用 boto3 lib 和 AWS Lambda 从 S3 存储桶中的压缩文件中获取数据流

无法在本地和 lambda 上找到 boto3.client 的凭据

使用boto3下载Lambda函数的部署包

AWS ECS Docker 容器 Boto3 IAM 权限

AWS 成本浏览器 boto3