如何在CloudFormation YAML中为AWS ECS Fargate容器指定`logs:CreateLogGroup`权限。

9 浏览
0 Comments

如何在CloudFormation YAML中为AWS ECS Fargate容器指定`logs:CreateLogGroup`权限。

我正在尝试使用CloudFormation复制一个极其基本的手动配置的AWS ECS Fargate部署,部署一个单个容器。看起来我已经接近成功了;生成的堆栈启动了一个我可以访问的容器。但是没有日志。

我将我的手动任务(通过UI创建)与CloudFormation任务进行了比较,并在容器定义中添加了相同的日志配置,只是将日志组从/ecs/foo更改为/ecs/bar

LogConfiguration:

LogDriver:awslogs

Options:

awslogs-create-group:true

awslogs-group:'/ecs/bar'

awslogs-region:!Ref AWS :: Region

awslogs-stream-prefix:'ecs'

但现在任务无法启动容器。它给出了以下错误:

Resourceinitializationerror:failed to validate logger args:create stream has been retried 1 times:failed to create Cloudwatch log group:AccessDeniedException:User:arn:aws:sts:...:assumed-role/ecsTaskExecutionRole/... is not authorized to perform:logs:CreateLogGroup on resource:arn:aws:logs:us-east-1:...:log-group:/ecs/bar:log-stream:because no identity-based policy allows the logs:CreateLogGroup action status code:400,request id:...:exit status 1

一个文档页面提到了这个logs:CreateLogGroup权限,并说:

要使用awslogs-create-group选项,请将logs:CreateLogGroup添加为内联IAM策略。

但我不明白的是,我的CloudFormation模板与通过UI手动创建的堆栈有何不同。通过查看手动创建的堆栈的生成模板,似乎两个任务定义都指示了ecsTaskExecutionRole。我的CloudFormation模板任务定义如下:

ExecutionRoleArn:'arn:aws:iam::...:role/ecsTaskExecutionRole'

手动创建的堆栈是如何能够创建日志组的,而我从头开始的独立CloudFormation模板却不能呢?我应该在哪里指定logs:CreateLogGroup权限?手动创建的堆栈似乎没有指定任何内联策略。(诚然,由于某种原因,手动创建的任务定义似乎没有使用CloudFormation堆栈,所以可能在UI中有一些隐藏的设置我没有看到。)

0
0 Comments

问题的原因是在CloudFormation YAML中将`ecsTaskExecutionRole`分配给了`ExecutionRoleArn`,而不是`TaskRoleArn`。

解决方法是将`ecsTaskExecutionRole`分配给`TaskRoleArn`,并为`ecsTaskExecutionRole`添加`logs:CreateLogGroup`权限的内联策略。这样ECS Fargate容器就能够在CloudFormation中创建日志组。

0
0 Comments

问题的原因:在AWS ECS Fargate容器中,如果想要任务自动创建日志组,需要在IAM策略中包含logs:CreateLogGroup权限。然而,某些页面提到需要在CloudFormation中以内联的方式添加logs:CreateLogGroup权限,但是没有提供具体的示例。

解决方法:相较于动态创建日志组,更好的做法是在CloudFormation模板中声明和配置AWS::Logs::LogGroup资源。因此,可以在CloudFormation中声明日志组,并在日志配置中引用该日志组,避免了运行时权限和动态创建的问题。通过这种方式,日志组的创建依赖于创建堆栈的角色的权限,而不是任务本身,这似乎更加合适。在进行上述更改后,CloudFormation EC Fargate堆栈能够正常运行并生成日志,因此该方法是成功的。

0