为什么AWS Lambda 需要将 ecsTaskExecutionRole 传递给 ECS 任务

为什么AWS Lambda 需要将 ecsTaskExecutionRole 传递给 ECS 任务

我正在编写一个 AWS Lambda 函数来触发 ECS Fargate 任务。我遵循以下示例使用 AWS Fargate 和 Lambda 运行任务。虽然我的设置有效,但其中涉及 IAM 角色的部分我不明白。

其中一个步骤是创建一个 ECS 任务。我创建该任务时,其“任务执行 IAM 角色”位于ecsTaskExecutionRole。根据 ECS 任务设置页面上的信息,“任务执行 IAM 角色”是

授权 Amazon ECS 为您的任务提取私有映像并发布日志的角色。运行任务时,它将取代 EC2 实例角色。

接下来,我创建 Lambda 函数。Lambda 函数设置的一部分是创建另一个 IAM 角色,因为根据“使用 AWS Fargate 和 Lambda 运行任务”页面,

Lambda 需要具有 2 个策略的 IAM 角色 - 一个用于运行任务,另一个用于将 ecsTaskExecutionRole 传递给任务。

角色看起来像这样(我压缩了空白以节省空间):

{   "Version": "2012-10-17",
    "Statement": [
        {   "Sid": "Stmt1512361420000",
            "Effect": "Allow",
            "Action": [
                "ecs:RunTask"
                 ],
            "Resource": [ "*" ]
        },
        {   "Sid": "Stmt1512361593000",
            "Effect": "Allow",
            "Action": [ "iam:PassRole" ],
            "Resource": [ "arn:aws:iam::************:role/ecsTaskExecutionRole" ]
        }
    ]
}

我不明白的是为什么 Lambda 函数必须具有此iam:PassRole权限。为什么 Lambda 函数必须“将 ecsTaskExecutionRole 传递给任务”?由于我将“任务执行 IAM 角色”设置为,ECS 任务在运行时是否会自动分配该角色?ecsTaskExecutionRole如果不是,那么“任务执行 IAM 角色”设置有什么意义?

答案1

引用 AWS 文档 (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html):

要配置许多 AWS 服务,您必须将 IAM 角色传递给服务。这样,服务稍后就可以代入该角色并代表您执行操作。您只需在设置期间将角色传递给服务一次,而不必在服务代入该角色时每次都传递。例如,假设您在 Amazon EC2 实例上运行一个应用程序。该应用程序需要临时凭证进行身份验证,以及授权应用程序在 AWS 中执行操作的权限。设置应用程序时,您必须将角色传递给 EC2 以与提供这些凭证的实例一起使用。您可以通过将 IAM 策略附加到角色来定义在实例上运行的应用程序的权限。应用程序每次需要执行角色允许的操作时都会代入该角色。

ecsTaskExecutionRole参数定义您要授予 Fargate 任务的 IAM 权限。在大多数情况下,用户只需使用 AWS 托管角色“role/ecsTaskExecutionRole”,即可从 ECR 下载任何图像。

但想象一下,您有一个不同的策略,只允许下载特定的图像。

您的管理员只希望您能够使用该策略,因此他使用 Lambda 中的 iam:PassRole 权限来表示您只能传递该角色。现在,他已阻止您使用任何其他可能授予您更多 ECR 映像访问权限的 IAM 角色。

总之,即使没有 PassRole 权限,您也可以将任何您想要的内容指定为 ecsTaskExecutionRole,这可能会赋予您超出管理员想要的访问权限。

相关内容