공인 IP가 할당된 ECS 서비스

ECS 태스크의 공인 IP가 필요한지 확인하고 공개 진입 지점과 내부 통신 경로를 제한하세요.

설명

Fargate ECS 서비스에서 assign_public_ip: true를 사용하면 태스크의 네트워크 인터페이스에 공인 IPv4 주소를 할당할 수 있습니다. 인터넷 게이트웨이 경로와 보안 그룹 등이 허용하면 태스크에 직접 연결할 수 있으므로, 직접 공개할 필요가 없는 애플리케이션은 불필요한 공개 경로를 줄이세요.

공인 IP만으로 서비스 접근이나 인증이 허용되는 것은 아닙니다. 일반적으로 내부 태스크는 사설 서브넷에 두고, 외부 서비스가 필요한 경우 로드 밸런서 같은 통제된 진입 지점을 사용합니다.

잠재적 영향

  • 네트워크와 서비스 설정이 허용하면 태스크가 외부 스캔과 연결 시도에 노출될 수 있습니다.
  • 로드 밸런서의 통제를 거치지 않는 직접 경로가 열리면 의도한 접근 제한을 우회할 수 있습니다.

해결 방법

  • 직접 공개할 필요가 없는 태스크는 assign_public_ip를 false로 설정하고 적절한 사설 서브넷과 보안 그룹을 사용하세요.
  • 이미지 가져오기, 로그 전송, 외부 서비스 호출에 필요한 NAT 또는 지원되는 프라이빗 엔드포인트를 먼저 준비하세요.
  • 로드 밸런서와 태스크 사이의 통신을 제한하고 IPv6를 포함한 실제 경로를 점검하세요. 새 태스크 배포 후 정상 동작과 연결을 확인하세요.

예시

실제 클러스터, awsvpc 태스크 정의, 서브넷과 보안 그룹이 필요한 발췌입니다. 두 예시의 서비스 이름은 서로 다릅니다.

변경 전

yaml
- name: ECS 서비스 생성
  community.aws.ecs_service:
    state: present
    name: example-public-ip-service
    cluster: my-ecs-cluster
    task_definition: my-task-def:1
    desired_count: 2
    launch_type: FARGATE
    network_configuration:
      subnets:
        - subnet-aaaa1111
        - subnet-bbbb2222
      security_groups:
        - sg-cccc3333
      assign_public_ip: true

태스크에 공인 IP 할당을 요청합니다. 실제 외부 접근은 라우팅과 보안 그룹, 애플리케이션 설정에 달려 있습니다.

변경 후

yaml
- name: ECS 서비스 생성
  community.aws.ecs_service:
    state: present
    name: example-private-service
    cluster: my-ecs-cluster
    task_definition: my-task-def:1
    desired_count: 2
    launch_type: FARGATE
    network_configuration:
      subnets:
        - subnet-aaaa1111
        - subnet-bbbb2222
      security_groups:
        - sg-cccc3333
      assign_public_ip: false

공인 IPv4 할당을 끈 서비스를 정의합니다. 기존 서비스의 공개 경로를 자동으로 제거하지는 않으므로 별도로 변경하거나 종료해야 합니다. 주소 할당을 끄는 것만으로 모든 네트워크 경로가 격리되는 것은 아닙니다.

참조