설명
ECS 서비스의 role은 서비스를 대신해 로드 밸런서를 호출하는 데 사용하는 역할입니다. 필요 이상의 권한을 부여하면 역할이 악용될 때 영향이 커질 수 있습니다. 역할 이름만으로 관리자 권한이 있는지는 알 수 없으므로 연결된 정책과 신뢰 관계를 확인해야 합니다.
이 역할은 컨테이너 애플리케이션에 AWS 권한을 제공하는 태스크 역할이나 이미지 가져오기·로그 전송에 쓰는 태스크 실행 역할과 다릅니다. 명시적 서비스 역할은 로드 밸런서를 사용하고 태스크가 awsvpc 네트워크 모드가 아닐 때만 지정할 수 있습니다. 그 밖의 구성에서는 해당 서비스 연결 역할 요구 사항을 따르세요.
잠재적 영향
- 서비스 역할에 과도한 권한이 있고 이를 악용할 수 있다면 필요한 로드 밸런서 작업을 넘어 리소스가 변경될 수 있습니다. 실제 범위는 권한·신뢰 정책과 다른 통제에 달려 있습니다.
- 서비스 역할과 태스크 역할을 혼동하면 컨테이너의 권한을 잘못 관리하거나 필요한 서비스 동작을 차단할 수 있습니다.
해결 방법
- 실제 서비스 역할의 관리형·인라인 정책과 신뢰 정책을 확인하고 필요한 작업과 리소스로 제한하세요. 네트워크 모드와 로드 밸런서 구성에 맞는 서비스 연결 역할을 사용하세요.
- 태스크 역할과 태스크 실행 역할도 각각의 용도에 맞게 최소 권한으로 구성하세요. 역할 이름만 바꾸어서는 권한이 줄어들지 않습니다.
community.aws11.1.0의ecs_service업데이트 경로는role을 변경하지 않습니다. 기존 서비스에서는 정책을 직접 수정하거나 지원되는 전환 절차를 계획하고, 실제 역할·정책과 로드 밸런서 등록 및 상태 확인을 검증하세요.
예시
클러스터, 태스크 정의, 대상 그룹과 역할을 별도로 준비하세요. 예시는 awsvpc가 아닌 태스크의 app 컨테이너 포트 8080을 대상으로 하며, target_group_arn에는 실제 대상 그룹 ARN을 넣어야 합니다. desired_count: 0은 태스크를 실행하지 않는 설정입니다.
변경 전
yaml
- name: ECS Service
community.aws.ecs_service:
state: present
name: console-test-service
cluster: new_cluster
task_definition: "new_cluster-task:1"
desired_count: 0
load_balancers:
- targetGroupArn: "{{ target_group_arn }}"
containerName: app
containerPort: 8080
role: admin
admin 역할을 지정합니다. 실제 권한과 ECS가 이 역할을 맡을 수 있는 신뢰 정책을 확인해야 합니다.
변경 후
yaml
- name: ECS Service
community.aws.ecs_service:
state: present
name: console-test-service
cluster: new_cluster
task_definition: "new_cluster-task:1"
desired_count: 0
load_balancers:
- targetGroupArn: "{{ target_group_arn }}"
containerName: app
containerPort: 8080
새 서비스에서는 명시적 역할 대신 적용되는 서비스 연결 역할을 사용합니다. 기존 서비스에서 필드를 제거하는 것만으로 역할이나 권한이 바뀌지는 않습니다.