Amazon ECS를 위한 Fargate 보안 고려 사항

Amazon ECS를 위한 Fargate 보안 고려 사항

Fargate는 각 워크로드를 격리된 가상 환경에서 실행하므로 각 태스크는 전용 인프라 용량을 가져요. Fargate에서 실행되는 워크로드는 네트워크 인터페이스, 임시 스토리지, CPU, 메모리를 다른 태스크와 공유하지 않습니다.

출처: 문서

본문

애플리케이션 컨테이너와 사이드카(sidecar) 컨테이너, 또는 사이드카만 포함해 태스크 안에서 여러 컨테이너를 실행할 수 있어요. 사이드카는 Amazon ECS 태스크에서 애플리케이션 컨테이너와 함께 실행되는 컨테이너입니다. 애플리케이션 컨테이너가 핵심 애플리케이션 코드를 실행하는 동안 사이드카에서 실행되는 프로세스는 애플리케이션을 보강할 수 있어요. 사이드카는 애플리케이션 기능을 전용 컨테이너로 분리하는 데 도움이 되어, 애플리케이션 일부를 더 쉽게 업데이트할 수 있게 해줍니다.

같은 태스크의 일부인 컨테이너는 Fargate 런치 타입에서 리소스를 공유해요. 이 컨테이너들은 항상 같은 호스트에서 실행되고 컴퓨팅 리소스를 공유하기 때문입니다. 또한 Fargate가 제공하는 임시 스토리지도 공유합니다. 태스크 안의 Linux 컨테이너는 IP 주소와 네트워크 포트를 포함한 네트워크 네임스페이스를 공유해요. 태스크 안에서 태스크에 속한 컨테이너는 localhost를 통해 서로 통신할 수 있습니다.

Fargate의 런타임 환경은 EC2 인스턴스에서 지원되는 특정 컨트롤러 기능을 사용하지 못하게 합니다. Fargate에서 실행되는 워크로드를 설계할 때 다음을 고려하세요:

  • 권한 있는 컨테이너 또는 액세스 없음 – 권한 있는 컨테이너(privileged container)나 액세스 같은 기능은 현재 Fargate에서 사용할 수 없어요. 이는 Docker in Docker 실행 같은 사용 사례에 영향을 줍니다.
  • Linux 기능에 대한 제한된 액세스 – Fargate에서 컨테이너가 실행되는 환경은 잠겨 있어요. 권한 상승(privilege escalation)을 방지하기 위해 CAP_SYS_ADMIN, CAP_NET_ADMIN 같은 추가 Linux 기능이 제한됩니다. Fargate는 태스크에 CAP_SYS_PTRACE Linux 기능을 추가하는 것을 지원해, 태스크 안에 배포된 관측 가능성·보안 도구가 컨테이너화된 애플리케이션을 모니터링할 수 있게 합니다.
  • 기본 호스트에 대한 액세스 없음 – 고객이나 AWS 운영자 모두 고객 워크로드를 실행하는 호스트에 연결할 수 없어요. ECS exec를 사용해 Fargate에서 실행되는 컨테이너에 명령을 실행하거나 셸을 얻을 수 있습니다. 디버깅을 위한 진단 정보를 수집하는 데 ECS exec를 사용할 수 있어요. Fargate는 또한 컨테이너가 기본 호스트의 파일 시스템, 디바이스, 네트워킹, 컨테이너 런타임 같은 리소스에 접근하지 못하게 합니다.
  • 네트워킹 – 보안 그룹과 네트워크 ACL을 사용해 인바운드·아웃바운드 트래픽을 제어할 수 있어요. Fargate 태스크는 VPC의 구성된 서브넷에서 IP 주소를 받습니다.