Amazon ECS 애플리케이션을 인터넷에 연결 - Amazon Elastic Container Service

Amazon ECS 애플리케이션을 인터넷에 연결

대부분의 컨테이너화된 애플리케이션에는 인터넷에 대한 아웃바운드 액세스가 필요한 구성 요소가 최소한 몇 개 있습니다. 예를 들어 모바일 앱의 백엔드에는 푸시 알림에 대해 아웃바운드 액세스가 필요합니다.

Amazon Virtual Private Cloud에는 VPC와 인터넷 간의 통신을 용이하게 하는 두 가지 기본 방법이 있습니다.

퍼블릭 서브넷 및 인터넷 게이트웨이

인터넷 게이트웨이에 연결된 퍼블릭 서브넷의 아키텍처를 보여주는 다이어그램.

인터넷 게이트웨이로 라우팅되는 퍼블릭 서브넷을 사용하는 경우 컨테이너화된 애플리케이션을 퍼블릭 서브넷의 VPC 내부 호스트에서 실행할 수 있습니다. 컨테이너를 실행하는 호스트에는 퍼블릭 IP 주소가 할당됩니다. 이 퍼블릭 IP 주소는 인터넷에서 라우팅할 수 있습니다. 자세한 내용은 Amazon VPC 사용 설명서인터넷 게이트웨이를 참조하세요.

이 네트워크 아키텍처는 애플리케이션을 실행하는 호스트와 인터넷상의 다른 호스트 간 직접 통신을 용이하게 합니다. 통신은 양방향으로 이루어집니다. 즉, 인터넷상의 다른 호스트에 아웃바운드 연결을 설정할 수 있을 뿐만 아니라 인터넷상의 다른 호스트가 해당 호스트에 연결을 시도할 수도 있습니다. 따라서 보안 그룹 및 방화벽 규칙에 주의해야 합니다. 그러면 인터넷상의 다른 호스트는 사용자가 열고 싶지 않은 연결을 열 수 없습니다.

예를 들어, 애플리케이션이 Amazon EC2에서 실행되는 경우 SSH 액세스를 위한 포트 22가 열려 있지 않아야 합니다. 그렇지 않으면 인스턴스가 인터넷의 악성 봇으로부터 지속적인 SSH 연결 시도를 받을 수 있습니다. 이 봇은 퍼블릭 IP 주소를 트롤링합니다. 악성 봇이 열린 SSH 포트를 찾으면 암호를 무차별 입력하여 인스턴스에 액세스하려고 시도합니다. 이 때문에 많은 조직에서는 퍼블릭 서브넷의 사용을 제한하고 전부는 아니더라도 대부분의 리소스를 프라이빗 서브넷 내에 두는 방식을 선호합니다.

네트워킹에 퍼블릭 서브넷을 사용하는 방식은 많은 양의 대역폭이나 최소 지연 시간이 필요한 퍼블릭 애플리케이션에 적합합니다. 적용 가능한 사용 사례로, 비디오 스트리밍 및 게임 서비스가 포함됩니다.

이 네트워킹 접근 방식은 Amazon EC2에서 Amazon ECS를 사용하는 경우 및 AWS Fargate에서 사용하는 경우 모두 지원됩니다.

  • Amazon EC2 - 퍼블릭 서브넷에서 EC2 인스턴스를 시작할 수 있습니다. Amazon ECS는 이러한 EC2 인스턴스를 클러스터 용량으로 사용하며, 인스턴스에서 실행되는 모든 컨테이너는 아웃바운드 네트워킹을 위해 호스트의 기본 퍼블릭 IP 주소를 사용할 수 있습니다. hostbridge 네트워크 모드 모두에 적용됩니다. 그러나 awsvpc 네트워크 모드는 퍼블릭 IP 주소를 사용하는 작업 ENI를 제공하지 않습니다. 따라서 인터넷 게이트웨이를 직접 사용할 수 없습니다.

  • Fargate - Amazon ECS 서비스를 생성할 때 서비스의 네트워킹 구성에 대한 퍼블릭 서브넷을 지정하고 퍼블릭 IP 주소 할당 옵션을 사용합니다. 각 Fargate 작업은 퍼블릭 서브넷에서 네트워크로 연결되며 인터넷과 직접 통신하기 위한 자체 퍼블릭 IP 주소를 가지고 있습니다.

프라이빗 서브넷 및 NAT 게이트웨이

NAT 게이트웨이에 연결된 프라이빗 서브넷의 아키텍처를 보여주는 다이어그램.

프라이빗 서브넷 및 NAT 게이트웨이를 사용하는 경우 프라이빗 서브넷에 있는 호스트에서 컨테이너화된 애플리케이션을 실행할 수 있습니다. 따라서 이 호스트에는 VPC 내에서 라우팅할 수 있지만 인터넷에서 라우팅할 수 없는 프라이빗 IP 주소가 있습니다. 즉, VPC 내의 다른 호스트는 프라이빗 IP 주소를 사용하여 호스트에 연결할 수 있지만 인터넷상의 다른 호스트는 호스트와 인바운드 통신을 할 수 없습니다.

프라이빗 서브넷에서는 Network Address Translation(NAT) 게이트웨이를 사용하여 프라이빗 서브넷 내부의 호스트를 인터넷에 연결할 수 있습니다. 인터넷상의 호스트는 퍼블릭 서브넷 내에 있는 NAT 게이트웨이의 퍼블릭 IP 주소에서 시작하는 인바운드 연결을 수신합니다. NAT 게이트웨이는 인터넷 및 프라이빗 VPC 사이에서 브리지 역할을 합니다. 이 구성은 인터넷에서 공격자가 직접 액세스하지 못하도록 VPC를 보호하므로 보안상의 이유로 종종 선호됩니다. 자세한 정보는 Amazon VPC 사용 설명서NAT 게이트웨이 단원을 참조하세요.

이 프라이빗 네트워킹 접근 방식은 컨테이너를 외부 직접 액세스로부터 보호하려는 시나리오에 적합합니다. 적용 가능한 시나리오로, 사용자 데이터와 암호를 저장하는 결제 처리 시스템 또는 컨테이너가 포함됩니다. 계정에서 NAT 게이트웨이 생성 및 사용에 대한 요금이 청구됩니다. NAT 게이트웨이 시간당 사용 요금 및 데이터 처리 요금도 적용됩니다. 이중화를 위해 각 가용 영역에 하나의 NAT 게이트웨이가 있어야 합니다. 이렇게 하면 단일 가용 영역의 가용성이 손실되어도 아웃바운드 연결이 손상되지 않습니다. 따라서 워크로드가 적은 경우 프라이빗 서브넷 및 NAT 게이트웨이를 사용하는 것이 더 비용 효율적일 수 있습니다.

이 네트워킹 접근 방식은 Amazon EC2에서 Amazon ECS를 사용하는 경우 및 AWS Fargate에서 사용하는 경우 모두 지원됩니다.

  • Amazon EC2 - 프라이빗 서브넷에서 EC2 인스턴스를 시작할 수 있습니다. 이러한 EC2 호스트에서 실행되는 컨테이너는 기본 호스트 네트워킹을 사용하며 아웃바운드 요청은 NAT 게이트웨이를 통과합니다.

  • Fargate - Amazon ECS 서비스를 생성할 때 서비스의 네트워킹 구성에 대한 프라이빗 서브넷을 지정하고 퍼블릭 IP 주소 할당 옵션을 사용하지 않습니다. 각 Fargate 작업은 프라이빗 서브넷에서 호스팅됩니다. 아웃바운드 트래픽은 해당 프라이빗 서브넷에 연결한 모든 NAT 게이트웨이를 통해 라우팅됩니다.