01. ECS Task Role vs Execution Role 차이 및 AWSServiceRoleForECS
이번에는 Task에 적용이 되는 ECS의 Task Role 과 Task Execution Role에 대해 알아보자.
Task Role과 Task Execution Role은 AWS에서 제공되는 개념으로 차이를 알아야 한다 생각한다.
01-1. ECS Task Role
# ECS Task가 S3, DynamoDB에 접근하기 위한 정책을 IAM Task Role에 부여
# 아래는 우선 S3만 기재 하였다 -> ecsTaskRole
{
"Version":"2012-10-17",
"Statement":[
{
"Effect":"Allow",
"Action": "s3:ListAllMyBuckets",
"Resource":"*"
},
{
"Effect":"Allow",
"Action":[
"s3:ListBucket",
],
"Resource":"arn:aws:s3:::<bucketName>"
},
{
"Effect":"Allow",
"Action":[
"s3:PutObject",
"s3:GetObject",
],
"Resource":"arn:aws:s3:::<bucketName>/*"
}
]
}


ECS Cluster를 구성하기 위해 Service, Task 를 만들어야 하는데,
Task를 만들 때 위 사진 과 같이 Task Role과 Task Execution Role을 지정해야 한다.
참고 : [AWS] Authenticating with AWS services
Task Role은 Task Definition에 정의된 IAM Role로써, ECS Task 내의 컨테이너(Application)들이 다른 AWS 서비스를 이용해야 하는 경우 사용이되는 Role 이다. 즉, ECS Task의 컨테이너가 실행되고 있는 동안 다른 AWS 서비스와 상호작용 하는데 필요한 권한을 제어한다.
대표적인 Task Role의 사용 예시는 아래와 같다.
Task Execution Role과는 다르게 Task Role은 구동되어 있는 Container Application이 사용할 권한을 부여해야 한다.
- Application -> S3 버킷에 파일을 업로드하는 작업 수행
- 요새 보면 Java에서 AWS S3에 파일 올리는 작업이 많지 않은가??
- 위와같이 Container Application에서 AWS 서비스를 사용하는 경우 Task Role이 필요하다
- DynamoDB에서 데이터를 읽는 작업 수행
- Application에서 DynamoDB에서 값을 CRUD 하는 작업을 해야 하는데??
- 위 작업을 수행하려면 Task Role의 권한에 DynamoDB 관련 권한이 부여되어야 한다
기억해야 하는 부분
Task Role은 Task 상의 구동된 개별적인 Container들이 다른 AWS 서비스를 사용할 때 필요한 권한을 지정한 것이다.
무분별하게 Task Role의 Attatch된 역할에 권한을 부여하지 말자, 잘못하면 서비스 전체에 영향을 미친다.
01-2. ECS Task Execution Role
# AmazonECSTaskExecutionRolePolicy
# ECS Task Execution Role에 붙히면 되는 IAM Role
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ecr:GetAuthorizationToken",
"ecr:BatchCheckLayerAvailability",
"ecr:GetDownloadUrlForLayer",
"ecr:BatchGetImage",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "*"
}
]
}

Task Execution Role은 ECS Service 자체가 컨테이너를 관리하기 위해 필요한 권한만 부여해야 한다.
이는 애플리케이션 코드(Container 안의 Application)가 직접 사용할 필요가 없는 권한이다.
Task execution role은 Container Agent or Fargate가 사용자를 대신하여 컨테이너를 관리(AWS API 호출)하기 위한 role이다.
즉, ECS Task 상에 구동 된 컨테이너를 실행하기 위한 Role이라고도 볼 수 있다.
대표적인 Task Execution Role의 사용 예시는 아래와 같다
아래 예를 보면 애플리케이션 레벨의 IAM 권한이 아닌 ECS Service 레벨의 권한이라고 볼 수 있다
- ECR에서 Container image를 pull 하는 경우
- Secret Manager의 값(ID, PWD)를 가져오는 경우
- CloudWatch Logs에 로그를 기록하는 경우
01-3. ECS Service Role
AWSServiceRoleForEcs
실제 ECS Service 구동시에 사용하는 IAM Managed Policy, Service 구동 시 사용하면 된다
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:AuthorizeSecurityGroupEgress",
"ec2:AuthorizeSecurityGroupIngress",
"ec2:CreateNetworkInterface",
"ec2:CreateSecurityGroup",
"ec2:CreateTags",
"ec2:DeleteNetworkInterface",
"ec2:DeleteSecurityGroup",
"ec2:Describe*",
"ec2:DetachNetworkInterface",
"ec2:ModifyNetworkInterfaceAttribute",
"ec2:RevokeSecurityGroupEgress",
"ec2:RevokeSecurityGroupIngress"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"elasticloadbalancing:AddTags",
"elasticloadbalancing:ApplySecurityGroupsToLoadBalancer",
"elasticloadbalancing:AttachLoadBalancerToSubnets",
"elasticloadbalancing:ConfigureHealthCheck",
"elasticloadbalancing:CreateLoadBalancer",
"elasticloadbalancing:CreateLoadBalancerListeners",
"elasticloadbalancing:DeleteLoadBalancer",
"elasticloadbalancing:DeleteLoadBalancerListeners",
"elasticloadbalancing:Describe*",
"elasticloadbalancing:DeregisterInstancesFromLoadBalancer",
"elasticloadbalancing:RegisterInstancesWithLoadBalancer"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ecs:CreateCluster",
"ecs:CreateService",
"ecs:DeleteCluster",
"ecs:DeleteService",
"ecs:DeregisterContainerInstance",
"ecs:DeregisterTaskDefinition",
"ecs:Describe*",
"ecs:DiscoverPollEndpoint",
"ecs:List*",
"ecs:RegisterTaskDefinition",
"ecs:StartTask",
"ecs:StopTask",
"ecs:UpdateService"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:Describe*",
"logs:PutLogEvents",
"logs:PutRetentionPolicy"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"application-autoscaling:DeleteScalingPolicy",
"application-autoscaling:DeregisterScalableTarget",
"application-autoscaling:DescribeScalableTargets",
"application-autoscaling:DescribeScalingActivities",
"application-autoscaling:DescribeScalingPolicies",
"application-autoscaling:PutScalingPolicy",
"application-autoscaling:RegisterScalableTarget"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"servicediscovery:CreateService",
"servicediscovery:DeleteService",
"servicediscovery:DeregisterInstance",
"servicediscovery:Get*",
"servicediscovery:List*",
"servicediscovery:RegisterInstance"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"cloudwatch:DeleteAlarms",
"cloudwatch:Describe*",
"cloudwatch:GetMetricStatistics",
"cloudwatch:List*",
"cloudwatch:PutMetricAlarm",
"cloudwatch:PutMetricData"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"sns:ListTopics"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ssm:GetParameter",
"ssm:GetParameters",
"ssm:GetParametersByPath"
],
"Resource": "arn:aws:ssm:*:*:parameter/aws/service/ecs*"
},
{
"Effect": "Allow",
"Action": [
"iam:PassRole"
],
"Resource": [
"arn:aws:iam::*:role/ecsInstanceRole*",
"arn:aws:iam::*:role/ecsAutoscaleRole*"
],
"Condition": {
"StringLike": {
"iam:PassedToService": [
"ecs-tasks.amazonaws.com",
"ec2.amazonaws.com",
"application-autoscaling.amazonaws.com"
]
}
}
},
{
"Effect": "Allow",
"Action": [
"iam:CreateServiceLinkedRole"
],
"Resource": "*",
"Condition": {
"StringLike": {
"iam:AWSServiceName": [
"ecs.amazonaws.com",
"ecs.application-autoscaling.amazonaws.com",
"spot.amazonaws.com",
"spotfleet.amazonaws.com"
]
}
}
}
]
}
- 해당 권한(AWSServiceRoleForECS Policy)는 ECS Service에 Attached 되어 있는 권한
- 실제 서비스 구동 시 해당 권한 사용
01-4. 비교

99. 참고 자료
Difference between AWS Elastic Container Service's (ECS) ExecutionRole and TaskRole
I'm using AWS's CloudFormation, and I recently spent quite a bit of time trying to figure out why the role I had created and attached policies to was not enabling my ECS task to send a message to a
stackoverflow.com
[AWS] [ECS] Task Role vs. Execution Role 차이
공부 기록용이니 피드백 주시면 감사하겠습니다 ECS를 만들기 위해서 먼저 Service 와 task 라는걸 만들게 되는데Task 의 설정에 Task Role 이랑 Task Execution Role 이라는게 나온다. Task Role Task Execution Ro
jibinary.tistory.com
Authenticating with AWS services - Replatform .NET Applications with Windows Containers
Thanks for letting us know this page needs work. We're sorry we let you down. If you've got a moment, please tell us how we can make the documentation better.
docs.aws.amazon.com
'Public Cloud > AWS - Practice' 카테고리의 다른 글
| [AWS] ECS 실행중인 Task에 Tag 지정(tag propagation)하기 (0) | 2025.03.10 |
|---|---|
| [AWS] EC2의 EBS 스토리지 재부팅 없이 늘리는 방법 (0) | 2025.01.20 |
| [AWS] VPC, Subnet, Routing Table, NAT 생성 과정 정리 (0) | 2025.01.20 |
| [AWS] AWS Cross Account Role Assume (0) | 2025.01.20 |
| [AWS] ECS Code 시리즈를 통한 CI/CD 파이프라인 구성기 (0) | 2025.01.20 |