AWS 엣지 서비스 시작하기

기본 개념을 다루는 실습 자습서 및 콘텐츠입니다.

AWS 엣지 서비스

AWS 리전은 AWS가 데이터 센터를 클러스터링하고 EC2 및 S3와 같은 지역 서비스를 운영하는 물리적 위치입니다. 특정 온라인 애플리케이션의 경우 사용자 트래픽이 여러 공용 네트워크를 통해 지역 인프라에 도달할 수 있습니다. 성능, 신뢰성 및 보안 측면에서 제어되지 않는 네트워크를 통과할 때 발생하는 단점을 해결하려면 아키텍처에 AWS 엣지 서비스를 추가하는 것을 고려해야 합니다. Amazon CloudFront와 AWS Global Accelerator와 같은 AWS 엣지 서비스는 AWS 리전 이외의 전 세계에 분산된 수백 개의 접속 지점(POP)에서 운영됩니다. 사용자는 평균 20~30밀리초 이내에 이러한 PoP에서 서비스를 받으며, 필요한 경우 트래픽은 퍼블릭 인터넷을 거치지 않고 AWS 글로벌 네트워크를 통해 지역 인프라로 다시 전송됩니다. AWS 글로벌 인프라는 목적에 맞게 구축된 가용성이 높고 지연 시간이 짧은 사설 인프라로, 전 세계의 지상 및 대양 횡단 케이블을 통해 연결되는 글로벌 완전 이중화 메트로 광섬유 네트워크를 기반으로 구축되었습니다.

짧은 지연 시간과 빠른 전송 속도로 안전하게 콘텐츠를 전송합니다.

일반적인 익스플로잇 공격으로부터 웹 애플리케이션을 보호합니다.

DDoS 보호 기능을 통해 애플리케이션 가용성과 응답성을 최대화합니다.

계정 전체의 방화벽 규칙을 중앙에서 구성하고 관리합니다.

AWS 글로벌 네트워크를 사용하여 애플리케이션의 가용성, 성능, 보안을 개선합니다.

Amazon CloudFront, AWS의 CDN

CloudFront는 Amazon의 콘텐츠 배포 네트워크(CDN)입니다. CloudFront는 HTTP(S) 기반 웹 애플리케이션을 가속화하고 가용성과 보안을 강화하는 데 사용됩니다. CloudFront는 전체 웹 사이트 전송, API 보호 및 가속화, 적응형 비디오 스트리밍, 소프트웨어 다운로드와 같은 사용 사례에 사용할 수 있습니다. 이 서비스를 사용하려면 CloudFront 배포를 생성하고, 오리진(공개적으로 액세스 가능한 도메인 이름을 가진 모든 오리진)을 구성하고, Amazon Certificate Manager를 사용하여 유효한 TLS 인증서를 발급 및 첨부한 다음, 웹 애플리케이션의 도메인 이름이 배포에서 생성된 도메인 이름(xyz.cloudfront.net)을 가리키도록 권한 있는 DNS 서버를 구성해야 합니다. DNS 확인 단계에서 사용자가 웹 애플리케이션으로 이동하면 HTTP(S) 요청이 지연 시간 및 가용성 측면에서 최상의 CloudFront PoP로 동적으로 라우팅됩니다. PoP가 선택되면 사용자는 PoP 서버 중 하나에서 TLS 핸드셰이크를 포함한 TCP 연결을 종료한 다음 HTTP 요청을 보냅니다. 콘텐츠가 CloudFront의 캐시 계층 중 하나에 캐시된 경우 요청은 CloudFront에 의해 로컬로 이행됩니다. 그렇지 않으면 요청이 오리진으로 전달됩니다. CloudFront는 인프라에 2개의 계층으로 구성되어 있습니다. 첫 번째 계층은 사용자 연결이 종료되고 계층 3/4 DDoS 공격이 완화되는 엣지 로케이션을 기반으로 합니다. 캐싱 기능을 제공하며, 구성된 경우 CloudFront Functions를 실행하고 WAF 규칙을 적용합니다. 두 번째 계층은 AWS 리전에서 호스팅되는 리전 엣지 캐시를 기반으로 합니다. 캐시 보존 시간을 늘리고 캐시 적중률을 개선하며 구성 시 Lambda@Edge 함수를 실행합니다. CloudFront는 특성에 따라 각 HTTP에 대해 이러한 계층의 사용을 동적으로 최적화합니다. 예를 들어 동적 태그가 지정된 HTTP 요청(예: 캐싱 비활성화, POST/PUT/DELETE 요청, Cache-Control 응답 헤더를 사용하여 캐시할 수 없는 것으로 태그가 지정된 객체에 대한 요청 등)은 캐싱 계층을 건너뛰고 결과적으로 엣지 로케이션에서 오리진으로 직접 전송됩니다.
마지막으로, CloudFront는 특정 순서로 로직을 실행합니다. 먼저 CloudFront는 기본 보안 제어(예: TLS 정책, HTTP에서 HTTPS로 리디렉션, 지역 차단, 서명된 URL)를 실행한 후 AWS WAF WebACL의 규칙을 실행하고, 최종 사용자 요청 이벤트에 구성된 경우 엣지 함수의 코드를 실행하고, 요청이 캐시 가능한지 캐시를 검사한 다음, 오리진 요청 이벤트에 구성된 경우 Lambda@Edge 코드를 실행하고, 필요한 경우 마지막으로 요청을 오리진에 전달합니다. CloudFront 계층 내의 HTTP 요청 수명 주기에 대해 자세히 알아보려면 다음 re:Invent 강연을 시청하세요. 참고로 이 강연을 녹화할 당시에는 CloudFront Functions 기능이 출시되지 않았습니다.

계층 7에서 웹 애플리케이션을 보호하는 AWS WAF

AWS WAF는 애플리케이션 수준의 위협으로부터 웹 애플리케이션을 보호하는 데 사용할 수 있는 웹 애플리케이션 방화벽입니다. 애플리케이션 수준 위협에는 다음이 포함됩니다.

  • 애플리케이션 리소스를 소비하여 합법적인 사용자가 사용할 수 없도록 하는 것을 목표로 하는 DDoS 공격(예: HTTP Floods) 
  • 애플리케이션 수준의 취약점을 악용하여 데이터를 훔치거나 비트코인 채굴과 같은 승인되지 않은 방식으로 리소스를 사용하는 등 악의적인 활동을 시도하는 공격 
  • 계정 탈취 및 콘텐츠 스크래핑과 같은 다양한 방식으로 비즈니스에 해를 끼칠 수 있는 자동화된 봇에 의해 수행되는 공격 

AWS WAF를 사용하려면 WebACL에서 규칙을 생성한 다음 이를 보호가 필요한 리소스에 연결해야 합니다. 글로벌 WebACL은 CloudFront 배포에 연결할 수 있고, 지역별 WebACL은 ALB 및 API Gateway와 같은 동일한 리전 내의 리소스에 연결할 수 있습니다. WAF WebACL이 리소스에 연결되면 리소스의 기본 서비스(예: CloudFront 또는 ALB)는 HTTP 요청의 사본을 AWS WAF 서비스에 전달하여 구성된 규칙을 한 자릿수 밀리초 내에 평가합니다. 규칙 평가에 따라 AWS WAF 서비스는 기본 서비스에 요청 처리 방법(예: 차단, 전달, 챌린지 등)을 지시합니다. 참고로 AWS WAF 로직은 전적으로 HTTP 요청 속성을 기반으로 합니다(응답 속성 대비).

새로 생성된 WAF WebACL에는 모든 요청을 허용하는 기본 규칙만 포함되어 있으며, 여기에 다양한 유형의 여러 규칙을 추가할 수 있습니다. 첫째, 검사된 HTTP 요청의 속성(예: IP, 헤더, 쿠키, URL 등)을 기반으로 사용자 지정 규칙을 만들 수 있습니다. 규칙을 규칙 그룹으로 그룹화하여 관리를 용이하게 할 수도 있습니다. 둘째, AWS 또는 AWS Marketplace의 공급업체에서 제공하는 관리형 규칙을 추가할 수 있습니다. 이러한 관리형 규칙은 WebACL에 구성 가능한 규칙 그룹으로 추가됩니다. 예를 들어 핵심 규칙 세트 및 익명 IP 목록과 같은 AWS 관리형 그룹을 추가할 수 있습니다. Bot Control 및 계정 탈취 방지와 같은 고급 관리 규칙에는 클라이언트 측 SDK 통합이 필요합니다. 일치 시 허용 및 카운트(헤더 업스트림으로 전송 가능), 차단(사용자 지정 응답으로 응답 가능), 속도 제한, CAPTCHA를 사용한 최종 챌린지 또는 사일런트 챌린지 등의 액션으로 규칙을 구성할 수 있습니다. AWS 관리형 규칙과 같은 규칙은 WAF 평가에서 도달할 경우 후속 규칙의 로직에 사용될 수 있는 레이블을 생성합니다. WAF 로그 레코드에서 사용할 수 있는 레이블을 내보내도록 자체 규칙을 구성할 수 있습니다.

AWS Global Accelerator, 네트워크 수준에서의 가속화

AWS Global Accelerator는 AWS 글로벌 인프라를 사용하여 온라인 애플리케이션의 성능, 신뢰성 및 보안을 향상시키는 네트워킹 서비스입니다. AWS Global Accelerator는 OSI 모델의 계층 4에서 작동하므로 모든 TCP/UDP 애플리케이션과 함께 사용할 수 있습니다. 사용 사례의 예로는 UDP/TCP 기반 멀티플레이어 게임, IP 기반 음성 및 비디오 전송, IoT, 비디오 수집 및 FTP 업로드, VPN, Git, AdTech 입찰과 같은 기타 사용 사례가 있습니다. 

AWS Global Accelerator는애플리케이션의 리전 엔드포인트 역할을 수행할 수 있는 Network Load Balancer, Application Load Balancer, AWS EC2 인스턴스, 탄력적 IP 앞에 배포할 수 있습니다. 이 서비스를 사용하려면 애플리케이션의 고정 진입점 역할을 하는 두 개의 글로벌 정적 애니캐스트 IPv4 주소를 제공하는 액셀러레이터를 생성해야 합니다. Global Accelerator를 사용하면 단일 또는 여러 AWS 리전에 여러 애플리케이션 엔드포인트를 둘 수 있지만 모두 동일한 애니캐스트 IP 주소로 액세스할 수 있습니다. 그런 다음 웹 애플리케이션의 도메인 이름이 액셀러레이터의 전용 고정 IP를 가리키도록 권한 있는 DNS 서버를 구성합니다. 이러한 애니캐스트 IP는 모든 Global Accelerator PoP에서 발표되어 사용자 트래픽을 가장 가까운 PoP로 라우팅한 다음 AWS 글로벌 네트워크를 통해 지역 엔드포인트로 전달합니다.

개발자 학습 리소스

  • 우선순위
1

이 페이지의 내용이 도움이 되었나요?